Articles

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....