0% encontró este documento útil (0 votos)
26 vistas21 páginas

Tema 7

Este documento explica los conceptos básicos de programación en shell script de Linux, incluyendo la ejecución de scripts, variables, estructuras de control condicionales e iterativas y el uso de argumentos.

Cargado por

cristianmateo16
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
26 vistas21 páginas

Tema 7

Este documento explica los conceptos básicos de programación en shell script de Linux, incluyendo la ejecución de scripts, variables, estructuras de control condicionales e iterativas y el uso de argumentos.

Cargado por

cristianmateo16
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 21

CFGS Administración de sistemas informáticos en red

Administración de sistemas operativos

UT7. LINUX. Manual de shell script


Índice

1. Introducción 3

2. Ejecución de un script 4

3. Programando en shell script 5


3.1 Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2 El comando echo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.3 El comando exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.4 Variables en los programas . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.5 Entrecomillado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.6 El comando read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.7 Operaciones aritméticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

4. Ejecución condicional 12
4.1 El comando if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4.2 El comando case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

5. Ejecución iterativa 18
5.1 El bucle for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5.2 El bucle while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.3 El bucle until . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.4 La estructura select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1. Introducción
El lenguaje shell es un lenguaje de programación de alto nivel que permite ejecutar
secuencias de órdenes, seleccionar operaciones alternativas dependiendo del resultado y
repetir acciones del programa.
Existen diversas versiones de shell, no obstante, en este manual se tratarán las direc-
trices básicas para construir programas sobre la shell de tipo bash, la cual, por otra parte
es la versión más extendida.
Un script es un fichero de texto normal que contiene una serie de comandos, expre-
siones y estructuras de control que se ejecutan secuencialmente. Como cualquier otro
programa, el usuario deberá tener permiso de ejecución en el script.
Por lo tanto, para crear un script basta con crear un fichero con cualquier editor de
textos, por ejemplo nano o gedit y, a continuación, escribir los comandos que queremos
ejecutar.
Supongamos que vamos a escribir un script que muestra la fecha y un listado de los
ficheros del directorio en el que nos encontramos. Podría ser algo como lo siguiente:

1 #!/bin/bash
2

3 # Script: listado.sh
4 # Descripción: muestra la hora del sistema y lista
5 # los archivos del directorio actual.
6

7 echo " Fecha y hora : "


8 date
9 echo " Listado de archivos : "
10 ls

3
2. Ejecución de un script
La forma más común de ejecutar un script en la shell actual es usando ./, por ejemplo:

./ prueba . sh

Un script siempre comienza por la marca #! en la primera fila del fichero para indicar
la ruta absoluta del intérprete de comandos que ejecutará el programa. En nuestro caso,
vamos a utilizar el intérprete bash, así que todos los scripts deben tener la siguiente línea
inicial:

#!/bin/bash

Como cualquier otro programa, un script puede requerir un cierto mantenimiento,


que incluya modificaciones, como actualizaciones o mejoras del código. Por lo tanto, el
programador debe ser precavido y desarrollarlo teniendo en cuenta las recomendaciones
típicas para cualquier programa:

El código debe ser fácilmente legible, incluyendo espacios y sangrías que separen
claramente los bloques de código.

Deben añadirse comentarios claros y concisos sobre el funcionamiento general del


programa principal y de las funciones, que contengan la siguiente información: autor,
descripción, modo de uso de programa, versión y fechas de las modificaciones.

Incluir comentarios para los bloques o comandos importantes, que requieran una
cierta aclaración.

Los nombres de las variables, funciones y programas deben ser descriptivos. No


deben confundirse con otros comandos, variables o programas.

Para los nombres de los programas, suelen utilizarse letras minúsculas, mientras
que para las variables, se suelen utilizar mayúsculas.

4
3. Programando en shell script
En este apartado trataremos las diversas características y recursos que nos ofrece el
lenguaje shell.

