Estructuras if, else y elif en Shell Scripts

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 5,49 KB

La estructura if podemos ampliarla usando la construcción else (en caso contrario) y elif (en caso contrario si...).

La estructura simple de else es la siguiente:

if [ expresión 1 ]; then
Realizar si expresión 1 es verdadera
else
Realizar si expresión 1 es falsa
fi

IF..ELIF..ELSE

Una estructura con elif (else if) tiene la siguiente forma:

if [ expresión1 ]; then
Realizar si expresión1 es verdadera
elif [ expresión2 ]; then
Realizar si expresión1 es falsa, pero es verdadera expresión2
elif [ expresión3 ]; then
Realizar si exp1 y exp2 son falsas, pero es verdadera expresión3
else
realizar si todas las expresiones anteriores son falsas
fi

TEMA 11

Página 10

I.S.O. Linux. Shell Scripts.IMPLANTACIÓN DE SISTEMAS OPERATIVOS.CURSO 2012/2013

Hay que tener muchísimo cuidado con los espacios en blanco, y seguramente durante nuestros primeros scripts casi todos los errores vendrán por haberlos usado mal en las estructuras if.

Hay que recordar que los corchetes llevan espacios en blanco tanto a izquierda como derecha, que el punto y coma sin embargo va pegado al corchete cerrado, y que SIEMPRE hay que poner espacios en blanco en las expresiones.

Veamos algunos errores muy comunes, para que no los cometáis.

If [3 -eq 5 ]; then bash: [3: command not found.

Hemos usado [3 en lugar de [ 3

if [ “Jose” -eq “Jose” ]; then Bash: [: jose: integer expression expected.

Debíamos haber usado =

if [ 3 = 4 ]; then Esto no nos devolverá error, y parece que funciona, pero en realidad no es así, hay que usar -eq

if [ 3 > 4 ]; then

If [ jose=Antonio ]; then

Esto devuelve verdadero. Sirva como prueba que no hay que usar operadores de cadena para comparar números como dijimos anteriormente.

No hemos dejado espacios en la condición =. Esta expresión da como valor verdadero. Mucho cuidado con este error, que nos puede volver locos en depuración.

Otro error muy común es el siguiente:

#!/bin/bash
PROFESOR=”Juana”
if [ $PROFSOR = “Juana” ]; then
echo “Hola Juana”
fi

Este programa nos devuelve por pantalla el siguiente error:

bash: [= unary operador expected

Que traducido resulta, me he encontrado un [ (corchete abierto) y luego un operador (el =) sin nada en medio, y eso no funciona.

Revisando el programa anterior, vemos como nos hemos equivocado en el nombre de la variable, por lo cual $PROFSOR no tiene ningún valor (es nula) y por lo tanto al no valer nada, el programa lo que ve es lo siguiente: if [ = “Juana” ].

Hemos visto operadores aritméticos y operadores para cadena, pero en las expresiones podemos utilizar cualquier operación que nos devuelva un valor lógico (0 para verdadero). Por ejemplo, podemos usar la función test del bash, que funciona de la siguiente forma:

Operaciones condicionales usando test.

-a fichero
Verdadero si fichero existe

-d fichero
Verdadero si fichero existe, y es un fichero de tipo directorio

TEMA 11

Página 11

I.S.O. Linux. Shell Scripts.IMPLANTACIÓN DE SISTEMAS OPERATIVOS.CURSO 2012/2013

-f fichero

-r fichero

-w fichero

-x fichero

fichero1 -nt fichero2

fichero1 -ot fichero2

Verdadero si fichero existe, y es un fichero regular.

Verdadero si fichero existe y se puede leer

Verdadero si fichero existe y se puede escribir

Verdadero si fichero existe y se puede ejecutar

Verdadero si fichero1 es más nuevo que fichero2

Verdadero si fichero1 es más viejo que fichero2

Si lo necesitamos, podemos anidar expresiones usando tanto and (y, &&) como or (o, ||).

if [ expresión1 ] && [ expresión2 ]; then
se ejecuta si expresión1 Y expresión2 son verdaderas
fi
if [ expresión1 ] || [ expresión2 ]; then
se ejecuta si expresión1 O expresión2 son verdaderas
fi

También podemos usar el operador not (!) para indicar una negación.

if ! [ expresión1 ]; then
se ejecuta si expresión1 NO es verdadera
fi

Para hacer algunos ejercicios, vamos a aprovechar para explicar mejor cómo le podemos pedir datos al usuario. Se hace con la orden read y es muy simple de usar:

read -p “texto de la pregunta” variable

La ejecución del script se parará, mostrará por pantalla el texto de la pregunta, y dejará que el usuario escriba la respuesta, cuando pulse INTRO la respuesta dada se introducirá como valor de variable.

read también puede ser usada sin el parámetro -p, de la forma read variable. También podemos hacer que lea un determinado número de caracteres, sin obligar a que el usuario pulse intro, con el parámetro -n número_de_caracteres. El parámetro -s silencia el eco (no se ve por pantalla lo que el usuario escribe).

Ahora que sabemos usar el read, hagamos por ejemplo un programa que nos permita indicar si un número introducido es par o impar.

#!/bin/bash
# parimpar.sh - script que nos pide un número e indica si es par o impar.
clear
read -p “Introduzca un número : “ NUMERO
let RESTO=NUMERO%2
if [ $RESTO -eq 0 ]; then
echo “El número $NUMERO es par”
else
echo “El número $NUMERO es impar”
fi

Entradas relacionadas: