Introducción
En esta práctica de laboratorio, aprenderás a utilizar sentencias condicionales en la programación de shell para tomar decisiones lógicas. Cubriremos la sintaxis básica de las sentencias if-else, así como el uso de comparaciones numéricas y de cadenas para evaluar condiciones. Al finalizar esta sesión, estarás capacitado para escribir scripts de shell que puedan tomar decisiones basadas en diversas condiciones.
Crea tu primera sentencia If
Comencemos creando una sentencia if sencilla que verifique si una variable llamada NAME es igual a "John".
Primero, abre una terminal en el WebIDE. Por defecto, deberías estar en el directorio /home/labex/project. Si no estás seguro, siempre puedes verificar tu ubicación actual con el comando pwd.
Crea un nuevo archivo llamado if.sh usando el siguiente comando:
touch if.sh
Este comando crea un archivo vacío llamado if.sh en tu directorio actual.
Ahora, abre el archivo if.sh en el WebIDE. Puedes hacerlo haciendo clic en el archivo dentro del explorador de archivos en el lado izquierdo de la interfaz.
Añade el siguiente contenido al archivo:
#!/bin/bash
NAME="John"
if [ "$NAME" = "John" ]; then
echo "The name is John"
fi
Analicemos este script:
#!/bin/bash: Esto se conoce como línea "shebang". Indica al sistema qué intérprete debe usar para ejecutar el script. En este caso, estamos usando Bash.NAME="John": Esta línea crea una variable llamadaNAMEy le asigna el valor "John".if [ "$NAME" = "John" ]; then: Este es el inicio de nuestra sentencia if. Comprueba si el valor deNAMEes igual a "John".- Los corchetes
[ ]son en realidad un comando en Bash, equivalente al comandotest. - Ponemos
"$NAME"entre comillas para manejar casos dondeNAMEpodría estar vacío o contener espacios. - El punto y coma y la palabra
thenson parte de la sintaxis de la sentencia if en Bash.
- Los corchetes
echo "The name is John": Esta línea se ejecutará si la condición es verdadera.fi: Esto marca el final de la sentencia if. ¡Es "if" escrito al revés!
Guarda el archivo después de añadir este contenido.
Ahora, necesitamos hacer que el script sea ejecutable. En sistemas tipo Unix, los archivos no son ejecutables por defecto por razones de seguridad. Podemos cambiar esto usando el comando chmod:
chmod +x if.sh
Este comando añade el permiso de ejecución al archivo. El parámetro +x significa "añadir permiso de ejecución".
Ahora, ejecuta el script:
./if.sh
El prefijo ./ le indica a la shell que busque el script en el directorio actual.
Deberías ver la salida: The name is John
Si no ves este resultado, verifica que hayas guardado el archivo con el contenido correcto y que le hayas otorgado permisos de ejecución.
Añade una cláusula Else
Ahora, ampliemos nuestra sentencia if para incluir una cláusula else. Esto nos permite especificar qué debe suceder cuando la condición es falsa.
Abre de nuevo el archivo if.sh en el WebIDE y modifícalo de la siguiente manera:
#!/bin/bash
NAME="Alice"
if [ "$NAME" = "John" ]; then
echo "The name is John"
else
echo "The name is not John"
fi
Repasemos los cambios:
- Hemos cambiado la variable
NAMEa "Alice". Esto es para demostrar qué sucede cuando la condición no se cumple. - Hemos añadido una cláusula
else. Esta cláusula define lo que debe ocurrir si la condición de la sentencia if es falsa. - Después del
else, hemos añadido otro comandoechoque se ejecutará siNAMEno es "John".
La cláusula else es opcional en las sentencias if, pero resulta muy útil cuando quieres realizar una acción específica en caso de que la condición sea falsa, en lugar de simplemente no hacer nada.
Guarda el archivo con estos cambios.
Ahora, ejecuta el script de nuevo:
./if.sh
En esta ocasión, deberías ver la salida: The name is not John
Esto se debe a que NAME ahora es "Alice", por lo que la condición [ "$NAME" = "John" ] es falsa y se ejecuta el bloque de código dentro del else.
Intenta cambiar la variable NAME de nuevo a "John" y ejecuta el script otra vez. ¿Qué resultado obtienes? Esta es una buena forma de comprobar que tu sentencia if-else funciona correctamente en ambos casos.
Introducción a Elif
A veces, queremos verificar múltiples condiciones. Aquí es donde la cláusula elif (else if) resulta muy práctica. Vamos a modificar nuestro script para manejar varios nombres.
Actualiza el archivo if.sh con el siguiente contenido:
#!/bin/bash
NAME="George"
if [ "$NAME" = "John" ]; then
echo "John Lennon"
elif [ "$NAME" = "Paul" ]; then
echo "Paul McCartney"
elif [ "$NAME" = "George" ]; then
echo "George Harrison"
elif [ "$NAME" = "Ringo" ]; then
echo "Ringo Starr"
else
echo "Unknown member"
fi
Analicemos este script:
- Comenzamos con
NAME="George". Este será el nombre que comprobaremos. - La primera sentencia
ifverifica si el nombre es "John". - Si no es "John", pasamos a la primera sentencia
elif(else if), que comprueba si el nombre es "Paul". - Si no es "Paul", pasamos al siguiente
elif, buscando "George". - Si no es "George", buscamos "Ringo".
- Si ninguna de estas condiciones es verdadera, llegamos a la cláusula
else, que imprimirá "Unknown member".
La cláusula elif te permite evaluar múltiples condiciones en secuencia. Puedes incluir tantas cláusulas elif como necesites. Las condiciones se evalúan en orden, y se ejecutará el bloque de código correspondiente a la primera que resulte verdadera.
Guarda el archivo con estos cambios.
Ahora, ejecuta el script:
./if.sh
Deberías ver la salida: George Harrison
Intenta cambiar la variable NAME a diferentes valores ("John", "Paul", "Ringo" o cualquier otro) y ejecuta el script cada vez. Observa cómo cambia la salida según el valor de NAME.
Comparaciones Numéricas
Los scripts de shell también pueden comparar números. Vamos a crear un nuevo script para demostrar las comparaciones numéricas.
Crea un nuevo archivo llamado numeric.sh:
touch numeric.sh
Abre numeric.sh en el WebIDE y añade el siguiente contenido:
#!/bin/bash
NUMBER=10
if [ $NUMBER -lt 5 ]; then
echo "The number is less than 5"
elif [ $NUMBER -eq 10 ]; then
echo "The number is exactly 10"
elif [ $NUMBER -gt 15 ]; then
echo "The number is greater than 15"
else
echo "The number is between 5 and 15, but not 10"
fi
Este script introduce operadores de comparación numérica:
-lt: menor que (less than)-eq: igual a (equal to)-gt: mayor que (greater than)
También existen otros que puedes utilizar:
-le: menor o igual que (less than or equal to)-ge: mayor o igual que (greater than or equal to)-ne: no es igual a (not equal to)
Observa que usamos estos operadores especiales en lugar de símbolos como < o >. Esto se debe a que en Bash, < y > se utilizan para la redirección de entrada/salida, no para comparaciones numéricas.
Ahora, hagamos que el script sea ejecutable y ejecutémoslo:
chmod +x numeric.sh
./numeric.sh
Deberías ver la salida: The number is exactly 10
Intenta cambiar la variable NUMBER a diferentes valores y ejecuta el script de nuevo. Observa cómo cambia el resultado según el valor que establezcas.
Por ejemplo, si cambias NUMBER a 20, deberías obtener "The number is greater than 15". Si lo cambias a 7, deberías obtener "The number is between 5 and 15, but not 10".
Comparaciones de Cadenas y Operadores Lógicos
Por último, exploremos las comparaciones de cadenas y los operadores lógicos. Crea un nuevo archivo llamado string_logic.sh:
touch string_logic.sh
Abre string_logic.sh en el WebIDE y añade el siguiente contenido:
#!/bin/bash
STRING1="hello"
STRING2="world"
NUMBER1=5
NUMBER2=10
if [ "$STRING1" = "hello" ] && [ "$STRING2" = "world" ]; then
echo "Both strings match"
fi
if [ $NUMBER1 -lt 10 ] || [ $NUMBER2 -gt 5 ]; then
echo "At least one of the number conditions is true"
fi
if [[ "$STRING1" != "$STRING2" ]]; then
echo "The strings are different"
fi
if [[ -z "$STRING3" ]]; then
echo "STRING3 is empty or not set"
fi
Este script demuestra varios conceptos nuevos:
- Comparación de igualdad de cadenas (
=): Comprueba si dos cadenas son exactamente iguales. - AND lógico (
&&): Este operador permite combinar dos condiciones. Ambas deben ser verdaderas para que la expresión completa sea verdadera. - OR lógico (
||): Este operador también combina dos condiciones, pero basta con que una sea verdadera para que la expresión completa sea verdadera. - Comparación de desigualdad de cadenas (
!=): Comprueba si dos cadenas son diferentes. - Comprobación de cadena vacía (
-z): Es verdadero si la cadena está vacía (tiene longitud cero).
Además, nota el uso de corchetes dobles [[ ]] en algunas de las sentencias if. Estas son una versión mejorada de los corchetes simples y son preferibles en scripts de Bash siempre que sea posible. Permiten expresiones más complejas y presentan menos comportamientos inesperados con respecto a la división de palabras y la expansión de rutas.
Haz que el script sea ejecutable y ejecútalo:
chmod +x string_logic.sh
./string_logic.sh
Deberías ver impresas las cuatro sentencias echo, ya que todas las condiciones del script son verdaderas.
Both strings match
At least one of the number conditions is true
The strings are different
STRING3 is empty or not se
Intenta cambiar algunos de los valores (como establecer STRING1 con algo que no sea "hello") y observa cómo afecta a la salida.
Resumen
En esta práctica de laboratorio, has aprendido a utilizar sentencias condicionales en la programación de shell. Has practicado el uso de sentencias if-else, cláusulas elif, comparaciones numéricas, comparaciones de cadenas y operadores lógicos. Estas herramientas te permiten crear scripts de shell más complejos y basados en la toma de decisiones.
Puntos clave aprendidos:
- La estructura básica de las sentencias if-else en scripts de shell.
- Cómo usar elif para manejar múltiples condiciones.
- Operadores de comparación numérica (-lt, -gt, -eq, etc.).
- Comparación de cadenas y operadores lógicos.
- La importancia de otorgar permisos de ejecución a los scripts con chmod.
Recuerda que la práctica es fundamental para dominar el scripting en shell. Intenta crear tus propios scripts utilizando estos conceptos de diferentes maneras. A medida que avances, descubrirás que estas sentencias condicionales son esenciales para desarrollar scripts más sofisticados y útiles.