3.1 Comentarios
Se pueden insertar comentarios en los programas shell, utilizando el carácter #. Se
ignora todo lo que existe desde # hasta el final de la línea. Los scripts suelen encabezarse
con comentarios que indican lo que hace el script. También, se suelen colocar comentarios
de documentación en diversas partes del script para mejorar la comprensión y facilitar el
mantenimiento.
Ejemplos:

1 rmdir prueba1 # borra el directorio prueba1


2 ls -l # muestra el contenido del directorio actual
3 # línea en blanco

3.2 El comando echo


Cada vez que queramos mostrar información por pantalla tendremos que utilizar el
comando echo. Este comando simplemente escribe por pantalla los argumentos que recibe.
El comando echo siempre incluye un salto de línea al final de la información, si queremos
que esto se omita debemos usar la opción -n.
Si vamos a mostrar una línea con espacios en blanco utilizaremos las comillas dobles.
Por ejemplo:

echo -n " Nombre usuario : usuario1 "

3.3 El comando exit


El comando exit puede ejecutarse en cualquier sitio para dar por terminada su eje-
cución. Suele usarse para detectar situaciones erróneas que hacen que el programa deba
detenerse. Se le puede pasar como argumento un número para indicar el código de termi-
nación, el cual suele ser 0 para indicar que se ha ejecutado correctamente o un número
entre 1 y 255 para indicar alguna situación de error que puede ser manejada.
Su formato es : exit código

5
3. PROGRAMANDO EN SHELL SCRIPT 6

Ejemplo:

exit 1

3.4 Variables en los programas


En shell script, como en cualquier lenguaje de programación, se permite el uso de
variables. Una variable es un dato con un nombre que puede cambiar de valor durante la
ejecución del script. Existen los siguientes tipos de variables:

1. Variables locales

Las variables locales son definidas dentro del script por el programador y
permiten almacenar y operar con valores. Fuera de dicho ámbito, la variable
no existe y por tanto, no puede usarse.
Toman valor por medio del operador de asignación =. Por ejemplo:

1 NOMBRE = " Lara Mateo "


2 VAR1 = " Esto es una prueba "
3 VAR2 =35

Para consultar su valor debemos anteponer el carácter $. Por ejemplo:

1 echo " El nombre es $NOMBRE "


2 # Muestra: El nombre es Lara Mateo
3 echo $VAR1 # Muestra: Esto es una prueba
4 echo $VAR2 # Muestra: 35
5 echo " VAR2 = $VAR2 " # Muestra: VAR2=35

El formato ${VARIABLE} se utiliza en cadenas de caracteres donde se puede


prestar a confusión o en procesos de sustitución de valores.

1 ERR =2 # Asigna 2 a la variable ERR


2 echo ERR # Muestra ERR
3 echo $ERR # Muestra 2
4 echo " Error : $ERR : salir " # Muestra Error: salir
5 echo " Error : $ { ERR }: salir " # Muestra Error: 2: salir

2. Variables de entorno

Las variables de entorno sirven para personalizar el entorno en el que se ejecuta


el script. Son comunes para todos los scripts. Las principales variables de
entorno son:
3. PROGRAMANDO EN SHELL SCRIPT 7

• PWD indica el directorio de trabajo actual.


• HOME hace referencia a la ruta del directorio personal del usuario.
• PATH contiene las rutas de búsqueda de los comandos.
• USER almacena el nombre del usuario actual.
• HOSTNAME contiene el nombre del equipo.

3. Argumentos en los programas

En ocasiones puede ser útil que los scripts reciban algún tipo de argumento
(un directorio sobre el que actuar, un tipo de archivo que buscar,...) al ser
ejecutados.
Para pasar argumentos a un script, simplemente basta con escribir dichos
argumentos en la línea de comandos, detrás del nombre del script al ejecutarlo.
En el ejemplo, el script se llama mostrar.sh y se le pasan como argumentos
1, 2, 4 y 33.

./ mostrar . sh 1 2 4 33

Para hacer referencia a estos argumentos, dentro de los scripts se emplean


