O Geek Diário
Há muitas vezes em um script de shell quando você deseja executar repetidamente uma instrução ou grupo de instruções até que a condição especificada. Além disso, você pode querer executar um grupo de declarações para cada elemento de uma determinada lista. A shell fornece três construções de looping para estas situações: o for, while, and until constructs.
O laço for permite-lhe indicar uma lista de valores. Um grupo de declarações é executado para cada valor na lista.
para a sintaxe do laço
o laço for na linha de comandos leva uma lista de palavras (strings) como um argumento. O número de palavras na lista determina o número de vezes que as declarações no laço for são executadas. A sintaxe para o laço for é:
for variable in element1 element2 element3 do commands done
onde:
- variável: é qualquer nome de variável.
- elementos (argument_ list): pode ser qualquer lista de palavras, cadeias de caracteres ou números, e pode ser literal ou gerado usando um comando shell ou Meta-linha de comandos shell.comandos
- : Os comandos podem ser quaisquer comandos do sistema operacional, UM programa de usuário, um script de shell, ou uma declaração de shell que retorna (produz) uma lista.
o valor da variável var é definido para a primeira palavra na lista da primeira vez através do loop. A segunda vez através do loop, seu valor é definido para a segunda palavra na lista, e assim por diante. O loop termina quando var assumiu cada um dos valores da lista de argumentos, por sua vez, e não há argumentos restantes.
a lista de argumentos para o Loop
a lista de argumentos em A para o loop pode ser qualquer lista de palavras, strings, ou números. Gerar a lista de argumentos usando qualquer um dos seguintes métodos (ou combinação de métodos):
- Use uma lista explícita
- Usar o conteúdo de uma variável
- Usar argumentos de linha de comando
- Usar a substituição de comando
- Use nomes de arquivo em substituição de comandos
Exemplo 1 : Para loop usando uma Lista Explícita para Especificar Argumentos
Quando os argumentos são listados para um loop for, eles são chamados de uma lista explícita. Uma lista explícita é a forma mais simples de uma lista de argumentos. O loop é executado uma vez para cada elemento da lista. A seguir está um exemplo de um loop for é usando uma lista explícita de elementos:
#!/bin/bashfor fruit in apple orange banana peach kiwi do echo "Value of fruit is: $fruit"done
A saída desse loop for é:
Value of fruit is: apple Value of fruit is: orange Value of fruit is: banana Value of fruit is: peach Value of fruit is: kiwi
Exemplo 2 : Para loop usando o Conteúdo de Variáveis para Especificar Argumentos
Quando os argumentos em uma variável e a instrução é executada, o conteúdo da variável são substituídos. No exemplo seguinte, o texto introduzido na linha de comandos torna-se o valor da variável de entrada. Esta variável representa a lista de argumentos do for construct. Portanto, o texto Em entrada é dividido em palavras ou tokens com base no espaço branco.
$ cat ex1.sh #!/bin/bash# Script name: ex1.shecho "Enter some text: \c" read INPUTfor var in $INPUT do echo "var contains: $var"done
$ ./ex1.shEnter some text: I like the Bash shell. var contains: Ivar contains: likevar contains: thevar contains: Kornvar contains: shell.
Exemplo 3 : Para o loop usando Argumentos de Linha de Comando para Especificar Argumentos
No exemplo a seguir, o texto digitado na linha de comando torna-se a lista de argumentos da para construir. Portanto, o texto da linha de comando é dividido em palavras ou tokens com base no espaço branco.
$ cat ex2.sh#!/bin/bash# Script name: ex2.shfor var in $* do echo "command line contains: $var"done
$ ./ex2.sh I am The Geek.command line contains: Icommand line contains: amcommand line contains: Thecommand line contains: Geek.
Exemplo 4 : Para loop Usando a Substituição de Comando para Especificar Argumentos
A sintaxe para a substituição de comando em um shell Bash é:
for var in `cmd_sub`
O exemplo a seguir usa a saída do comando cat, como a lista de argumentos.
$ cat fruit1 apple orange banana peachkiwi
$ cat ex4.sh #!/bin/bash# Script name: ex4.shfor var in `cat fruit2` do echo "var contains: $var"done
$ ./ex4.shvar contains: Apple var contains: Orange var contains: Banana var contains: Peach var contains: Kiwi
Se o arquivo que contém a lista foi no seguinte formato, que é o resultado do loop for.
$ cat fruit3Apple Orange Banana Peach Kiwi
$ cat ex5.sh #!/bin/bash# Script name: ex5.shfor var in `cat fruit3` do echo "$var"done
$ ./ex5.shApple Orange Banana Peach Kiwi
No exemplo acima, os resultados não se alteram. A variável IFS é qualquer espaço em branco, de modo que tanto um carriage return e espaço ou tab separe cada campo no arquivo.
exemplo 5: para o loop usando nomes de arquivos em substituição de comandos para especificar argumentos
alguns comandos fornecem nomes de arquivos e nomes de diretórios como seu resultado. No exemplo seguinte, a shell substitui a saída do comando, ls /etc/p*(/etc/passwd/etc/profileand assim por diante), como a lista de argumentos para o laço for.
$ cat ex7.sh #!/bin/bash# Script name: ex7.shfor var in `ls /etc/p*`do print "var contains: $var"done
# ./x.sh var contains: /etc/passwdvar contains: /etc/passwd-var contains: /etc/printcapvar contains: /etc/profile....
Leave a Reply