terminal

Aprende shell script con ejemplos (II)

En esta entrada vamos a estudiar las sentencias condicionales y sentencias de repetición que podemos utilizar en shell script. Aunque sería bueno que supieses qué es una sentencia de repetición o una sentencia condicional no te preocupes. Intentaré explicártelo de tal manera que puedas entenderlo de una forma sencilla.

1. Sentencias condicionales

Imagina que estás vendiendo entradas de cine. Si te viene alguien hablando en español tu le contestas en español y si te habla en otro idioma tu le contestas en inglés porque imagínate que es el único idioma que conoces además del español.

Eso traducido a órdenes en shell script sería algo parecido a lo siguiente:

if [ habla_en_español]; then
      contesto_en_español
else
      contesto_en_inglés
fi

En realidad contesto_en_español y contesto_en_inglés no existe en shell script pero en vez de eso que me he inventado podríamos preguntar por el valor de alguna variable o preguntar si alguna variable tiene algún valor o es nula, etc.

En shell script existen tres tipos diferentes de sentencias condicionales:

Condicionales

  • if expresión then sentencia
  • if expresión then sentencia1 else sentencia2
  • if expresión then sentencia1 else if expresión2 then sentencia2 else sentencia3
  • Veamos a continuación algunos ejemplos de sentencias condicionales en shell script:

    #!/bin/bash
    # Este es un ejemplo de if expresión then sentencia 
    if [ "alboran" = "alboran" ]; then
           echo "Cierto, alboran == alboran"
    fi
    

    Este es otro ejemplo pero utilizando el patrón if expresión then sentencia1 else sentencia2

    #!/bin/bash
    if [ "alboran" = "alboran" ]; then
    	echo "Cierto, alboran == alboran"
    else
    	echo “Era falsa”
    fi
    
    Recuerda.
    Ten cuidado con los espacios en blanco. Intenta respetar los espacios en blanco en las expresiones porque de lo contrario al ejecutar tu shell script puedes tener problemas.

    Veamos otro ejemplo utilizando ahora variables y sentencias condicionales:

    #!/bin/bash
    T1="mar de"
    T2="alboran"
    if [ $T1 = $T2 ]; then
    	echo "Cierto, " $T1 " == " $T2
    else
    	echo "No es cierto"
    fi
    
    Ejercicios propuestos.
    1. Copia y ejecuta el ejercicio anterior. Comprueba que funciona y modifícalo para que T1 sea igual a T2. Comprueba ahora que dice «Cierto….».
    2. Crea un nuevo shell script que diga si el usuario que lo está ejecutando es root o no (recuerda que con el comando «echo $USER» puedo conocer el nombre del usuario actual).

    2. Sentencias repetitivas. Los bucles

    En shell script hay tres sentencias repetitivas bastante útiles. La sentencias for, while y until. Veamos detenidamente cada una de estas sentencias:

  • for – La sentencia for se utiliza cuando se quieren ejecutar una serie de sentencias un número determinado de veces. La sentencia for en shell script es un poco diferente a la sentencia for de otros lenguajes de programación. Una ventaja del for de shell script es que se puede iterar sobre cadenas (ya veremos más adelante cómo se hace).
  • while – Esta sentencia ejecuta un trozo de código si una condición se cumple, y para cuando dicha condición es falsa
  • until – Muy parecida a la anterior. La sentencia until ejecuta un pedazo de código hasta que una expresión sea falsa. La diferencia con la anterior es que mientras que while pregunta y luego ejecuta, until primero ejecuta y luego pregunta. Ten en cuenta que toda sentencia until se puede convertir en una sentencia while.
  • Veamos un ejemplo de la sentencia for:

    shel script for

    En este caso se muestran todos los ficheros del directorio desde donde se ejecuta el script anterior. La variable i va tomando como valor uno a uno el nombre de los archivos del directorio actual. Como puedes ver, dentro del for (desde el do hasta el done) se muestra el contenido de la variable i.

    Ejercicio propuesto.
    Copia y ejecuta el ejercicio anterior. Comprueba que funciona y modifícalo para que muestre otro directorio a tu elección.

    Veamos otro ejemplo. El ejemplo anterior no es muy parecido a los bucles for de otros lenguajes como java, C, etc. El siguiente ejemplo sí se asemeja al for de dichos lenguajes:

    shell script for

    El comando seq 1 10 genera una secuencia que va del 1 al 10. Si te fijas lo que hará este script es mostrar por pantalla los números del 1 al 10 ambos incluidos.

    Ejercicio propuesto.
    Copia y ejecuta el ejercicio anterior. Comprueba que funciona y modifícalo para que muestre los números del 5 al 50.
    ¿Serías capaz de hacer que solamente se muestren los números pares?

    Bueno, ya que sabemos cómo funciona el bucle for pasemos a ver cómo funcionan los bucles while y until. Si has entendido el for no te costará nada aprender estos otros. Veamos primeramente cómo funciona el bucle while con un ejemplo:

    shell script while

    En este ejemplo tenemos una variable que se llama CONTADOR que al principio vale 0 y luego se va incrementando uno a uno hasta llegar a 10. El resultado de ejecutar el script anterior es el siguiente:

    El contador es 0
    El contador es 1
    El contador es 2
    El contador es 3
    El contador es 4
    El contador es 5
    El contador es 6
    El contador es 7
    El contador es 8
    El contador es 9

    No llega a mostrar el valor 10 porque la condición es CONTADOR -lt 10 (lt es less than). Ya veremos más adelante cómo funcionan las condiciones.

    Veamos ahora un ejemplo con until:

    Ejemplo del until

    shell script until

    El resultado de ejecutar el script anterior es el siguiente:

    CONTADOR: 20
    CONTADOR: 19
    CONTADOR: 18
    CONTADOR: 17
    CONTADOR: 16
    CONTADOR: 15
    CONTADOR: 14
    CONTADOR: 13
    CONTADOR: 12
    CONTADOR: 11
    CONTADOR: 10
    Ejercicios propuestos.
    1. Realiza un script que muestre los números pares del 0 al 100 con while.
    2. Realiza el mismo ejercicio de forma descendente pero utilizando until.

    Si te ha gustado este post o lo has encontrado interesante no dejes de continuar aprendiendo shell script en la tercera entrega.

    One thought on “Aprende shell script con ejemplos (II)

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada.

    Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.