una serie de variables que siempre estarán disponibles: $1, $2, $3,... Estas
variables, que se conocen como parámetros posicionales y hacen referencia al
primer argumento, segundo argumento, tercer argumento,... del script. A partir
del décimo tenemos que usar la notación ${NUMERO}.

1 #!/bin/bash
2

3 # Script: mostrar
4 # Descripción: recibe argumentos y los muestra
5

6 echo " El script $0 "


7 echo " Recibe los argumentos $1 $2 $3 $4 "

En el ejemplo anterior, $1 tendría como valor 1, $2 tendría como valor 2, $3


tendría como valor 4 y $4 tendría como valor 33.

4. Variables especiales

Las variables especiales son variables que informan sobre el estado del proceso.
El intérprete las trata y modifica directamente, por lo tanto, son de sólo lectura.
Estas variables son las siguientes:
• $# indica el número de argumentos que se pasan al programa. En el ejemplo
anterior almacenaría el valor 4.
• $0 es nombre del script que estamos ejecutando.
3. PROGRAMANDO EN SHELL SCRIPT 8

• $* hace referencia a todos los argumentos de la línea de órdenes. En el


ejemplo anterior, tendría el valor 1 2 4 33.
• $? contiene el resultado de la última orden ejecutada.
• $! contiene el PID del última orden ejecutada.
• $$ contiene el PID del proceso generado al ejecutar el script.
El siguiente ejemplo es un script que muestra la información de un usuario
que se pasa como argumento:

1 #!/bin/bash
2

3 # Script: info-usuario
4 # Descripción: Muestra la información de un usuario
5

6 # Comprobamos si se ha pasado un pasado el argumento


7 if [ $ # -ne 1]; then
8 echo " Error . Falta indicar el usuario "
9 echo " Sintaxis : $0 usuario "
10 exit
11 fi
12

13 # Ahora mostramos la información del usuario con el comando id


14 id $1
15

16 # Comprobamos si ha habido algun error


17 if [ $ ? - ne 0 ]; then
18 echo " Error al mostrar los datos de $1 "
19 fi

3.5 Entrecomillado
El lenguaje shell script, permite el uso de tres tipos de entrecomillado para llevar
a cabo el tratamiento de cadenas y expresiones. Los tipos de entrecomillado son los
siguientes:

Comilla invertida. Se sustituye el valor de las variables internas y ejecuta el


contenido. Es equivalente a escribir $(comando). Por ejemplo:

1 RES = ` ls -l ` # Guarda en la variable RES el resultado de ls -l


2 DIR =/ etc
3 RES1 = ` ls -l $DIR ` # Guarda el resultado del comando ls -l /etc
4 # en la variable RES1
3. PROGRAMANDO EN SHELL SCRIPT 9

Sin comillas o con comillas dobles. Se interpretan las variables de entorno y se


muestra el resultado. Por ejemplo:

1 DIR =/ etc
2 RES = " ls -l $DIR "
3 # Guarda la cadena ls -l /etc en la variable RES

Comillas simples. Se toma como un texto fijo. No se interpretarían las variables


de entorno. Por ejemplo:

1 A =1
2 RES = ' $A ' # Guarda la cadena $A en la variable RES .

3.6 El comando read


Es posible programar scripts interactivos solicitando información al usuario. Para ello,
se emplea el comando read, que nos permite leer datos introducidos por el usuario por
pantalla y los asigna a las variables indicadas. Puede mostrarse un mensaje antes de
solicitar los datos. Su formato es sencillo:
read variable1, variable2,...
Veamos un ejemplo:

1 #!/bin/bash
2

3 # Script: uso-read
4 # Descripción: Solicita el nombre al usuario y lo muestra
5

6 # Las siguientes instrucciones son equivalentes:


7 # muestran un mensaje y piden un valor
8

9 echo -n " Dime tu nombre : "


10 read NOMBRE
11 #
12 read -p " Dime tu nombre : " NOMBRE
13

14 # Se muestra el valor introducido


15 echo " El nombre introducido es $NOMBRE "
3. PROGRAMANDO EN SHELL SCRIPT 10

3.7 Operaciones aritméticas


Shell script nos permite realizar operaciones aritméticas mediante el uso de comandos
como expr, let o bc. También, es posible realizar operaciones utilizando la expresión de
dobles paréntesis ((operación)).

1. Comando expr
La orden expr toma los argumentos dados, los evalúa e imprime el resultado sobre
la salida estándar. Cada término de la expresión debe ir separado por espacios en
blanco.
La orden expr puede utilizar los siguientes operadores: +, -, *, /, % (módulo). No
obstante, al ser el carácter * el símbolo comodín del shell, para indicar que se quiere
multiplicar deberá ir precedido por el carácter \.
Hay que indicar también que expr sólo opera sobre enteros y no sobre números
decimales. Por ejemplo:

1 M = ` expr $1 + 1 ` # Suma 1 al primer parametro


2 N = ` expr $1 \* 5 ` # Multiplica el primer parametro por 5

2. Comando let
Mediante la orden let podemos almacenar el valor directamente en una variable.
Por ejemplo, supongamos que queremos dividir entre 2 el valor de una variable y
almacenar el resultado en otra variable.

1 J =4
2 let K = J /2 # Divide el valor de la variable j entre 2
3 echo $K # Muestra el valor de la variable K

3. Comando bc
Si queremos operar sobre números decimales, podemos utilizar la orden bc. Por
ejemplo, supongamos que queremos dividir entre 3 el valor de una variable y mostrar
el resultado por pantalla.

1 #!/bin/bash
2 X =10
3 echo " scale =10; $X /3 " | bc
4 # El resultado sería: 3.3333333333

4. Expresión ((operación))
Los dobles paréntesis se comportan como let, aunque, tienen la ventaja de que un
doble paréntesis puede incluir a otro doble paréntesis.
3. PROGRAMANDO EN SHELL SCRIPT 11

1 #!/bin/bash
2 Z =10
3 (( Z = Z *3) )
4 echo $Z # El resultado sería: 30

Además, para devolver el resultado de una operación simplemente se debe preceder


el doble paréntesis con $, es decir, se puede simplificar el ejemplo anterior de la
siguiente forma:

1 #!/bin/bash
2 Z =10
3 echo $ (( Z = Z *3) ) # El resultado sería: 30

Como se he comantado anteriormente, permite incluir una operación matemática


dentro de otra. Por ejemplo:

1 #!/bin/bash
2 Z =10
3 echo $ (( Z = $ (( Z +3) ) *3) ) # El resultado sería: 39
4. Ejecución condicional
Como en muchos otros lenguajes, en shell script, se permite la ejecución condicional
de partes del programa. Para construir esta ejecución condicional, se usan los comandos
if y case.

4.1 El comando if
Su formato es el siguiente:

if condicion
then ordenes
[ elif condicion
then ordenes ]
[ else ordenes ]
fi

El funcionamiento de este comando es el siguiente. Si el valor de condición es igual


a cero, se ejecutan las órdenes de la parte de then. En caso contrario se ejecutan las
órdenes de la parte de elif o else, en caso que existan.
La condición puede expresarse de diferentes formas:

1. Mediante la introducción de un comando común.


Este comando se ejecutará y se tomará como condición, el de su valor devuelto. Si
el comando funciona correctamente, su valor devuelto será cero, y en caso contrario
su valor devuelto será distinto de cero. Puede verse un ejemplo en el ejemplo 2 de
este apartado.

2. Mediante el uso de la orden test o su equivalente [ ].


Su formato sería uno de los siguientes:

• test condición
Ejemplo: test $1 = 3
• [ condición ]
Ejemplo: [ $1 = 3 ]

Para ambos casos se evalúa una condición; si la condición es cierta, devuelve cero
y si no es cierta, devuelve un estado distinto de cero.
Además, se pueden utilizar dobles corchetes [[ ]] en lugar de los simples para
realizar comparaciones. Los dobles corchetes son una mejora con respecto a los

12
4. EJECUCIÓN CONDICIONAL 13

otros. Permiten, por ejemplo, el uso de expresiones regulares, caracteres comodín,


etc.
Es posible que encontrar alguna incompatibilidad con los dobles corchetes [[ ]] si
se utilizan en distintos equipos. Se recomienda utilizar corchetes simples [ ] si el
script va a ser portable. El ejemplo anterior quedaría así:

• [[ condición ]]
Ejemplo: [[ $1 = 3 ]]

Por medio de la orden if, podemos realizar diferentes comprobaciones, en función de


lo que se indique en el campo comparación. Seguidamente se especifican las más comunes:
Comprobación de enteros:

n1 -eq n2 Verdadero si los enteros n1 y n2 son iguales


n1 -ne n2 Verdadero si los enteros n1 y n2 no son iguales
n1 -gt n2 Verdadero si el entero n1 es mayor que el n2
n1 -ge n2 Verdadero si el entero n1 es mayor o igual que el n2
n1 -lt n2 Verdadero si el entero n1 es menor que el n2
n1 -le n2 Verdadero si el entero n1 es menor o igual que el n2

Comprobación de cadenas:

-z cadena Verdadero si la longitud de la cadena es cero


cadena1 = cadena2 Verdadero si las dos cadenas son iguales
cadena1 != cadena2 Verdadero si las dos cadenas no son iguales
cadena Verdadero si la cadena no es nula

Comprobación de ficheros:

-e archivo Verdadero si existe el archivo


-r archivo Verdadero si existe el archivo y puede leerse
-w archivo Verdadero si existe el archivo y puede escribirse
-x archivo Verdadero si existe el archivo y es ejecutable
-f archivo Verdadero si es un archivo normal
-d archivo Verdadero si es un directorio
-h archivo Verdadero si es un enlace simbólico
-c archivo Verdadero si existe el archivo y es un archivo especial de caracteres
-b archivo Verdadero si existe el archivo y es un archivo especial de bloque
-s archivo Verdadero si existe el archivo y su tamaño es mayor de cero
4. EJECUCIÓN CONDICIONAL 14

Recuerda que entre las condiciones y los operandos siempre tiene que haber un espacio
en blanco.
Concatenanción de comparaciones:
En ocasiones se necesitará que se cumplan varias condiciones o una combinación de
ellas para poder tomar una u otra acción. Para conseguir esta concatenación de opera-
ciones, se deben utilizar operadores booleanos:

y, representado por &&. Esto implica que las dos comparaciones tienen que ser
ciertas.

o, representado por ||. Con que una de las dos comparaciones sea cierta, es sufi-
ciente.

negación, representado por !. Devolverá el valor contrario de la condición.

Estos operadores booleanos se utilizarían del siguiente modo:

[ condicion1 ] && [ condicion2 ]


[ condicion1 ] || [ condicion2 ]
[ ! condicion ]

Por ejemplo, para comprobar que un fichero es de lectura y escritura, se utilizaría el


operador &&. Ahora bien, si es suficiente que sea de lectura o escritura, se utilizaría el
operador ||. Para comprobar si el fichero no existe se utilizaría la negación !.

[ -r $FILE ] && [ -w $FILE ]


[ -r $FILE ] || [ -w $FILE ]
[ ! -e $FILE ]

Ejemplos:
A continuación, se muestran algunos ejemplos de uso de la orden if:
Ejemplo 1:

1 if [ -z $HOSTNAME ]
2 then
3 echo " No esta definido el nombre del equipo "
4 fi

Ejemplo 2:

1 if ` mkdir PRUEBA `
2 then echo " El directorio se creo correctamente "
4. EJECUCIÓN CONDICIONAL 15

3 else echo " El directorio no pudo crearse "


4 exit 1
5 fi

Ejemplo 3:

1 if [ $ # - lt 3 ]
2 then echo " El numero de parametros es menor de tres "
3 exit 1
4 else echo " El numero de parametros es correcto "
5 fi

Ejemplo 4:

1 if [ $1 - gt 1 ] && [ $1 - lt 5 ]
2 then
3 echo " El parametro $1 es mayor que 1 y menor que 5 "
4 fi

Ejemplo 5:

1 if [ $FILE = " / etc / hosts " ]


2 then
3 HOSTS =1
4 fi
4. EJECUCIÓN CONDICIONAL 16

4.2 El comando case


La estructura selectiva case evalúa la condición de control y, dependiendo del resul-
tado, ejecuta un bloque de código determinado. Su formato es el siguiente:

1 case cadena
2 in
3 lista_patrones1 )
4 orden 1
5 orden 2
6 orden n
7 ;;
8 [ lista_patrones2 )
9 orden 1
10 orden 2
11 orden n
12 ;;]
13 esac

