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