Introdução
Nós já examinado como passar argumentos de linha de comando para um bash script. Neste tutorial, vamos dar uma olhada em como podemos usar esses argumentos dentro do script bash.,
ler Mais:
Como Passar Argumentos de Linha de Comando para o Script Bash
Como Usar o cd de Comando no Bash Scripts
a Leitura de Saída de um Comando Em uma Matriz em Bash
a Entrada de Processamento
Vamos dar uma olhada nas diferentes maneiras de processar os argumentos passados para um bash script dentro do script.
2, 1. Parâmetros posicionais
argumentos passados a um script são processados na mesma ordem em que são enviados., A indexação dos argumentos começa em um, e o primeiro argumento pode ser acessado dentro do script usando $1. Da mesma forma, o segundo argumento pode ser acessado usando $2, e assim por diante. O parâmetro posicional refere-se a esta representação dos argumentos usando sua posição.
tomemos um exemplo do seguinte script, userReg-posicional-parâmetro.,sh, que imprime nome de usuário, idade e nome completo nessa ordem:
echo "Username: $1";echo "Age: $2";echo "Full Name: $3";
Agora vamos executar esse script com os três parâmetros de entrada:
sh userReg-positional-parameter.sh john 25 'John Smith'
A saída será:
Username : johnAge: 25Full Name: John Smith
2.2. Flags
Using flags is a common way of passing input to a script. Ao passar a entrada para o script, há uma bandeira (geralmente uma única letra) começando com um hífen ( – ) antes de cada argumento.vamos dar uma olhada no userReg-flags.sh script, que leva três argumentos: username (-u), age (-a), e nome completo (-f).,
modificaremos o script anterior para usar bandeiras em vez de depender de parâmetros posicionais., O getopts função lê as bandeiras na entrada, e OPTARG refere-se aos valores correspondentes:
Vamos executar este script com a mesma entrada, só que desta vez, vamos adicionar sinalizadores para a entrada:
sh userReg-flags.sh -f 'John Smith' -a 25 -u john
A saída é o mesmo que antes, apesar de ter deslocado as posições do nome de usuário e nome completo argumentos:
Username : johnAge: 25Full Name: John Smith
Aqui estamos usando o getopts função para analisar as bandeiras fornecidos como entrada, e o caso do bloco de atribuir o valor especificado para a variável correspondente.
2, 3., A construção de Loop
parâmetros posicionais, embora conveniente em muitos casos, não pode ser usada quando o tamanho da entrada é Desconhecido. O uso de uma construção de loop vem a calhar nestas situações.
a variável é a matriz de todos os parâmetros de entrada. Usando esta variável dentro de um laço for, podemos iterar sobre a entrada e processar todos os argumentos passados.
vamos tomar um exemplo do script users-loop.,sh, que imprime todos os nomes de usuários que foram passados como entrada:
i=1;for user in "" do echo "Username - $i: $user"; i=$((i + 1));done
Agora vamos executar o script:
sh users-loop.sh john matt bill 'joe wicks' carol
E vamos ver o nosso saída:
Username - 1: johnUsername - 2: mattUsername - 3: billUsername - 4: joe wicksUsername - 5: carol
No exemplo acima, estamos iteração a variável de usuário longo de toda a matriz de parâmetros de entrada. Esta iteração começa no primeiro argumento de entrada, john, e corre até o último argumento, carol, mesmo que o tamanho da entrada seja desconhecido.
2, 4., Operador de Shift
Operador De Shift em bash (sintacticamente shift n, onde n é o número de posições a mover) muda a posição dos argumentos da linha de comandos. O valor por omissão para n é um, se não for indicado.
o operador de deslocamento faz com que a indexação da entrada comece a partir da posição deslocada. Em outras palavras, quando este operador é usado em uma entrada de array, o parâmetro posicional $1 muda para o argumento alcançado ao mudar as posições n para a direita a partir do argumento atual vinculado ao parâmetro posicional $1.,
considere um script de exemplo que determina se a entrada é ímpar ou mesmo:
sh parityCheck.sh 13 18 27 35 44 52 61 79 93
da discussão acima sobre o parâmetro posicional, agora sabemos que $1 se refere ao primeiro argumento, que é 13. Usando o operador de shift com entrada 1 (shift 1) faz com que a indexação comece a partir do segundo argumento. Ou seja, $1 agora se refere ao segundo argumento (18). Da mesma forma, o turno de chamada 2 fará com que a indexação comece a partir do quarto argumento (35).
vamos novamente dar uma olhada no exemplo do script de usuários discutido acima., Em vez de usar a variável e iterar sobre ela, agora vamos usar o operador de deslocamento. O $# variável devolve o tamanho de entrada:
i=1;j=$#;while do echo "Username - $i: $1"; i=$((i + 1)); shift 1;done
Vamos executar o script com a mesma entrada acima:
sh users-shift-operator.sh john matt bill 'joe wicks' carol
O resultado será o mesmo que antes:
Username - 1: johnUsername - 2: mattUsername - 3: billUsername - 4: joe wicksUsername - 5: carol
neste exemplo, estamos mudando o parâmetro de posição em cada iteração por um até chegar o final da entrada. Portanto, $1 refere-se ao próximo elemento na entrada de cada vez.,
Conclusão
neste artigo, observamos como os argumentos passados para um bash script durante o tempo de execução pode ser processado dentro do script de maneiras diferentes:
- parâmetros Posicionais podem ser usados quando a entrada é de tamanho fixo e a ordem dos argumentos em que a entrada é conhecido.
- com bandeiras, a ordem dos argumentos na entrada não importa.
- a construção do Ciclo vem a calhar quando o tamanho da entrada é Desconhecido.o operador de deslocamento faz com que a indexação comece a partir do argumento na posição deslocada.,
- a variável devolve a lista de Parâmetros de entrada, e $# devolve o tamanho da lista de entrada.
Como sempre, os exemplos usados neste artigo estão disponíveis no GitHub.