Fundamentos del shell
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. 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).
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
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).
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
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ó
6. 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
Resumen del tema
Conceptos clave #
- Variables de Entorno y Usuario: asignación directa (
VAR="valor"), exportación a procesos hijos (export VAR) y lectura de variables predefinidas ($USER,$HOME,$PWD,$PATH). - Mecanismos de Quoting:
- Comillas simples (
'...'): preservan el valor literal absoluto de cada carácter. - Comillas dobles (
"..."): permiten la expansión de variables ($VAR) y sustitución de comandos. - Barra invertida (
\): escape de caracteres especiales individuales.
- Comillas simples (
- Expansión de Rutas (Globbing): comodines
*(cualquier cadena),?(un carácter) y corchetes[...]para coincidencia de patrones en archivos. - Códigos de Salida (
$?) y Operadores Lógicos:0representa ejecución exitosa; encadenamiento condicional con&&(éxito) y||(fallo).
Qué debes recordar #
Las comillas dobles permiten expandir variables mientras que las simples preservan el texto literal; $? almacena el código de salida (0 = éxito) para encadenar con && y ||.