28 de Agosto de 2023 - ed. hace: 11 meses, 3 semanas
Introducción al scripting con Bash. Variables, lógica básica, y funciones para iniciar en este fascinante lenguaje que nos permite automatizar tareas repetitivas o incluso crear la funcionalidad que sea, sumando las prestaciones de otras aplicaciones
Un script es un programa que es usado para manipular, personalizar y automatizar características y funcionalidad de un sistema.
Los lenguajes de scripting son usualmente interpretados en tiempo de ejecución, y permiten se combinados con otros programas. Los entornos que pueden ser automatizados a travéz de scripts incluyen aplicaciones, editores de texto, páginas web, sistemas integrados, video juegos, entre otros.
Un script es un pequeño programa, usualmente de no mas de un archivo, con no mas de unas pocas miles de lineas de código.
Algunos lenguajes utilizados para scripting son:
Estos son por lo general rápidos de aprender y de fácil aplicación, ya sea para pequeños trozos de código o scripts interactivos (read-eval-print loop). Esto implica por lo gerenal una sintaxis y semantica simple.
Bash in 100 Seconds
$
representa una variable
mivar='hola'
mivar2='compañero'
echo $mivar $mivar2
echo ${mivar}
echo "${mivar} ${mivar2}s!"
\
escape de caracteres especiales
{ } [ ] ( ) < >
/ \ " ? * ; ` #
| ~ ^ = & $ !
echo \${mivar}
mi_func(){
mivar='funcion 1'
echo "${mivar}"
}
name="${USER}"
local_var() {
local name="Rojelia"
return
}
local_var
echo "$name"
Es mivar
una variable?
if [ -v mivar ]; then
echo "'mivar' es una variable"
else
echo "'mivar' no es una variable"
fi
if [ "${mivar}" = "hola" ]; then
echo "'mivar' es 'hola'"
else
echo "'mivar' no es 'hola'"
fi
-f
if [ -f ~/.bashrc ]; then
echo "El archivo '.bashrc' existe en ${HOME}"
else
echo "El archivo '.bashrc' no existe en ${HOME}"
fi
if [ -f ~/.bash_aliases ]; then
echo "Ya tienes tu archivo de alias"
else
echo "Tienes pendiente crear tus alias, ¿Que esperas?"
fi
declare -a mi_array=(cero uno dos tres cuatro)
echo "${#mi_array[@]}"
echo "${mi_array[2]}"
mi_array[2]=DOS
echo "${mi_array[2]}"
# recorrer secuencia
for var in $(seq 5); do
echo "${var}"
done
for var in {1..5}; do
echo "${var}"
done
for((i=0; i < 5; i++)); do
echo $i
done
# recorrer array
for var in ${mi_array[@]}; do
echo "valor: ${var}"
done
for (( i = 0; i < ${#mi_array[@]}; i++ )); do
echo "indice: ${i} | valor: ${mi_array[${i}]}"
done
# recorrer directorios
for var in */; do
echo "${var}"
done
var_control=0
while [ $var_control -lt 5 ]; do
echo "$((var_control++))"
done
mi_case(){
case $1 in
1)
echo "opcion 1"
;;
2)
echo "opcion 2"
;;
3)
echo "opcion 3"
;;
*)
echo "opcion desconocida"
;;
esac
}
mi_case 1
mi_case 2
mi_case 3
mi_case f
# suma
echo "$((6+4))"
mivar=1
echo "$((++mivar))"
# resta
echo "$((6-4))"
echo "$((--mivar))"
# mutiplicación
echo "$((6*4))"
# división entera
echo "$((6/4))"
# modulo o resto
echo "$((6%4))"
# exponencial
echo "$((10**2))"
Evalua si una expresión es verdadera, puede evaluar archivos, directorios y
variables. Retorna 0
si la condición se evalua como verdadera, o 1
si
es falsa
Operador | Descripción |
---|---|
&& |
Y lógigo |
|| |
O lógico |
# Mayor que
[[ 8 -gt 7 ]] && echo "Verdadero" || echo "Falso"
# Menor que
[[ 8 -lt 7 ]] && echo "Verdadero" || echo "Falso"
# Igual que
[[ 8 -eq 8 ]] && echo "Verdadero" || echo "Falso"
[[ "ocho" = "ocho" ]] && echo "Verdadero" || echo "Falso"
# Distinto que
[[ "ocho" != "ocho" ]] && echo "Verdadero" || echo "Falso"
Mas información man test
read -p "Ingresa un número :" num
if ((num == 10)); then
echo "El número es egual a 10"
elif ((num > 10)); then
echo "El número $num es mayor que 10"
else
echo "El número $num es menor que 10"
fi
echo "${EDITOR} $USER $((2+2)) $(date +%Y)"
Comillas simples ' ' impiden cualquier substitution
echo '${EDITOR} $USER $((2+2)) $(date +%Y)'
echo Numero_{1..5}
# Numero_1 Numero_2 Numero_3 Numero_4 Numero_5
echo Numero_{5..1}
# Numero_5 Numero_4 Numero_3 Numero_2 Numero_1
echo {a..z}
# a b c d e f g h i j k l m n o p q r s t u v w x y z
echo {z..a}
# z y x w v u t s r q p o n m l k j i h g f e d c b a
echo {01..09}
# 01 02 03 04 05 06 07 08 09
echo {090..100}
# 090 091 092 093 094 095 096 097 098 099 100
printf 'Saludos & Felicitaciones %s!\n' "Juana" "Roberto"
# Saludos & Felicitaciones Juana!
# Saludos & Felicitaciones Roberto!
echo a{A{1,2},B{3,4}}b
# aA1b aA2b aB3b aB4b
mkdir {2023..2025}-{01..12}
La entrada de usuario en bash, es asignada por defecto al la variable $REPLY
, esta
es reemplazada al agregar una variable despues de un texto que explique la solicitud.
read -p <texto> [variable]
read -p "Ingresa tu nombre:"
echo "${REPLY}"
read -p "Ingresa tu nombre:" RESP
echo "${RESP}"
while :; do
read -p "Ingresa tu edad: " EDAD
case ${EDAD} in
[1-9]|1[0-7])
echo "Menor de edad"
;;
1[8-9]|[2-5][0-9])
echo "Mayor de edad"
;;
[6-9][0-9])
echo "Tercera Edad"
;;
1[0-2][0-9])
echo "WoW!!"
;;
salir)
break
;;
*)
echo "Ingresa una edad válida"
;;
esac
done
Un script es un archivo de texto, con o sin extensión, ejecutable, donde incluye como primera linea un shebang, el cual indíca a bash que binario va a ejecutar el script
#!/bin/bash
La ventaja de usar env
es que este usa las configuraciones del entorno desde donde
se está ejecutando
#!/usr/bin/env bash
#!/usr/bin/env python
El shebang nos ahorra tener que especificar el programa que va a ejectuar el script al momento de llamarlo
# sin shebang, no requiere ser ejecutable
bash mi_script_bash
python mi_script_python
# con shebang, requiere ser ejecutable
./mi_script_bash
./mi_script_python
echo '#!/usr/bin/env bash' > mi_script
echo 'echo "hola ${USER}"' >> mi_script
chmod +x mi_script
./mi_script
#!/usr/bin/env bash
echo "Cantidad de argumentos: $#"
while [[ $# -gt 0 ]]; do
echo "${1}"
shift
done
echo "Cantidad de argumentos: $#"
./mi_script arg1 arg2 arg3
Esta es la continuación de:
- Introducción a la Terminal con Bash pt. 1
- Introducción a la Terminal con Bash pt. 2