1. Shell scripting (parte II)
1.1 Buenas prácticas
- Google tiene una guía de estilo para shell scripting.
- La documentación de ShellCheck. ShellCheck te permite insertar scripts y te recomienda mejoras para ellos.
- Artículo de blog de "The Sharat's" de buenas prácticas en shell scripting. Además, proporciona una plantilla de uso útil para todos tus scripts.
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:
1.3 Uso de dobles comillas en las variables
Para prevenir diversos problemas, es recomendable que uses dobles comillas en las variables
#!/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
#!/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:
#!/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
#!/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.

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 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