Análisis de argumentos de la línea de comandos en Bash
- Análisis de parámetros posicionales en Bash
- Análisis de argumentos con banderas en Bash
- Análisis de argumentos con una construcción de bucle en Bash
-
Análisis de argumentos con
shift
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