Introducción
anteriormente hemos examinado cómo pasar argumentos de línea de comandos a un script bash. En este tutorial, echaremos un vistazo a cómo podemos usar estos argumentos dentro del script bash.,
más información:
cómo pasar argumentos de línea de comandos al Script Bash
cómo usar el comando cd en Scripts Bash
leer la salida de un comando en una matriz en Bash
procesar la entrada
echemos un vistazo a las diferentes maneras de procesar los argumentos pasados a un script bash dentro del script.
2.1. Parámetros posicionales
Los argumentos pasados a un script se procesan en el mismo orden en que se envían., La indexación de los argumentos comienza en uno, y se puede acceder al primer argumento dentro del script usando $1. Del mismo modo, se puede acceder al segundo argumento usando $2, y así sucesivamente. El parámetro posicional se refiere a esta representación de los argumentos usando su posición.
tomemos un ejemplo del siguiente script, userReg-positional-parameter.,sh, que imprime nombre de usuario, edad y nombre completo en ese orden:
echo "Username: $1";echo "Age: $2";echo "Full Name: $3";
ahora vamos a ejecutar este script con los tres parámetros de entrada:
sh userReg-positional-parameter.sh john 25 'John Smith'
la salida será:
Username : johnAge: 25Full Name: John Smith
2.2. Flags
el uso de flags es una forma común de pasar la entrada a un script. Al pasar la entrada al script, hay una bandera (generalmente una sola letra) que comienza con un guion ( – ) antes de cada argumento.
echemos un vistazo a la userReg-flags.sh script, que toma tres argumentos: username (-u), age (-a), y full name (- f).,
modificaremos el script anterior para usar banderas en lugar de depender de parámetros posicionales., La función getopts lee las banderas en la entrada, y OPTARG se refiere a los valores correspondientes:
vamos a ejecutar este script con la misma entrada que antes, solo que esta vez, agregaremos banderas a la entrada:
sh userReg-flags.sh -f 'John Smith' -a 25 -u john
la salida es la misma que antes, aunque hemos cambiado las posiciones de los argumentos nombre de usuario y nombre completo:
Username : johnAge: 25Full Name: John Smith
aquí estamos usando la función GETOPTS para analizar los indicadores proporcionados como entrada, y el bloque case para asignar el valor especificado a la variable correspondiente.
2.3., Construcción de bucle
los parámetros posicionales, aunque son convenientes en muchos casos, no se pueden usar cuando se desconoce el tamaño de entrada. El uso de una construcción de bucle es muy útil en estas situaciones.
la variable es la matriz de todos los parámetros de entrada. Usando esta variable dentro de un bucle for, podemos iterar sobre la entrada y procesar todos los argumentos pasados.
tomemos un ejemplo del script users-loop.,sh, que imprime todos los nombres de usuario que se han pasado como entrada:
i=1;for user in "" do echo "Username - $i: $user"; i=$((i + 1));done
ahora ejecutemos el script:
sh users-loop.sh john matt bill 'joe wicks' carol
y veremos nuestra salida:
Username - 1: johnUsername - 2: mattUsername - 3: billUsername - 4: joe wicksUsername - 5: carol
en el ejemplo anterior, estamos iterar la variable de usuario sobre toda la matriz de parámetros de entrada. Esta iteración comienza en el primer argumento de entrada, john, y se ejecuta hasta el último argumento, carol, aunque el tamaño de la entrada es Desconocido.
2.4., Shift Operator
Shift operator en bash (sintácticamente shift n, donde n es el número de posiciones a mover) cambia la posición de los argumentos de la línea de comandos. El valor predeterminado para n es uno si no se especifica.
el operador shift hace que la indexación de la entrada comience desde la posición Shift. En otras palabras, cuando este operador se utiliza en una entrada de matriz, el parámetro posicional $1 Cambia al argumento alcanzado desplazando n posiciones a la derecha desde el argumento actual vinculado al parámetro posicional $1.,
considere un script de ejemplo que determina si la entrada es impar o par:
sh parityCheck.sh 13 18 27 35 44 52 61 79 93
de la discusión anterior sobre el parámetro posicional, ahora sabemos que $1 se refiere al primer argumento, que es 13. El uso del operador shift con entrada 1 (shift 1) hace que la indexación comience desde el segundo argumento. Es decir, $1 Ahora se refiere al segundo argumento (18). De manera similar, llamar a shift 2 hará que la indexación comience desde el cuarto argumento (35).
echemos de nuevo un vistazo al ejemplo de script de usuarios discutido anteriormente., En lugar de usar la variable e iterar sobre ella, ahora usaremos el operador shift. La variable returns# devuelve el tamaño de entrada:
i=1;j=$#;while do echo "Username - $i: $1"; i=$((i + 1)); shift 1;done
vamos a ejecutar el script con la misma entrada que la anterior:
sh users-shift-operator.sh john matt bill 'joe wicks' carol
la salida será la misma que antes:
Username - 1: johnUsername - 2: mattUsername - 3: billUsername - 4: joe wicksUsername - 5: carol
en este ejemplo, estamos cambiando el parámetro posicional en cada iteración por uno hasta llegar al final de la entrada. Por lo tanto, $1 se refiere al siguiente elemento en la entrada cada vez.,
conclusión
en este artículo, analizamos cómo los argumentos pasados a un script bash durante el tiempo de ejecución se pueden procesar dentro del script de diferentes maneras:
- Los parámetros posicionales se pueden usar cuando el tamaño de entrada es fijo y se conoce el orden de los argumentos en la entrada.
- con flags, el orden de los argumentos en la entrada no importa.
- La construcción de bucle es útil cuando el tamaño de entrada es Desconocido.
- El operador Shift hace que la indexación comience desde el argumento en la posición desplazada.,
- La variable devuelve la matriz de parámetros de entrada, y $# devuelve el tamaño de la matriz de entrada.
Como siempre, los ejemplos utilizados en este artículo están disponibles en GitHub.