Use la declaración if de Linux Bash para construir expresiones condicionales con un if
then
fi
estructura. Agregar elif
palabras clave para expresiones condicionales adicionales, o la else
palabra clave para definir una sección general de código que se ejecuta si no se ejecutó ninguna cláusula condicional anterior.
Todos los scripts Bash no triviales necesitan tomar decisiones. La declaración if de Bash le permite a su script de Linux hacer preguntas y, dependiendo de la respuesta, ejecutar diferentes secciones de código. Así es como funcionan.
¿Qué es la ejecución condicional?
En todos los scripts de Bash, excepto en los más triviales, suele existir la necesidad de que el flujo de ejecución tome un camino diferente a través del script, de acuerdo con el resultado de una decisión. Esto se llama ejecución condicional.
Una forma de decidir qué rama de ejecución tomar es usar un if
declaración. Es posible que escuches if
declaraciones llamadas if then
declaraciones, o if then else
declaraciones. Son diferentes nombres para la misma cosa.
El if
afirmación dice que si algo es verdad, entonces no este. Pero si el algo es falso, hazlo. eso en cambio. El “algo” puede ser muchas cosas, como el valor de una variable, la presencia de un archivo o si dos cadenas coinciden.
La ejecución condicional es vital para cualquier script significativo. Sin él, está muy limitado en lo que puede hacer con su secuencia de comandos. A menos que pueda tomar decisiones significativas, no podrá tomar problemas del mundo real y producir soluciones viables.
El if
es probablemente el medio más utilizado para obtener la ejecución condicional. Aquí se explica cómo usarlo en scripts de Bash.
RELACIONADO: Cómo verificar si existe un archivo en Linux Bash Scripts
Un ejemplo simple de declaración If
Esta es la forma canónica de la más simple. if
declaración:
if [ this-condition-is-true ] then execute-these-statements fi
Si la condición dentro del texto se resuelve como verdadera, las líneas de guión en el then
se ejecuta la cláusula. Si está revisando guiones escritos por otros, es posible que vea el if
declaración escrita así:
if [ this-condition-is-true ]; then execute-these-statements fi
Algunos puntos a tener en cuenta:
- El
if
declaración se concluye escribiendofi
. - debe haber un espacio después el primer paréntesis”
[
” and before the second bracket ”]
” de la prueba condicional. - Si vas a poner el
then
palabra clave en la misma línea que la prueba condicional, asegúrese de usar un punto y coma ”;
” después de la prueba.
Podemos agregar un opcional else
cláusula para ejecutar algún código si la prueba de condición resulta ser falsa. El else
cláusula no necesita un then
palabra clave.
if [ this-condition-is-true ] then execute-these-statements else execute-these-statements-instead fi
Este script muestra un ejemplo simple de un if
declaración que utiliza un else
cláusula. La prueba condicional verifica si la edad del cliente es mayor o igual a 21 años. Si lo es, el cliente puede ingresar al local, y el then
se ejecuta la cláusula. Si no tienen la edad suficiente, el else
se ejecuta la cláusula y no se les permite entrar.
#!/bin/bash customer_age=25 if [ $customer_age -ge 21 ] then echo "Come on in." else echo "You can't come in." fi
Copie el script de arriba en un editor, guárdelo como un archivo llamado “if-age.sh” y use el chmod
comando para hacerlo ejecutable. Deberá hacer eso con cada uno de los scripts que discutimos.
chmod +x if-age.sh
Ejecutemos nuestro script.
./if-age.sh
Ahora editaremos el archivo y usaremos una edad menor a 21.
customer_age=18
Realice ese cambio en su secuencia de comandos y guarde sus cambios. Si lo ejecutamos ahora, la condición devuelve falso y se ejecuta la cláusula else.
./if-age.sh
La cláusula elif
El elif
La cláusula agrega pruebas condicionales adicionales. Puedes tener tantos elif
cláusulas como quieras. Se evalúan sucesivamente hasta que se determina que uno de ellos es verdadero. Si ninguno de los elif
pruebas condicionales prueban ser verdaderas, la else
La cláusula, si está presente, se ejecuta.
Este script solicita un número y luego le dice si es par o impar. El cero es un número par, por lo que no necesitamos probar nada.
Todos los demás números se prueban encontrando el módulo de una división por dos. En nuestro caso, el módulo es la parte fraccionaria del resultado de una división por dos. Si no hay parte fraccionaria, el número es divisible por dos, exactamente. Por lo tanto es un número par.
#!/bin/bash echo -n "Enter a number: " read number if [ $number -eq 0 ] then echo "You entered zero. Zero is an even number." elif [ $(($number % 2)) -eq 0 ] then echo "You entered $number. It is an even number." else echo "You entered $number. It is an odd number." fi
Para ejecutar este script, cópielo en un editor y guárdelo como “if-even.sh”, luego use chmod para hacerlo ejecutable.
Ejecutemos el script varias veces y verifiquemos su salida.
./if-even.sh
Todo eso está funcionando bien.
Diferentes formas de prueba condicional
los paréntesis” []
que hemos usado para nuestras pruebas condicionales es una forma abreviada de llamar a la test
programa. Por eso, todas las comparaciones y pruebas que test
los apoyos están disponibles para su if
declaración.
Estos son solo algunos de ellos:
- ! expresión: Verdadero si la expresión es falsa.
- -n cadena: Verdadero si la longitud de la cadena es mayor que cero.
- cadena -z: Verdadero si la longitud de la cadena es cero. Es decir, es una cadena vacía.
- cadena1 = cadena2: Verdadero si string1 es lo mismo que string2.
- cadena1 != cadena2: Verdadero si cadena1 no es lo mismo que cadena2.
- entero1 -eq entero2: Verdadero si entero1 es numéricamente igual a entero2
- entero1 -qt entero2: Verdadero si entero1 es numéricamente mayor que entero2
- entero1 -lt entero2: Verdadero si entero1 es numéricamente menor que entero2
- -d directorio: Verdadero si el directorio existe.
- -e archivo: Verdadero si el archivo existe.
- -s archivo: Verdadero si el archivo existe con un tamaño mayor que cero.
- -r archivo: Verdadero si el archivo existe y se establece el permiso de lectura.
- -w archivo: Verdadero si el archivo existe y se establece el permiso de escritura.
- -x archivo: Verdadero si el archivo existe y se establece el permiso de ejecución.
En la tabla, “archivo” y “directorio” pueden incluir rutas de directorio, ya sean relativas o absolutas.
El signo igual “=
y la prueba de igualdad -eq
son no lo mismo. El signo igual realiza una personaje por personaje comparación de texto. La prueba de igualdad realiza una numérico comparación.
Esto lo podemos ver usando el test
programa en la línea de comandos.
test "this string" = "this string"
test "this string" = "that string"
test 1 = 001
test 1 -eq 001
En cada caso, utilizamos el echo
comando para imprimir el código de retorno del último comando. Cero significa verdadero, uno significa falso.
Usando el signo igual” =
” nos da una respuesta falsa comparando 1 con 001. Eso es correcto, porque son dos cadenas de caracteres diferentes. Numéricamente tienen el mismo valor, uno, por lo que el -eq
El operador devuelve una respuesta verdadera.
Si desea utilizar la coincidencia de comodines en su prueba condicional, utilice el corchete doble ” [[ ]]
” sintaxis.
#!/bin/bash if [[ $USER == *ve ]] then echo "Hello $USER" else echo "$USER does not end in 've'" fi
Este script verifica el nombre de cuenta del usuario actual. Si termina en “ve
“, imprime el nombre de usuario. Si no termina en ” ve
“, el guión te lo dice, y termina.
./if-wild.sh
RELACIONADO: Pruebas condicionales en Bash: si, entonces, si no, elif
Declaraciones If anidadas
Puedes poner un if
declaración dentro de otra if
declaración.
Esto es perfectamente aceptable, pero anidar if
Las declaraciones hacen que el código sea menos fácil de leer y más difícil de mantener. Si se encuentra anidando más de dos o tres niveles de if
declaraciones, probablemente necesite reorganizar la lógica de su script.
Aquí hay un guión que obtiene el día como un número, del uno al siete. Uno es lunes, siete es domingo.
Nos indica el horario de apertura de una tienda. Si es un día laborable o un sábado, informa que la tienda está abierta. Si es domingo, informa que la tienda está cerrada.
Si la tienda está abierta, el anidado if
declaración hace una segunda prueba. Si el día es miércoles, nos dice que está abierto solo por la mañana.
#!/bin/bash # get the day as a number 1..7 day=$(date +"%u") if [ $day -le 6 ] then ## the shop is open if [ $day -eq 3 ] then # Wednesday is half-day echo "On Wednesdays we open in the morning only." else # regular week days and Saturday echo "We're open all day." fi else # not open on Sundays echo "It's Sunday, we're closed." fi
Copie este script en un editor, guárdelo como un archivo llamado “if-shop.sh” y hágalo ejecutable usando el chmod
dominio.
Ejecutamos el script una vez y luego cambiamos el reloj de la computadora para que fuera miércoles y volvimos a ejecutar el script. Luego cambiamos el día a domingo y lo ejecutamos una vez más.
./if-shop.sh
./if-shop.sh
./if-shop.sh
RELACIONADO: Cómo usar pruebas condicionales de doble corchete en Linux
El caso de si
La ejecución condicional es lo que aporta poder a la programación y los scripts, y los humildes if
La declaración bien podría ser la forma más utilizada de cambiar la ruta de ejecución dentro del código. Pero eso no significa que sea siempre la respuesta.
Escribir un buen código significa saber qué opciones tienes y cuáles son las mejores para usar para resolver un requerimiento en particular. El if
declaración es genial, pero no dejes que sea la única herramienta en tu bolso. En particular, echa un vistazo a la case
declaración que puede ser una solución en algunos escenarios.
RELACIONADO: Cómo usar declaraciones de casos en scripts Bash
2023-05-02 18:00:48
#Cómo #usar #sentencias #Bash #con #ejemplos,