Las posibles opciones soportadas por la estructura selectiva múltiple se expresan me-
diante patrones, donde pueden aparecer caracteres comodines, evaluándose como una
expansión de ficheros, por lo tanto el patrón para representar la opción por defecto es el
asterisco *. Cada bloque de código acaba con ;;.
Dentro de una misma opción pueden aparecer varios patrones separados por la barra
vertical |, como una expresión lógica O.
Si la expresión que se comprueba cumple varios patrones de la lista, sólo se ejecuta el
bloque de código correspondiente al primero de ellos, ya que la evaluación de la estructura
se realiza en secuencia.
Un ejemplo habitual de esta estructura lo encontramos en los scripts de inicio de
servicio que hay en /etc/init.d. Estos scripts reciben un parámetro para iniciar, parar,
reiniciar o mostrar el estado del servicio. Para controlar el valor del parámetro, y las
acciones a realizar en cada caso, es habitual utilizar una estructura case.
Ejemplo:

1 case $1 in
2 start )
3 echo " Se ha requerido el inicio del servicio "
4 ;;
5 stop )
6 echo " Se ha requerido la parada del servicio "
7 ;;
8 restart )
9 echo " Se ha requerido reiniciar el servicio "
4. EJECUCIÓN CONDICIONAL 17

10 ;;
11 status )
12 echo " Se ha requerido mostrar el estado del servicio "
13 ;;
14 *) #
15 # Esto identifica cualquier valor ,
16 # por lo que sirve como valor por defecto .
17 #
18 # Se puede utilizar para detectar errores .
19 ;;
20 esac
5. Ejecución iterativa
Un bucle es la ejecución repetida de un bloque de código. El número de veces que se
ejecuta el bloque de código dependerá del tipo de bucle, pero todos se basan en el uso de
una expresión lógica (una condición) para limitar este número de ejecuciones, es decir, el
bloque de código continúa ejecutándose de forma repetitiva cuando la condición del bucle
se cumple. La forma de especificar esta condición en el bucle determina el tipo.
Hay dos ordenes que pueden ser interesantes y que pueden utilizarse dentro de un bucle
para romper la secuencia normal de ejecución de comandos en determinadas situaciones.
Estas son las órdenes break y continue.

