Curso de Shell Scripting
Los fundamentos te enseñan cómo se comporta el shell al ejecutar comandos y cómo manejar datos básicos. Esto es clave para que tus scripts sean predecibles y sin errores.
1.1. Comandos básicos y rutas
Los scripts son básicamente secuencias de comandos. Para usarlos bien, debes comprender rutas absolutas y relativas.
-
Ruta absoluta: empieza desde
/(la raíz del sistema).- Ejemplo:
/home/angel/proyecto/hola.sh
- Ejemplo:
-
Ruta relativa: parte de tu carpeta actual.
- Ejemplo:
./hola.sh
- Ejemplo:
📌 Ejemplo:
1pwd # Muestra la carpeta actual 2cd /tmp # Cambia a /tmp 3ls # Lista los archivos 4./hola.sh # Ejecuta el script en la carpeta actual
✅ Siempre usa
./para ejecutar un script que está en el directorio actual. ❌ No confíes en que el shell busque en elPATH(más seguro especificar la ruta).
1.2. Variables de entorno y de usuario
Las variables almacenan valores que podemos usar en los scripts.
- Definir variable temporal (solo en esa sesión):
1NOMBRE="Angel" 2echo "Hola $NOMBRE"Salida de Consola!: Hola Angel
- Hacerla disponible para procesos hijos:
1export NOMBRE
-
Algunas variables comunes:
$HOME→ Carpeta personal$USER→ Usuario actual$PWD→ Carpeta actual$PATH→ Directorios donde el shell busca comandos
🔥 Ejemplo práctico:
1#!/usr/bin/env bash 2# guardar como info.sh 3echo "Usuario: $USER" 4echo "Carpeta: $PWD" 5echo "Shell: $SHELL"Salida de Consola!: Usuario: Manuel Carpeta: /box/submission Shell: /bin/sh
Ejecuta:
1chmod +x info.sh 2./info.sh
1.3. Quoting: '', "", y escape \
Los quotes controlan cómo interpreta el shell el texto.
| Símbolo | Comportamiento |
|---|---|
'...' | Comillas simples: el texto se toma literal. |
"..." | Comillas dobles: permiten expansión de variables. |
\ | Escape: interpreta solo el carácter siguiente. |
📌 Ejemplo:
1NOMBRE="Angel" 2echo 'Hola $NOMBRE' # No expande la variable → Hola $NOMBRE 3echo "Hola $NOMBRE" # Sí expande → Hola Angel 4echo "Precio: \$50" # Muestra el símbolo $ → Precio: $50Salida de Consola!: Hola $NOMBRE Hola Angel Precio: $50
⚠️ Este tema es crítico al trabajar con datos externos (evita inyección de comandos).
1.4. Globbing: * ? [ ]
El globbing permite usar patrones para seleccionar archivos.
| Patrón | Significado |
|---|---|
* | Cualquier cadena (incluido vacío) |
? | Un solo carácter |
[abc] | Uno de esos caracteres |
[a-z] | Rango de caracteres |
📦 Ejemplo:
En una carpeta con:
a.txt b.txt c.log datos1.csv datos2.csv
Prueba:
1touch a.txt b.txt c.log datos1.csv datos2.csv menu.txt 2echo *.txt # a.txt b.txt 3echo datos?.csv # datos1.csv datos2.csv 4echo [ab].txt # a.txt b.txtSalida de Consola!: a.txt b.txt datos1.csv a.txt b.txt
1.5. Códigos de salida y operadores && ||
Cada comando devuelve un código de salida:
0→ Éxito- Distinto de 0 → Error
Se puede comprobar con $?:
1ls /etc2 2echo "Código de salida: $?"Salida de Consola!: Código de salida: 2
Uso con && y ||
comando1 && comando2→ Ejecutacomando2solo sicomando1fue exitoso.comando1 || comando2→ Ejecutacomando2solo sicomando1falló.
📌 Ejemplo:
1mkdir nueva && echo "Carpeta creada" 2ls inexistente || echo "El listado falló"Salida de Consola!: Carpeta creada El listado falló
🏋️♂️ Ejercicio práctico
Crea un script llamado resumen.sh que:
- Muestre el usuario y la carpeta actual.
- Cree (si no existe) una carpeta llamada
reportes. - Liste todos los archivos
.logde la carpeta actual. - Si hay al menos uno, muestre el mensaje: “Se encontraron logs”. Si no hay, muestre: “No se encontraron logs”.
💡 Pistas:
- Usa
mkdir -p reportespara crear solo si no existe. - Usa
ls *.logy&&/||para los mensajes.
1#!/usr/bin/env bash 2echo "Usuario: $(whoami)" 3echo "Carpeta actual: $(pwd)" 4 5echo "Creando carpeta reportes..." 6mkdir -p reportes 7 8echo "Buscando archivos .log..." 9 10ls *.log 2>/dev/null && echo "Se encontraron logs" || echo "No se encontraron logs"Salida de Consola!: Usuario: angel Carpeta actual: /home/angel/proyectos Creando carpeta reportes... No se encontraron logs
- Loading...