Articles

The Geek Diary

Hay muchas veces en un script de shell en las que desea ejecutar repetidamente una instrucción o un grupo de instrucciones hasta que se produzca alguna condición especificada. Además, es posible que desee ejecutar un grupo de instrucciones para cada elemento de una lista determinada. El shell proporciona tres construcciones en bucle para estas situaciones: las construcciones for, while y until.

El bucle le permite especificar una lista de valores. Se ejecuta un grupo de instrucciones para cada valor de la lista.

Sintaxis de bucle For

El bucle for en el shell toma una lista de palabras (cadenas) como argumento. El número de palabras de la lista determina el número de veces que se ejecutan las instrucciones en el bucle for. La sintaxis del bucle for es la siguiente:

for variable in element1 element2 element3 do commands done

donde:

  • variable: es cualquier nombre de variable.elementos
  • (argument_list): Puede ser cualquier lista de palabras, cadenas o números, y puede ser literal o generada usando un comando de shell o un metacaracteres de línea de comandos de shell.
  • comandos: Los comandos pueden ser cualquier comando del sistema operativo, un programa de usuario, un script de shell o una instrucción de shell que devuelve (produce) una lista.

El valor de la variable var se establece en la primera palabra de la lista la primera vez a través del bucle. La segunda vez a través del bucle, su valor se establece en la segunda palabra de la lista, y así sucesivamente. El bucle termina cuando var ha tomado a su vez cada uno de los valores de la lista de argumentos y no quedan argumentos.

La lista de argumentos del bucle for

La lista de argumentos en un bucle for puede ser cualquier lista de palabras, cadenas o números. Genere la lista de argumentos utilizando cualquiera de los siguientes métodos (o combinación de métodos):

  • Use una lista explícita
  • Use el contenido de una variable
  • Use argumentos de línea de comandos
  • Use sustitución de comandos
  • Use nombres de archivo en sustitución de comandos

Ejemplo 1 : Bucle For usando una Lista explícita para Especificar argumentos

Cuando los argumentos se enumeran para un bucle for, se denominan lista explícita. Una lista explícita es la forma más simple de una lista de argumentos. El bucle se ejecuta una vez para cada elemento de la lista. El siguiente ejemplo es un bucle for el uso de una lista explícita de elementos:

#!/bin/bashfor fruit in apple orange banana peach kiwi do echo "Value of fruit is: $fruit"done

El resultado de este bucle for es:

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

Ejemplo 2 : Bucle For con Variable Contenido para Especificar Argumentos

Cuando los argumentos son en una variable y se ejecuta la instrucción, el contenido variable son sustituidos. En el siguiente ejemplo, el texto introducido en el símbolo del sistema se convierte en el valor de la variable de entrada. Esta variable representa la lista de argumentos de la construcción for. Por lo tanto, el texto de ENTRADA se divide en palabras o símbolos en función del espacio en blanco.

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

Ejemplo 3 : bucle uso de Argumentos de Línea de Comandos para Especificar Argumentos

En el siguiente ejemplo, el texto introducido en la línea de comandos se convierte en la lista de argumentos del por construir. Por lo tanto, el texto de la línea de comandos se divide en palabras o símbolos en función del espacio en blanco.

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

Ejemplo 4 : Para bucle Que Usa Sustitución de comandos para Especificar argumentos

La sintaxis para la sustitución de comandos en un shell de Bash es:

for var in `cmd_sub`

El siguiente ejemplo utiliza la salida del comando cat como 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

Si el archivo que contiene la lista en el siguiente formato, ¿cuál es el resultado de un bucle 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

En el ejemplo anterior, los resultados no cambian. La variable IFS es cualquier espacio en blanco, por lo que tanto un retorno de carro como un espacio o tabulador separan cada campo del archivo.

Ejemplo 5: Para bucle usando Nombres de archivo en Sustitución de Comandos para Especificar Argumentos

Algunos comandos proporcionan nombres de archivo y nombres de directorio como salida. En el siguiente ejemplo, el shell sustituye la salida del comando, ls/etc / p*(/etc/passwd/etc/profile y así sucesivamente), como la lista de argumentos para el bucle 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....