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 comando
  • shift → “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

⚠️ getopts no 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:

  • -c o --create → crea un backup de la carpeta actual en backup.tar.gz
  • -r o --restore → restaura el backup (descomprime el archivo)
  • -h o --help → muestra el uso

🏋️‍♂️ Ejercicio práctico 2

Crea un script llamado reporter.sh que:

  1. Use -u <usuario> para filtrar procesos de un usuario.
  2. Use -o <archivo> para guardar el reporte.
  3. Si no se pasa -o, el reporte se muestra en pantalla.
  4. Incluya -h para mostrar ayuda.

✅ Buenas prácticas

  1. ✅ Siempre ofrece -h o --help para mostrar el uso.
  2. ✅ Verifica que se han pasado los argumentos requeridos.
  3. ✅ Usa mensajes claros en caso de error.
  4. ✅ Si el script es grande, define las funciones primero y el parsing al final.
  • Loading...