Uso do comando 'shift' em bash

Uso do comando 'shift' em bash
Quando os argumentos da linha de comando recebem entradas do usuário, o primeiro argumento contém o nome do script. Às vezes, o nome do script é necessário para omitir para fins de programação. Esta tarefa pode ser realizada facilmente usando qualquer loop em bash. Usando o 'mudança'Comando é outra maneira de fazer a tarefa. Este comando é usado para mover um parâmetro posicional para a esquerda por padrão. Os diferentes usos do 'mudança'Comando em Bash mostrou neste tutorial.

Sintaxe:

A sintaxe do comando 'shift' é dada abaixo. Este comando tem um argumento opcional usado para definir o número de posições que serão deslocadas para a esquerda. O argumento deve ser positivo. Se o valor do argumento for definido como 0, nenhum argumento da linha de comando será deslocado. Se nenhum argumento for usado, um argumento da linha de comando será alterado por padrão.

mudança [n]

Exemplo 1: Imprima todos os valores de argumento da linha de comando

Crie um arquivo bash com o seguinte script para imprimir os valores de argumento da linha de comando usando 'para' loop sem 'shift' comando e 'while' loop with 'shift' comando. Cada valor de argumento será armazenado na variável, o valor quando o para O loop será executado, e essa variável será impressa posteriormente. O começar A variável foi usada no enquanto loop para ler cada valor de argumento usando o 'mudança'Comando e encerre o loop quando todos os argumentos da linha de comando forem impressos. Uma variável de contador, eu, foi usado no script para exibir o número do argumento. Se nenhum argumento da linha de comando for dado no momento da execução, uma sequência vazia será definida para o primeiro argumento e nada será impresso.

#!/BIN/BASH
#Print The Command-Line Aegument Values ​​usando e enquanto Loop
#Fole o contador
i = 1
eco "O argumento valoriza sem o comando de mudança:"
#Itere todos os valores usando o loop
Para valor em "$@"
fazer
eco "argumento não. $ i = $ valor "
((i ++))
feito
#Reinicialize o balcão
i = 1
#Definir o argumento opcional
start = $ 1:-""
eco "o argumento valores usando o comando shift:"
#Itere todos os valores usando o loop enquanto
enquanto ["$ start" != ""];
fazer
eco "argumento não. $ i = $ Start "
#Shift cada argumento por 1
mudança
start = $ 1
((i ++))
feito

Saída:

De acordo com a saída a seguir, o script acima foi executado com três valores de argumento da linha de comando. Os valores dos argumentos são impressos duas vezes usando o loop for e, durante o loop, com o 'mudançaComando.

Exemplo 2: Imprima os valores de argumento da posição uniforme

No exemplo anterior, nenhum argumento foi usado com o 'mudançaComando, e o valor do argumento foi deslocado por 1 para a esquerda. O uso do argumento opcional do 'mudança'O comando é mostrado neste exemplo. Crie um arquivo bash com o seguinte script para imprimir os valores de argumento da linha de comando da posição uniforme. O número total de argumentos da linha de comando foi contado e armazenado na variável total, e tem sido usado no enquanto loop para iterar o loop. O 'mudança'O comando foi usado com o valor do argumento 2 para mudar dois argumentos da linha de comando em cada iteração do loop. Cada argumento da linha de comando das posições uniformes será impresso com espaço depois de executar o script.

#!/BIN/BASH
#Count o número total de argumentos da linha de comando
total = $#
eco "Os argumentos totais são: $ total"
eco "Os valores de argumento da posição par são:"
enquanto [$ total -ge0];
fazer
#Print o valor do argumento com espaço
eco -n $ 1 ""
#Shift Dois argumentos
turno 2
#Decrement the Counter por 2
((total = $ total-2))
feito
#Add New Line
eco

Saída:

De acordo com a saída a seguir, o script acima executou seis valores de argumento da linha de comando sem o nome do script. Depois de imprimir o valor 89, o próximo valor da posição par é 34, e o próximo valor da posição par é 12.

Exemplo 3: Leia os valores específicos de argumentos específicos

A maneira de ler valores específicos da linha de comando usando o 'mudança'Comando sem usar nenhum loop mostrou neste exemplo. Crie um arquivo bash com o seguinte script. O número total de argumentos da linha de comando foi contado no script e, se o valor total for menor que 6, o script será encerrado exibindo uma mensagem de erro. Se os seis argumentos da linha de comando forem dados corretamente, o segundo argumento conterá o nome do host, o quarto argumento conterá o nome de usuário e o sexto argumento conterá a senha. O nome do host será armazenado em uma variável, mudando um argumento que restava. O nome de usuário será armazenado em uma variável, mudando dois argumentos restantes. A senha será armazenada em uma variável, mudando dois argumentos novamente. Em seguida, o nome do host, o nome de usuário e os valores de senha serão comparados com três valores de string para autenticar o usuário.

#!/BIN/BASH
#Count o número total de argumentos da linha de comando
total = $#
#Verifique os 6 valores de argumento são dados ou não
se [$ total -LT6]; então
eco "Número inválido de argumentos."
outro
#Shift um argumento
turno 1
#Leia o valor do nome do host
hostname = $ 1
#Shift Dois argumentos
turno 2
#Leia o valor do nome de usuário
nome de usuário = $ 1
#Shift Dois argumentos
turno 2
#Leia o valor da senha
senha = $ 1
fi
#Verifique os valores para a autenticação
se [[$ hostName == "localhost" && $ nome de usuário == "fahmida" && $ senha == "1234"]]; então
eco "autenticação bem -sucedida."
outro
eco "autenticação malsucedida."
fi

Saída:

De acordo com a saída, o script acima foi executado duas vezes com seis valores de argumento. Na primeira execução, os dados válidos foram aprovados e uma mensagem de sucesso foi impressa. Na segunda execução, dados inválidos foram aprovados e uma mensagem de falha foi impressa.

Conclusão:

O comando 'shift' é um comando muito útil para ler valores de argumento de linha de comando específicos. Diferentes usos deste comando foram descritos neste tutorial usando vários exemplos para ajudar os leitores a entender o objetivo de usar este comando no script Bash.