Cómo pasar los argumentos de la línea de comandos en un script de shell

Cómo pasar los argumentos de la línea de comandos en un script de shell

Los scripts bash son archivos de texto simples que contienen una colección de comandos. Los scripts bash pueden ayudar con tareas administrativas, automatización de tareas y ejecutar múltiples comandos. Se utilizan para automatizar tareas/acciones recurrentes.

Podemos poner todos los comandos que se ejecutan en la terminal en un script bash y viceversa. Los scripts bash incluyen conceptos de programación imperativos como bucles, condicionales y funciones.

Los argumentos de línea de comandos son parámetros que se especifican con el nombre de archivo del script bash en el momento de la ejecución. Los argumentos de línea de comandos permiten que el script realice acciones dinámicas basadas en la entrada:

Cómo pasar un argumento a un script de shell

Para pasar un parámetro a un script bash, simplemente escríbelo después del nombre del script bash en el terminal:

./My-test-script.argumento sh  

Cómo pasar múltiples argumentos a shell script

También puede especificar múltiples argumentos separados por espacio junto con el nombre del archivo de script bash:

./My-test-script.sh arg_1 arg_2 arg_3 ... arg_n  

Podemos usar las variables predefinidas para recordar estos argumentos en el script bash. El primer argumento puede ser retirado por $ 1, el segundo por $ 2, etcétera. La variable predefinida "$ 0" se refiere al script bash en sí. La lista de algunas otras variables predefinidas importantes se da a continuación:

  • [correo electrónico protegido] : Valores de todos los argumentos
  • ps : Número total de argumentos
  • $$ : ID de proceso del shell actual

Ahora usaremos un archivo bash llamado animales.mierda como ejemplo.

#!/bin/bash echo "El animal en el primer recinto es: $ 1" Echo "El animal en el segundo recinto es: $ 2" Echo "El animal en el tercer recinto es: $ 3" ​​Echo "El número total de animales en el zoológico son: $#"echo" Los nombres de todos los animales son: $@"
1234567#!/bin/bash echo "El animal en el primer recinto es: $ 1" Echo "El animal en el segundo recinto es: $ 2" Echo "El animal en el tercer recinto es: $ 3" ​​Echo "El número total de animales en el zoológico son: $#"echo" Los nombres de todos los animales son: [correo electrónico protegido] "

Ahora ejecutaremos este script en el terminal:

Cómo pasar un argumento que contiene espacio

Si un argumento consiste en múltiples palabras que están separadas por el espacio, entonces necesitamos encerrarlo en citas individuales para pasarlo como un solo argumento:

#!/bin/bash echo "Mi nombre es: $ 1"
123#!/bin/bash echo "Mi nombre es: $ 1"

Cómo aprobar argumentos con caracteres especiales

También podemos aprobar caracteres especiales como argumentos. Pero necesitan ser escritos con barras de chaqueta ante ellos.

#!/bin/bash echo "¿Cuánto dinero gastó hoy: $ 1"
123#!/bin/bash echo "¿Cuánto dinero gastó hoy: $ 1"

Pasar argumentos usando banderas y opciones en shell script

Usar banderas y opciones es otra forma común de dar información a un script bash. Una opción siempre es seguida por un valor, mientras que las banderas no son seguidas por ningún valor.

Primero, haremos un nuevo script bash que tome dos argumentos diferentes (opciones) I.mi. -N/-Nombre por nombre, y -I/-ID Para un número de identificación.

#!/bin/bash args = $ (getopt -a --options n: i: --long "Nombre:, id:" -"$@") Ev set -"$ args" mientras es verdadero; Do Case "$ 1" en -n |--name) name = "$ 2" echo "Nombre: $ Nombre" Shift 2 ;; -i | --id) identificación = "$ 2" echo "id: $ identificación" turno 2 ;; --) romper;; ESAC hecho
1234567891011121314151617181920#!/bin/bash args = $ (getopt -a --options n: i: -long "name :, id:" -"[correo electrónico protegido]") Ev set -"$ args" mientras es verdadero; Do Case "$ 1" en -n |--name) name = "$ 2" echo "Nombre: $ Nombre" Shift 2 ;; -i | --id) identificación = "$ 2" echo "id: $ identificación" turno 2 ;; --) romper;; esacdone

En el código dado anteriormente primero, creamos una variable que almacena todos los nombres cortos y largos de nuestras opciones. En la segunda línea, evaluamos el Argumentos variable. Luego usamos un bucle de tiempo para asignar un bloque de código a cada opción.

En el código anterior, el cambio se usa para omitir los valores de las variables. El dígito que sigue el cambio define cuántas variables se omiten.

Similarmente

Ahora agregaremos un -V bandera que imprime un menú detallado:

#!/bin/bash args = $ (getopt -a --options n: i: v -long "name :, id :, verbose" -"$@") evalúa -"$ args" mientras es verdadero; Do Case "$ 1" en -n |--name) name = "$ 2" echo "Nombre: $ Nombre" Shift 2 ;; -i | --id) identificación = "$ 2" echo "id: $ identificación" turno 2 ;; -v | --verbose) echo "Por favor use -n/-nombre o -i/-id para aprobar el nombre o el número de identificación respectivamente" ruptura ;; --) romper;; ESAC hecho
1234567891011121314151617181920212223#!/bin/bash args = $ (getopt -a --options n: i: v --nong "Nombre :, id :, verbose" -"[correo electrónico protegido]") evalúa -"$ args" mientras verdadero ; Do Case "$ 1" en -n |--name) name = "$ 2" echo "Nombre: $ Nombre" Shift 2 ;; -i | --id) identificación = "$ 2" echo "id: $ identificación" turno 2 ;; -v | --verbose) echo "Por favor use -n/-nombre o -i/-id para aprobar el nombre o el número de identificación respectivamente" ruptura ;; --) romper;; esacdone

Las banderas no son seguidas por un colon cuando se definen en un script bash porque no toman ningún argumento con ellas a diferencia de las opciones e.gramo. el -norte La opción toma un nombre con él como Rahul.

Conclusión

Un operador humano que realiza tareas recurrentes manualmente es muy ineficiente. Entonces, tales tareas deben automatizarse. Los guiones pueden ayudarnos a hacer eso.

En este artículo, hemos aprendido a pasar los argumentos a través de la línea de comando a un script bash. Los argumentos de línea de comandos nos ayudan a escribir scripts dinámicos que realizan diferentes funciones dependiendo de la entrada.

Además, también discutimos diferentes tipos de argumentos. También tocamos un poco en variables predefinidas.