====== Bash Scripting ======
===== Variables =====
==== Uso ====
#!/bin/bash
MY_SHELL="bash"
echo "Me gusta la shell $MY_SHELL"
Usaremos la notación con las llaves si queremos "pegar" algo en la variable:
#!/bin/bash
BIRTH_YEAR="2000"
echo "Mi fecha de nacimiento es 01/01/${BIRTH_YEAR}"
El símbolo ''#'' no será interpretado por el shell (salvo el caso de shebang), así que se utiliza para añadir comentarios.
===== Parámetros posicionales =====
Los argumentos que pasamos a un script se procesan en el mismo orden en que se envían. Se empiezan a nombrar desde el uno y se pueden acceder desde dentro del script usando ''$1'', ''$2'' y así sucesivamente
. El parámetro posicional hace referencia a la representación del argumento usando su posición.
Por ejemplo, si tenemos el siguiente script:
echo "Primero: $1";
echo "Segundo: $2";
echo "Tercero: $3";
Y lo ejecutamos de la siguiente manera:
miscript.sh uno dos tres
Obtendremos:
Primero: uno
Segundo: dos
Tercero: tres
==== Número de argumentos desconocido ====
Si el script puede recibir cualquier número de argumentos, podemos acceder a ellos a través de la variable ''$@'' que es un array que contendrá todos los argumentos.
i=1;
for numero in "$@"
do
echo "Número - $i: $numero";
i=$((i + 1));
done
Ejemplo de ejecución:
miscript.sh uno dos tres cuatro
Salida:
Número - 1: uno
Número - 2: dos
Número - 3: tres
Número - 4: cuatro
===== Ejemplos =====
==== Recorrer fechas ====
Recorrer todas las fechas entre dos fechas:
fecha_inicio=2020-01-01
fecha_fin=2021-01-01
# Todas las fechas durante un año:
while [ "$fecha_inicio" != "$fecha_fin" ]; do
echo $fecha_inicio
fecha_inicio=$(date -I -d "$fecha_inicio + 1 day")
done
===== Recursos =====
* [[https://google.github.io/styleguide/shellguide.html|Código de estilo de shell scripts de Google]]
* [[https://www.shellcheck.net/|ShellCheck: revisión de scripts de bash]]
* [[https://mywiki.wooledge.org/BashPitfalls|Errores comunes creando scripts de bash]]
* [[https://mywiki.wooledge.org/BashFAQ|Bash FAQ]]
* [[https://robertmuth.blogspot.com/2012/08/better-bash-scripting-in-15-minutes.html|Better Bash Scripting in 15 Minutes]]
* [[https://www.davidpashley.com/articles/writing-robust-shell-scripts/|Writing Robust Bash Shell Scripts]]
* https://github.com/awesome-lists/awesome-bash|Awesome Bash]]