break. Ruptura inmediata de un bucle, porque se interrumpe la ejecución de un


bloque de código y se pasa a la siguiente línea que está después del bucle.

continue. Se interrumpe la ejecución del bloque de código del bucle para volver a
evaluar la condición.

Shell script permite la utilización de distintos tipos de bucles, que se explican a con-
tinuación:

5.1 El bucle for


El bucle for ejecuta el bloque de código un número de veces determinado de antemano.
El bloque de código se ejecuta para cada valor de una lista de valores que puede ser un
conjunto de ficheros cuyo nombre se ajusta a un patrón, un conjunto de cadenas de texto
en una lista, etc.
Su formato es el siguiente:

for variable in lista_valores


do
ordenes
done

El funcionamiento de este comando es el siguiente. El bucle se va a ejecutar tantas


veces como valores existan en lista_valores. En cada iteración, variable tomará un
valor distinto de lista_valores.
Ejemplo 1:

1 for NUMERO in 1 2 3 4 5
2 do

18
5. EJECUCIÓN ITERATIVA 19

3 # ordenes del bucle


4 echo $NUMERO
5 done

Ejemplo 2:

1 for K in ` ls / etc `
2 do
3 TAMANYO = ` du - sh / etc / $K `
4 echo " $K "
5 echo " Tamanyo : $TAMANYO "
6 done

