Curso de Shell Scripting
Un buen script debe aceptar argumentos y opciones para que el usuario lo controle desde la terminal, igual que hacen los programas que ya conoces (ls -l, grep -i, etc.).
7.1. Tipos de parámetros
- Posicionales: se accede a ellos por posición (
$1,$2…). - Opciones cortas: comienzan con
-(ej.:-h). - Opciones largas: comienzan con
--(ej.:--help).
▸ Argumentos posicionales
Se obtienen directamente con $1, $2, etc.
1#!/usr/bin/env bash 2 3NOMBRE=$1 4EDAD=$2 5 6echo "Hola $NOMBRE, tienes $EDAD años"
Ejecuta:
1./script.sh Ana 30
Salida:
Hola Ana, tienes 30 años
Variables especiales
$0→ nombre del script$#→ número de argumentos$@→ todos los argumentos$?→ código de salida del último comandoshift→ “desplaza” los argumentos, descartando el primero
7.2. Parsing manual de argumentos
Podemos usar un bucle para leer cada argumento:
1#!/usr/bin/env bash 2 3while [[ $# -gt 0 ]]; do 4 case $1 in 5 -h|--help) 6 echo "Uso: $0 [-h] [--version]" 7 exit 0 8 ;; 9 --version) 10 echo "Versión 1.0" 11 exit 0 12 ;; 13 *) 14 echo "Argumento desconocido: $1" 15 exit 1 16 ;; 17 esac 18 shift 19done
Ejecuta:
1./script.sh --version 2./script.sh -h
7.3. getopts (opciones cortas)
getopts es la forma más sencilla y portátil para leer opciones cortas (-a, -b, …).
1#!/usr/bin/env bash 2 3while getopts "hv" opcion; do 4 case $opcion in 5 h) echo "Uso: $0 [-h] [-v]"; exit 0 ;; 6 v) echo "Versión 1.0"; exit 0 ;; 7 *) echo "Opción inválida"; exit 1 ;; 8 esac 9done
Ejecuta:
1./script.sh -h 2./script.sh -v
⚠️
getoptsno soporta opciones largas (--help).
7.4. getopt GNU (opciones largas)
Para scripts en sistemas Linux con GNU, podemos usar getopt para soportar opciones cortas y largas.
1#!/usr/bin/env bash 2 3OPCIONES=$(getopt -o hvn: -l help,version,nombre: -- "$@") 4eval set -- "$OPCIONES" 5 6while true; do 7 case $1 in 8 -h|--help) 9 echo "Uso: $0 [--nombre <NOMBRE>] [-v]" 10 shift ;; 11 -v|--version) 12 echo "Versión 1.0" 13 shift ;; 14 -n|--nombre) 15 NOMBRE=$2 16 echo "Hola $NOMBRE" 17 shift 2 ;; 18 --) 19 shift 20 break ;; 21 *) 22 echo "Opción desconocida $1" 23 exit 1 ;; 24 esac 25done
Ejecuta:
1./script.sh --nombre Ana 2./script.sh -v 3./script.sh --help
7.5. Combinando opciones y argumentos posicionales
Un script real puede necesitar ambos.
Ejemplo:
1#!/usr/bin/env bash 2 3VERBOSE=false 4 5while getopts "v" opcion; do 6 case $opcion in 7 v) VERBOSE=true ;; 8 esac 9done 10shift $((OPTIND-1)) 11 12ARCHIVO=$1 13 14if $VERBOSE; then 15 echo "Procesando archivo: $ARCHIVO" 16fi
Ejecución:
1./script.sh -v datos.txt
Salida:
Procesando archivo: datos.txt
🏋️♂️ Ejercicio práctico 1
Crea un script llamado gestor_backup.sh que acepte:
-co--create→ crea un backup de la carpeta actual enbackup.tar.gz-ro--restore→ restaura el backup (descomprime el archivo)-ho--help→ muestra el uso
🏋️♂️ Ejercicio práctico 2
Crea un script llamado reporter.sh que:
- Use
-u <usuario>para filtrar procesos de un usuario. - Use
-o <archivo>para guardar el reporte. - Si no se pasa
-o, el reporte se muestra en pantalla. - Incluya
-hpara mostrar ayuda.
✅ Buenas prácticas
- ✅ Siempre ofrece
-ho--helppara mostrar el uso. - ✅ Verifica que se han pasado los argumentos requeridos.
- ✅ Usa mensajes claros en caso de error.
- ✅ Si el script es grande, define las funciones primero y el parsing al final.
- Loading...