El comando de shell y los argumentos a ese comando aparecerá como numeradas variables de shell: $0
tiene el valor de cadena del comando en sí, algo así como script
, ./script
, /home/user/bin/script
o lo que sea. Cualquier argumento aparecen como "$1"
, "$2"
, "$3"
y así sucesivamente. El recuento de argumentos está en la variable de shell "$#"
.
Las formas comunes de lidiar con esto implican comandos de shell getopts
y shift
. getopts
es muy parecido a la getopt()
función de biblioteca C. shift
mueve el valor de $2
to $1
, $3
to $2
, etc. $#
se decrementa Code termina mirando el valor de "$1"
, haciendo cosas usando un case
... esac
para decidir sobre una acción, y luego haciendo un shift
para pasar $1
al siguiente argumento. Solo tiene que examinarlo $1
, y tal vez $#
.
getopt()
es un estándar extremadamente establecido, pero elgetopt
ejecutable no es el mismo en la distribución / plataforma. Ahora soy ungetopts
usuario totalmente convertido , ya que es un estándar POSIX. Funciona muy biendash
también, que es mi shell de script preferidoPuede acceder a los argumentos pasados con
$n
dónden
está el número de argumento -1, 2, 3, ...
. Pasa los argumentos como lo haría con cualquier otro comando.fuente
También puede pasar la salida de un script de shell como argumento a otro script de shell.
Dentro de la secuencia de comandos de shell puede acceder a argumentos con números como
$1
para el primer argumento y$2
para el segundo argumento y así sucesivamente.Más sobre argumentos de shell
fuente
La forma
Es el más conveniente para
argv
. El delimitador arg es un espacio en blanco, pero se puede cambiar. No recuerdo cómo fuera de lugar. Luego usapara controlar el flujo. Por lo general, no abrazo getopts si
case ... esac
es suficiente.fuente
En un script bash, personalmente me gusta usar el siguiente script para establecer parámetros:
Con esta estructura, no confiamos en el orden de los parámetros, ya que estamos definiendo una letra clave para cada uno de ellos. Además, la función de ayuda se imprimirá todas las veces que los parámetros se definan incorrectamente. Es muy útil cuando tenemos muchos scripts con diferentes parámetros para manejar. Funciona de la siguiente manera:
fuente
myargument
se vuelve$1
adentromyscript
.fuente
En el script de shell; se convierte en el nombre de la variable $ 1. La segunda palabra se convierte en el nombre de la variable $ 2 y así sucesivamente.
Puede encontrar más en el manual de shell (sh) en http://heirloom.sourceforge.net/sh/sh.1.html
fuente
Si está familiarizado con Python argparse, y no le importa llamar a python para analizar argumentos bash, use bash argparse ( https://github.com/mattbryson/bash-arg-parse ),
Vea la misma respuesta aquí: https://stackoverflow.com/questions/7069682/how-to-get-arguments-with-flags-in-bash-script/50181287#50181287
fuente
fuente
2> /dev/null
, 2) no agrega nada a las respuestas existentes.