1. Saltar a contenido

1. Shell scripting (parte II)

1.1 Buenas prácticas

Vamos a mejorar algunas de las cosas que hemos visto en el apartado anterior para hacerlo más legible y funcional.

1.2 Shell de ejecución y comentarios

Indica siempre en la primera línea con qué shell quieres ejecutar el script:

#!/bin/bash
#

Cosas...

1.3 Uso de dobles comillas en las variables

Para prevenir diversos problemas, es recomendable que uses dobles comillas en las variables

Comprueba si es mayor de edad
#!/bin/bash

# Programa ao que se lle pasa como parametro una idade:
## - Se a idade e igual ou superior a 18 anos, escribe: "É maior de idade."
## - Se a idade e inferior a 18 anos, escribe: "É menor de idade."

# Si    parametro1  e maior que     17
# if    $1      greater than    17
# then/entonces
# ...

if [ $1 -gt 17 ]
then
    echo "E maior de idade."
else
    echo "E menor de idade."
fi
Comprueba si es mayor de edad
#!/bin/bash

# Programa ao que se lle pasa como parametro una idade:
## - Se a idade e igual ou superior a 18 anos, escribe: "É maior de idade."
## - Se a idade e inferior a 18 anos, escribe: "É menor de idade."

# Si    parametro1  e maior que     17
# if    $1      greater than    17
# then/entonces
# ...

if [ "$1" -gt 17 ]
then
    echo "E maior de idade."
else
    echo "E menor de idade."
fi

1.4 Operadores lógicos

Aunque hemos visto que existe la opción -o (OR), -a (AND) para unir dos condiciones entre corchetes, la forma recomendable para evitar problemas es usar && y || fuera de los corchetes. Por ejemplo:

Comprueba si es mayor de edad
#!/bin/bash

# Programa ao que se lle pasa como parametro una idade:
## - Se a idade e igual ou superior a 18 anos, escribe: "É maior de idade."
## - Se a idade e inferior a 18 anos, escribe: "É menor de idade."
## - Se a idade e igual ou superior a 67 anos, escribe: "Está xubilado."
## - Se non se pasan parámetros. Mostrar un mensaxe indicando como usar o programa.
## - Por exemplo:
##  - El programa debe usarse coa seguinte sintaxe: ./condicionais6.sh <numero>

# Si    parametro1  e maior que     17
# if    $1      greater than    17
# then/entonces
# ...

# Podríamos poner $# -ne 1, pero utilizamos esto como un ejemplo con varias condiciones
if [ $# -eq 0 -o $# -gt 1 ]
then
    echo "O programa debe executarse coa seguinte sintaxe: $0 <numero>"

elif [ $1 -gt 66 ]
then

    echo "Está xubilado."

elif [ $1 -gt 17  ]
then
    echo "É maior de idade."

else
    echo "E menor de idade."
fi
Comprueba si es mayor de edad
#!/bin/bash

# Programa ao que se lle pasa como parametro una idade:
## - Se a idade e igual ou superior a 18 anos, escribe: "É maior de idade."
## - Se a idade e inferior a 18 anos, escribe: "É menor de idade."
## - Se a idade e igual ou superior a 67 anos, escribe: "Está xubilado."
## - Se non se pasan parámetros. Mostrar un mensaxe indicando como usar o programa.
## - Por exemplo:
##  - El programa debe usarse coa seguinte sintaxe: ./condicionais6.sh <numero>

# Si    parametro1  e maior que     17
# if    $1      greater than    17
# then/entonces
# ...

# Podríamos poner $# -ne 1, pero utilizamos esto para el ejemplo
if [ $# -eq 0 ] || [ $# -gt 1 ]
then
    echo "O programa debe executarse coa seguinte sintaxe: $0 <numero>"

elif [ "$1" -gt 66 ]
then

    echo "Está xubilado."

elif [ "$1" -gt 17  ]
then
    echo "É maior de idade."

else
    echo "E menor de idade."
fi

1.5 Corchetes, doble corchete, paréntesis y doble paréntesis

1.5.1 Comando test y corchetes

El caracter "[" y "]" son solo una versión del comando "test". El caracter "[" existe en /usr/bin/[. Esta es la razón por la que necesitan un espacio después de escribirse.

Vamos a hacer pruebas con el comando test y los corchetes, para que se vea que es lo mismo.

test command linux

Ejercicio

Prueba los dos últimos comandos de la imagen (que son para ver el manual de los comandos "test" y "["). Deberías ver que ambos llevan al mismo sitio.

1.5.2 Doble corchete [[]]

Mejora del comando test anterior. Con doble corchete podemos usar diversos operadores o expresiones sin tener que escaparlas con la barra invertida (\). Por ejemplo, si intentamos comparar con un operador "mayor que" o "menor que" dos números:

# Este programa falla
if [ 4 < 5 ]; then
    echo "4 es menor que 5"
fi

Este programa no funcionaría, sin embargo, sí podríamos hacerlo con doble corchete:

# Este programa funciona (también serviría usar corchete simple y escapar el "menor que")
if [[ 4 < 5 ]]; then
    echo "4 es menor que 5"
fi

https://www.warp.dev/terminus/bash-printf