🧠 Introducción a Bash
Bash es uno de los intérpretes de comandos más usados en sistemas Linux y Unix. Permite interactuar con el sistema operativo a través de comandos, automatizar tareas, y crear scripts potentes.
📚 ¿Qué es Bash?
-
Shell: Un programa que recibe órdenes del usuario y las envía al sistema operativo.
-
Bash: Es un tipo de shell mejorado basado en el antiguo sh (Bourne Shell).
Permite:
-
Ejecutar comandos.
-
Crear scripts automáticos (
.sh). -
Manipular archivos, programas y procesos.
✅ Permiso de ejecución en Bash
Cuando creas un script, necesitas darle permiso de ejecución para poder correrlo directamente.
🔓 Dar permiso:
chmod +x script.sh
-
+xañade el permiso de ejecución. -
Esto permite ejecutar el script así:
🚫 Sin permiso:
También puedes ejecutarlo sin permisos usando Bash directamente:
bash script.sh
⚙️ Shebang (#!/bin/bash)
El shebang es la primera línea de un script e indica qué intérprete usar:
#!/bin/bash
#!/bin/bash
-
Debe estar en la primera línea.
-
Es necesario si quieres ejecutar el script con
./script.sh.
📜 Variables en Bash
Las variables almacenan información temporal para usarla después.
#!/bin/bash
nombre="Unai"
echo "Hola $nombre"
-
No hay espacios entre la variable y el
=. -
Para llamar a una variable:
$nombre
🔢 Leer valores del usuario
#!/bin/bash
echo "Dime tu edad:"
read edad
echo "Tienes $edad años."
echo "Dime tu edad:" read edad echo "Tienes $edad años."
🧠 Condicionales en Bash
#!/bin/bash
if [ $edad -ge 18 ]; then
echo "Eres mayor de edad"
else
echo "Eres menor de edad"
fi
-
Se usan
[ ]para las condiciones (separadas por espacios). -
Es recomendable poner comillas alrededor de las variables.
Operadores comunes:
| Operador | Significado |
|---|---|
-eq |
Igual |
-ne |
No igual |
-lt |
Menor que |
-le |
Menor o igual |
-gt |
Mayor que |
-ge |
Mayor o igual |
Arrays
Los arrays permiten almacenar múltiples valores en una sola variable y acceder a ellos individualmente o en conjunto.
🧾 Declarar un Array
declare -a myArray=(1 2 3 4)echo ${myArray[@]}
declare -aindica que la variable es un array (aunque no es obligatorio, mejora la claridad).
📦 Mostrar todos los elementos
echo "${myArray[@]}"
[@] accede a todos los elementos del array
Salida:
🔁 Recorrer elementos línea por línea
for val in "${myArray[@]}"; do
echo "$val"
done
Recorre y muestra cada elemento del array en una línea separada.
🔢 Acceder a un elemento específico
echo "${myArray[1]}"
Muestra el segundo elemento del array (los arrays en Bash comienzan en índice 0).
Salida:
🧮 Recorrer array con índice
declare -a myArray=(1 2 3 4)
declare -i posicion=0
for element in "${myArray[@]}"; do
echo "[+] Elemento en la posición [$posicion]; $element"
let posicion+=1
done
🧮 Contar elementos en un array
echo "Número de elementos: ${#myArray[@]}"
Salida:
${#array[@]}devuelve el número de elementos del array.
🎯 Último elemento del array
echo "Último elemento: ${myArray[-1]}"
⚠️ Esto no funciona en Bash tradicional. En Bash no se puede acceder con índices negativos por defecto.
Para obtener el último elemento puedes usar:
echo "${myArray[${#myArray[@]}-1]}"
🗑️ Eliminar elementos del array
unset myArray[0]
Elimina el primer elemento (índice 0). El índice queda vacío, pero no se reindexa automáticamente.
echo "${myArray[@]}"
🔁 Bucles en Bash
Bucle for
#!/bin/bash
for i in {1..5}
do
echo "Número $i"
done
🔁 Bucle while
#!/bin/bash
contador=1
while [ $contador -le 5 ]
do
echo "Contador: $contador"
contador=$((contador + 1))
done
🧭 Condicional múltiple: case
#!/bin/bash
echo "Elige una opción (a/b/c):"
read opcion
case $opcion in
a) echo "Elegiste A";;
b) echo "Elegiste B";;
c) echo "Elegiste C";;
*) echo "Opción no válida";;
esac
🧰 Argumentos en scripts
Dentro de un script (script.sh):
#!/bin/bash
echo "Primer argumento: $1"
echo "Segundo argumento: $2"
Ejecutar:
bash script.sh valor1 valor2
📦 Funciones en Bash
Una función en Bash te permite agrupar comandos bajo un nombre, para reutilizarlos fácilmente.
✅ Sintaxis básica:
nombre_funcion() {
# comandos aquí
}
🧪 Ejemplo completo:
#!/bin/bash
saludar() {
echo "Hola, $1"
}
saludar "Unai"
-
saludares el nombre de la función. -
$1representa el primer argumento que se pasa al llamar a la función. -
Puedes usar
$2,$3, etc., para acceder a más argumentos.
🖥️ Script básico para saber tu IP
Una manera interesante de obtener tu dirección IP es creando un script básico en Bash. Este script te permitirá saber tu dirección IP local de forma sencilla y rápida sin tener que buscarla manualmente. Esto es útil si estás trabajando en un entorno de red y necesitas obtener tu IP frecuentemente, o si quieres automatizar este proceso.
#!/bin/bash
ip=$(ifconfig eth0 | grep "inet " | awk '{print $2}')
echo "Esta es tu IP: $ip"
-
#!/bin/bash: es el shebang, indica que se debe ejecutar con Bash. -
ip=$(...): guarda el resultado del comando dentro de la variableip. -
ifconfig eth0: muestra la configuración de la interfaz de redeth0. -
grep "inet ": busca la línea donde aparece la IP. -
awk '{print $2}': extrae solo la dirección IP. -
echo: imprime el resultado.
📌 Notificaciones importantes:
-
Si usas una interfaz de red diferente (por ejemplo,
wlan0para Wi-Fi), solo necesitas cambiareth0por el nombre correcto de tu interfaz de red. -
Si en tu sistema no está disponible el comando
ifconfig, puedes usar el comandoipcomo alternativa.
📦 Manejo de la Interrupción (Ctrl+C) en Bash
En Bash, es posible manejar la interrupción de un script cuando el usuario presiona Ctrl+C. Esto se puede hacer utilizando la función trap, que captura señales del sistema (en este caso, la señal INT que se genera al presionar Ctrl+C), y ejecuta una acción definida cuando la señal es recibida.
🧩 Ejemplo: Función ctrl_c para manejar Ctrl+C
#!/bin/bash
# Ctrl+c
function ctrl_c(){
echo -e "\n\n[!] Saliendo ... \n"
exit 1
}
trap ctrl_c INT
sleep 10
🧠 Explicación del código:
-
#!/bin/bash: Define el intérprete que se usará para ejecutar el script (Bash). -
function ctrl_c(){ ... }: Define una función llamadactrl_c, que contiene los comandos a ejecutar cuando se reciba la señalINT(interrupción deCtrl+C). -
echo -e "\n\n[!] Saliendo ... \n": Imprime un mensaje indicando que el script está siendo interrumpido. El-eenechopermite que se interpreten caracteres especiales como\npara saltos de línea. -
exit 1: Termina el script con un código de salida1, que indica que el proceso se detuvo de manera controlada por una interrupción. -
trap ctrl_c INT: El comandotrapcaptura la señalINT(la que se envía al presionarCtrl+C) y ejecuta la funciónctrl_ccuando esa señal es recibida. -
sleep 10: Hace que el script espere 10 segundos. Durante este tiempo, si el usuario presionaCtrl+C, se ejecutará la funciónctrl_c, mostrando el mensaje y deteniendo el script.
📌 ¿Por qué es útil este manejo?
-
Interrupción controlada: Permite gestionar el comportamiento del script cuando el usuario decide interrumpir su ejecución.
-
Mensajes informativos: Puedes mostrar mensajes personalizados antes de finalizar el script, lo que mejora la experiencia del usuario.
-
Robustez: Añadir funciones de manejo de señales hace que los scripts sean más robustos, especialmente en tareas largas o automatizadas.