En este artículo, veamos el uso de argumentos de línea de comando en el script Bash. Los argumentos son entradas necesarias para procesar el flujo. En lugar de obtener información de un programa shell o asignarla al programa, los argumentos se pasan en la parte de ejecución.
Parámetros posicionales
Los argumentos de la línea de comandos se pasan de forma posicional, es decir, de la misma forma en que se dan en la ejecución del programa. Veamos con un ejemplo.
Cree un programa shell que pueda mostrar los argumentos de la línea de comandos de forma posicional. El editor «Nano» se utiliza para crear el programa shell.
El programa se puede ejecutar usando el comando «sh».
sh <script filename> arg1 arg2 arg3 ......
Entonces, nuestro código de ejecución se convertirá en
sh displayPositionalArgument.sh Bienvenido a GeeksForGeeks
Representación esquemática del código anterior:
Siempre el primer argumento comienza después de <script filename>. <nombre de archivo de secuencia de comandos> estará en la ubicación 0. Necesitamos tomar argumentos posicionales después de <nombre de archivo de secuencia de comandos>. Por lo tanto, en el ejemplo anterior
$1-> "Welcome" $2-> "To" $3-> "GeeksForFeeks"
Nota : Podemos pasar n número de argumentos y se identifican por medio de su posición.
La salida del código anterior:
También se deben tener en cuenta algunas variables especiales al manejar los argumentos de la línea de comandos.
variable especial | Detalles de la variable especial |
---|---|
$1 … $n | Argumento posicional que indica desde 1 .. n. Si el argumento es como 10, 11 en adelante, debe indicarse como ${10},${11 |
$0 | Esto no se toma en la lista de argumentos ya que indica el «nombre» del programa shell. En el ejemplo anterior, $0 es «displayPositionalArgument.sh» |
ps | Valores de los argumentos que se pasan en el programa. Esto será de mucha ayuda si no estamos seguros de la cantidad de argumentos que se aprobaron. |
ps | Número total de argumentos y es un buen enfoque para los conceptos de bucle. |
ps | Para obtener todos los argumentos entre comillas dobles, podemos seguir de esta manera |
$$ | Para saber sobre la identificación del proceso del shell actual |
ps y $! | ID de estado de salida e ID de proceso del último comando |
Uso de banderas
Los argumentos se pueden pasar junto con las banderas. Los argumentos se pueden identificar con una sola letra que tiene – antes de eso. Una sola letra puede tener significado y aquí tomemos -1, -2 y -3.
Necesitamos usar la función getopts para leer las banderas en la entrada, y OPTARG se refiere a los valores correspondientes:
El programa anterior se puede ejecutar como
sh usando Banderas.sh -1 ‘GeeksForGeeks’ -2 ‘Programación Java’ -3 100
Producción
Uso de bucles con $@: construcciones de bucles
Aunque los parámetros posicionales ayudan a enviar como argumentos de línea de comandos, si hay más argumentos, no podemos contarlos ni usarlos. En cambio, usando $@, podemos lograrlo. No es más que la array de todos los parámetros pasados. Iterando sobre un ciclo for, podemos obtener eso.
Producción :
Otra forma es usando el operador Shift en lugar de $@ – Operador Shift:
La variable $# se usa para devolver el tamaño de entrada. Al usar eso y con el operador shift podemos lograr en lugar de $@
Producción:
Escenario de caso de uso general usando el operador Shift:
Suponga que en los argumentos del comando, podemos pasar el argumento «-d», que no es más que saber que es un directorio.
- Si se da -d, entonces debemos elegir el siguiente argumento y verificar si es un directorio como ese.
- Si no hay -d, compruebe si es un archivo o no
Luego muestre en consecuencia si el argumento es un directorio o un archivo
Deje que el nombre del script sea «shiftArgument.sh»
sh shiftArgument.sh -d /home shiftArgument.sh
Producción:
El código anterior verificará «/ home» como un directorio, ya que tenemos «-d» como el primer argumento posicional y, por lo tanto, se realiza el operador de cambio y se verifica el siguiente argumento para ver si es un directorio. Si no hay un argumento «-d» como el anterior, simplemente comprueba «si ese argumento es un archivo o no».
Conclusión
Podemos pasar argumentos de línea de comandos a nuestra conveniencia de forma posicional o con banderas. Además, están disponibles conceptos útiles como $@ (array de todos los parámetros), $# (mediante el cálculo del tamaño de entrada) y con eso, podemos iterar en los bucles «for» o «while», podemos acceder a los argumentos.
Publicación traducida automáticamente
Artículo escrito por priyarajtt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA