+suma-resta*multiplicación/división entera%módulo
-eqigual-nedistinto-gtmayor-ltmenor-gemayor o igual-lemenor o igual
=igual!=distinto-zcadena vacía-ncadena no vacía>mayor en orden alfabético (dentro de[[ ]])<menor en orden alfabético (dentro de[[ ]])
&&AND (Y)||OR (O)!NOT (NO)
-eexiste-fes un archivo regular (contiene datos legibles o binarios y no es un directorio)-des un directorio-rtiene permisos de lectura-wtiene permisos de escritura-xes ejecutable-sexiste y no está vacío
Permiten ejecutar comandos sólo si se cumplen ciertas condiciones.
if [ condición ]; then
comando_si_verdadero
fi
if [ condición ]; then
comando_si_verdadero
else
comando_por_defecto
fi
if [ condición ]; then
comando_si_verdadero
elif [ condición ]; then
comando_si_verdadero
fi
Warning
Puedes crear tantos elif como quieras, pero, en el momento que se cumple la primera condición, se dejan de evaluar las restantes.
if [ condición ]; then
comando_si_verdadero
elif [ condición ]; then
comando_si_verdadero
elif [ condición ]; then
comando_si_verdadero
else
comando_por_defecto
fi
Para múltiples condiciones que evalúan un mismo valor o menús.
case variable in
valor_variable) comando_si_verdadero;;
valor_variable) comando_si_verdadero;;
valor_variable) comando_si_verdadero;;
...
*) comando_por_defecto;;
esac
#!/bin/bash
read -p "Elige una opción (a/b/c): " option
case $option in
a) echo "Elegiste A";;
b) echo "Elegiste B";;
c) echo "Elegiste C";;
*) echo "Opción no válida";;
esac
#!/bin/bash
num=25
if [ $num -ge 10 ]; then
echo "Número mayor o igual que 10"
elif [ $num -eq 0 ]; then
echo "Número igual a 0"
else
echo "Condición por defecto"
fi
read -p "Elige una opción (1/2/3): " option
case $option in
1) echo "Elegiste 1";;
2) echo "Elegiste 2";;
3) echo "Elegiste 3";;
*) echo "Opción no válida";;
esac
name=Brais
if [ -n $name ]; then
echo "El nombre existe"
fi
if [ $num -ge 18 ] && [ -n $name ]; then
echo "Mayor de edad"
fi
if [ -e "./script.sh" ]; then
echo "El archivo existe"
fi
$num -ge 10→ comprueba que la variable num sea mayor o igual que 10.$num -eq 0→ comprueba que la variable num sea igual a 10.case $option in→ inspecciona el valor de option para asignar el caso de ejecución correcto en base a su valor.-n $name→ comprueba que la cadena asociada a name no esté vacía.[ $num -ge 18 ] && [ -n $name ]→ comprueba que num sea mayor o igual que 18 y que name no esté vacío.-e "./script.sh"→ comprueba que el script existe.
Note
Script de ejemplo con condicionales: conditionals_script.sh
Recorre un listado de valores.
for i in 1 2 3 4 5
do
echo "Número: $i"
done
for name in *.sh
do
echo "Archivo: $name"
done
for i in 1 2 3 4 5→ recorre el listado de números definidos, almacenando el valor de cada iteración en la variable i.for name in *.sh→ recorre el listado de archivos que cumplan el criterio de la extensión, almacenando el valor de cada iteración en la variable name.
Se ejecuta mientras la condición sea verdadera.
count=1
while [ $count -le 5 ]
do
echo "Contador: $count"
((count++))
done
while [ $count -le 5 ]→ se ejecuta el bucle mientras el valor de la variable count sea menor o igual que 5.((count++))→ incrementa el valor de count en 1 tras cada ejecución del bucle.
Se ejecuta hasta que la condición sea verdadera.
count=1
until [ $count -gt 10 ]
do
echo "Contador: $count"
((count++))
done
until [ $count -gt 10 ]→ se ejecuta el bucle hasta el valor de la variable count sea mayor que 10.((count++))→ incrementa el valor de count en 1 tras cada ejecución del bucle.
for i in 1 2 3 4 5
do
if [ $i -eq 3 ]; then
continue
elif [ $i -eq 4 ]; then
break
fi
echo "Número: $i"
done
continuesalta la iteración y pasa a la siguiente.breaksale del bucle actual.
Note
Script de ejemplo con bucles: loops_script.sh
my_function() {
echo "Hola desde la función"
}
my_function
my_function()→ definiciónmy_function→ invocación
my_function_with_params() {
echo "Hola $1"
}
my_function_with_params Brais
$1→ accede al primer argumento posicionalmy_function_with_params argumento→ invocación enviando el parámetro
my_function_with_return() {
return 1
}
my_function_with_return
echo $?
return→ retorna un valor desde la función$?→ accede al valor del retorno fuera de la función tras su invocación
Tip
Retorna 0 como código de salida para indicar éxito en la ejecución y otro número para indicar un error.
- Variables globales: visibles en todo el script.
- Variables locales: visibles sólo dentro de la función (local).
name=Brais # global
my_function_2() {
local msj=", mundo" # local
echo "Hola $msj $name"
}
echo "Hola desde fuera $msj"
my_function_2
local→ para definir variables locales.echo "Hola $msj $name"→ puede acceder a las 2 variables desde su ámbito.echo "Hola desde fuera $msj"→ no puede acceder a la variable local fuera del ámbito de la función.
Caution
Utiliza local como buena práctica para definir variables locales.
Note
Script de ejemplo con funciones: functions_script.sh
0→ Éxito!=0→ Error
#!/bin/bash
cp file.txt ../Course
if [ $? -ne 0 ]; then
echo "Error al copiar el archivo"
fi
cp file.txt ../Course→ intenta realizar la copia.$? -ne 0→ accede al código de salida y comprueba si es distinto de cero (error).
|| command→ ejecuta el comando si hay un error.&& command→ ejecuta el comando si no hay un error.
cp file.txt ../Course || echo "Otra vez se ha producido el error"
cp script.sh ../Course && echo "No se ha producido un error"
||→ se ejecuta el echo si se produce un error en el cp.&&→ se ejecuta el echo si cp se realiza con éxito.
Note
Script de ejemplo con errores: errors_script.sh
