Las expresiones condicionales en Shell Script son algo muy especifico en este lenguaje, podemos usar el comando test para ello:
test expresion [ expresion ]
Este comando evalúa expresión, y si evalúa a cierto, devuelve cero (true), o en otro caso 1 (false). Si no hay expresión, test siempre devuelve falso. Este comportamiento puede ser algo confuso, ya en lógica los valores cierto y falso suelen ser al contrario.
test soporta gran cantidad de operadores, algunos son:
-d fichero => cierto si fichero existe y es un directorio
-e fichero => cierto si fichero existe, independientemente del tipo que sea
-f fichero => cierto si fichero existe y es un fichero normal
-r fichero => cierto si fichero existe y se puede leer
-s fichero => cierto si fichero existe y tiene tamaño mayor que cero
-w fichero => cierto si fichero existe y es se puede escribir sobre él
-x fichero => cierto si fichero existe y es ejecutable
n1 -eq n2 => cierto si los enteros n1 y n2 son iguales
n1 -ne n2 => cierto si los enteros n1 y n2 no son iguales
n1 -gt n2 => cierto si el enteros n1 es mayor que n2
n1 -ge n2 => cierto si los enteros n1 y n2 son iguales o n1 es mayor que n2
n1 -lt n2 => cierto si el enteros n1 es menor que n2
n1 -le n2 => cierto si los enteros n1 y n2 son iguales o n1 es menor que n2
s1 = s2 => cierto si las cadenas de texto s1 y s2 son idénticas
s1 != s2 => cierto si las cadenas de texto s1 y s2 no son idénticas
s1 < s2 => cierto si la cadena de texto s1 es menor que s2
s1 > s2 => cierto si la cadena de texto s1 es mayor que s2
-n cadena => cierto si la longitud de la cadena de texto es distinta de cero
! expresion => cierto si expresion es falsa (negación)
expresion1 -a expresion2 => cierto si expresion1 y expresion2 son ciertas
expresion1 -o expresion2 => cierto si expresion1 o expresion2 son ciertas
IF
if CONDICION; then bloque de comandos fi
if CONDICION; then
bloque de comandos b1
else
bloque de comandos b2
fi
Ejercicios
#!/bin/bash
# Programa que reciba un parámetro y diga de que tipo es
if test -e $1; then
echo "Has metido una fichero";
else
echo "No es una fichero";
fi
if test -d $1; then
echo "Has metido un directorio";
else
echo "No es un directorio"
fi
if test -n $1; then
echo "El parametro existe";
else
echo "El parametro no existe";
fi
#!/bin/bash
# Programa que pida una ruta de un fichero para borrarlo y que pida confirmación
echo ¿Esta seguro que quiere borrar el fichero?;
read res;
if test $res = "si"; then
if test -f $1; then
echo $(rm -r $1);
echo "Fichero $1 borrado";
else
echo $1 "NO es un fichero";
fi
else
echo "El archivo no a sido borrado";
fi
#! /bin/bash
# Ejercicio 3: Dado el numero indicar si es o no divisible entre 101. Si no se mete un número
# debe mostrar como usar el programa
read n1;
if test -n "$n1"; then
if test $(($n1%101)) -eq 0; then
echo divisible;
else
echo no divisible;
fi
else
echo Introduce un numero;
fi
Con esto ya debemos saber utilizar las condiciones en Shell Script 🙂













