Análisis de argumentos de la línea de comandos en Bash

Fumbani Banda 30 enero 2023
  1. Análisis de parámetros posicionales en Bash
  2. Análisis de argumentos con banderas en Bash
  3. Análisis de argumentos con una construcción de bucle en Bash
  4. Análisis de argumentos con shift en Bash
Análisis de argumentos de la línea de comandos en Bash

Este tutorial demuestra cómo analizar los argumentos de la línea de comandos en un script bash como parámetros posicionales, utilizando indicadores, construcción de bucle y operador de cambio.

Análisis de parámetros posicionales en Bash

Se accede a los parámetros posicionales en el orden en que se pasan al script bash. Se accede al primer parámetro mediante $1, al segundo mediante $2, y así sucesivamente.

echo "I am $1";
echo  "And I live in $2";

Ejecute el script con dos argumentos posicionales:

bash positional_args.sh John USA

Producción :

I am John
And I live in USA

Análisis de argumentos con banderas en Bash

Una bandera comienza con un guion - antes de cada argumento. El orden de los argumentos no importa cuando se utilizan banderas.

En el siguiente script, getopts lee las banderas de la entrada y OPTARG las empareja con el valor correspondiente.

while getopts n:c: flag

do
    case "${flag}" in
          n) name=${OPTARG};;
          c) country=${OPTARG}
     esac
done
echo "I am $name";
echo  "And I live in $country";

Correr:

bash flags.sh -n fumbani  -c Malawi

Producción :

I am fumbani
And I live in Malawi

Análisis de argumentos con una construcción de bucle en Bash

La construcción de bucle es útil cuando el tamaño del argumento no se conoce de antemano. El $@ es una variable que contiene todos los parámetros de entrada. el bucle for itera sobre todos los argumentos y procesa cada argumento pasado.

i=1
for arg in "$@"
do
    printf "argument $i: $arg\n"
    i=$((i + 1 ))
done

Correr:

bash arguments_loop.sh USA Europe Africa Asia

Producción :

argument 1: USA
argument 2: Europe
argument 3: Africa
argument 4: Asia

Análisis de argumentos con shift en Bash

El operador shift hace que la indexación de los argumentos comience desde la posición cambiada. En nuestro caso, estamos cambiando los argumentos por 1 hasta llegar al final. $# Se refiere al tamaño de entrada y 1 se refiere al siguiente argumento cada vez.

i=1
max=$#
while (( $i <= $max ))
do
    printf "Argument $i: $1\n"
    i=$((i + 1 ))
    shift 1
done

Correr:

bash shift.sh one two three

Producción :

Argument 1: one
Argument 2: two
Argument 3: three
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub