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 🙂