5.2 El bucle while


El bucle while tiene un expresión lógica que determina si se ejecuta o no el bloque de
código asociado. En cada iteración del bucle, se evalúa la expresión lógica y dependiendo
del resultado se vuelve a realizar otra iteración o se sale del bucle.
Su formato es el siguiente:

while orden_comparacion
do
ordenes
done

El bucle while se ejecutará el bloque de órdenes mientras que la condición sea cierta.
Veamos un ejemplo:

1 # !/ bin / bash
2

3 CONTADOR =0
4

5 while [ $CONTADOR - lt 10 ]; do
6 echo " El contador es $CONTADOR "
7 let CONTADOR = CONTADOR +1
8 done

5.3 El bucle until


El bucle until es parecido al bucle while, pero en el caso de until se ejecuta el
bloque de código hasta que la condición sea cierta.
5. EJECUCIÓN ITERATIVA 20

Su formato es el siguiente:

until orden_comparacion
do
ordenes
done

Veamos un ejemplo:

1 # !/ bin / bash
2

3 CONTADOR =20
4

5 until [ $CONTADOR - lt 10 ]; do
6 echo " El contador es $CONTADOR "
7 let CONTADOR = CONTADOR -1
8 done

5.4 La estructura select


La estructura select se utiliza para mostrar un menú de selección de opciones y
ejecutar el bloque de código correspondiente a la selección escogida. En caso de omitir
la lista de palabras, el sistema presenta los argumentos del programa. Su formato es el
siguiente:

select VARIABLE [ in lista ]


do
Bloque1
...
done

La selección es interactiva, se presenta un menú de selección y se ejecuta el bloque


de código correspondiente a la opción elegida. El bucle se termina cuando se ejecuta la
orden break.
La sentencia genera un menú con los elementos de la lista, donde asigna un número a
cada elemento y pide al usuario que introduzca un número. El valor elegido se almacena
en VARIABLE. Una vez elegida la opción por parte del usuario, se ejecuta el cuerpo de la
sentencia y el proceso de repite en un bucle infinito.
Aunque el bucle de select es infinito (lo cual nos permite volver a pedir una opción
cuantas veces haga falta), el bucle se puede abandonar con la sentencia break.
Veamos un ejemplo simple en el que se muestra un menú al usuario para elegir la
5. EJECUCIÓN ITERATIVA 21

ejecución de un listado del directorio personal, que muestre la fecha o la información del
usuario.

#!/bin/bash

# Script: select
# Descripción: Muestra menu de seleccion al usuario

clear

# Cambiamos el prompt que se muestra al usuario


PS3 = " Seleccione una opcion : "

select OPCION in Directorio Fecha Usuario Terminar ; do


case $OPCION in
Directorio ) ls ;;
Fecha ) date ;;
Usuario ) id ;;
Terminar ) break ;;
*) echo " Error . Tiene que elegir entre 1 y 4 "
;;
esac
done

Al ejecutar este script vemos que se muestra un menú con las cuatro opciones. El
usuario tiene que pulsar un número entre 1 y 4. Sin embargo, en la estructura case que
controla la opción elegida debemos contemplar la cadena que hemos puesto como opción
de menú, no el número de opción. Podemos incluir opciones con espacios en blanco si la
entrecomillamos. El bucle es infinito y solamente al elegir la opción 4 es cuando sale por
efecto del comando break.

También podría gustarte