Puede escribir un script de bash para que pueda recibir los argumentos especificados cuando se llama el script desde la línea de comandos. Este método se utiliza cuando un script tiene que realizar una función ligeramente diferente dependiendo de los valores de los parámetros de entrada (los argumentos).
Ejemplo de cómo pasar argumentos en un guión de bash
Digamos que tienes un script llamado stats.sh que cuenta las palabras de un archivo. Si desea poder usar ese script en muchos archivos, es mejor pasar el nombre del archivo como argumento para poder usar el mismo script para todos los archivos a procesar. Por ejemplo, si el nombre del archivo a procesar es songlist, deberá introducir la siguiente línea de comandos:
sh stats.sh songlist
Los argumentos son accedidos dentro de un script usando las variables $1, $2, $3, etc., donde $1 se refiere al primer argumento, $2 al segundo, y así sucesivamente. Esto se ilustra en el siguiente ejemplo:
FILE1=$1
wc $FILE1Para facilitar la lectura, asigne una variable con un nombre descriptivo al valor del primer argumento ($1), y luego llame a la utilidad de recuento de palabras (wc) en esta variable $FILE1.
Si tiene un número variable de argumentos, puede usar la variable $@, que es una matriz de todos los parámetros de entrada. Esto significa que puede utilizar un for-loop para procesar cada uno de ellos de forma iterativa, como se ilustra en el siguiente ejemplo:
para FILE1 en "$@"
>>>>Para FILE1 en "$@"
".do
wc $FILE1
terminadoHe aquí un ejemplo de cómo llamar a este script con argumentos desde la línea de comandos:
sh stats.sh songlist1 songlist2 songlist3
Si un argumento tiene espacios, debe encerrarlo con comillas simples. Por ejemplo:
pre>sh stats.sh 'songlist 1' 'songlist 2' 'songlist 3' 'songlist 3'
sh stats.sh 'songlist 1' 'songlist 2' 'songlist 3'sh stats.shsh stats.sh 'songlist 3Método de las banderas
Frecuentemente se escribe un script de tal manera que el usuario puede pasar argumentos en cualquier orden usando banderas. Con el método flags, también puede hacer que algunos de los argumentos sean opcionales.
Digamos que tiene un script que recupera información de una base de datos basada en parámetros específicos, como "nombre de usuario", "fecha" y "producto", y genera un informe en un "formato" específico. Ahora quieres escribir tu guión para que puedas pasar estos parámetros cuando el guión sea llamado. Podría parecerse a esto:
makereport -u jsmith -p cuadernos -d 10-20-2011 -f pdfBash permite esta funcionalidad con la función getopts. Para el ejemplo anterior, puede utilizar getopts de la siguiente manera:
mientras que getopts u:d:p:f: opción
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ido
caso "${opción}"
en
u) USER=${OPTARG};;
d) DATE=${OPTARG};;
p) PRODUCT=${OPTARG};;
f) FORMAT=$OPTARG;;
esac
terminadoSe trata de un bucle de tiempo que utiliza la función getopts y una llamada optstring, en este caso "u:d:p:f:"-para iterar a través de los argumentos. El bucle while-loop recorre el optstring, que contiene los indicadores que se pueden utilizar para pasar argumentos, y asigna a la variable "option" el valor del parámetro proporcionado para ese indicador. La case-statement entonces asigna el valor de la variable "option" a una variable global que puede ser usada después de que todos los argumentos hayan sido leídos.
Significado de los dos puntos
Los dos puntos en la cadena de caracteres significan que se requieren valores para los indicadores correspondientes. En el ejemplo anterior "u:d:p:f:" todas las banderas van seguidas de dos puntos. Esto significa que todos los indicadores necesitan un valor. Si, por ejemplo, no se esperaba que los indicadores "d" y "f" tuvieran un valor, "u:dp:f" sería la cadena de texto.
Los dos puntos al principio de la cadena (por ejemplo ":u:d:p:f:") tienen un significado completamente diferente. Le permite manejar banderas que no están representadas en la cadena de texto. En ese caso, el valor de la variable "option" se fija en "? y el valor de "OPTARG" se fija en el indicador inesperado. Esto le permite visualizar un mensaje de error adecuado que informa al usuario del error.
Los argumentos que no están precedidos por una bandera son ignorados por los getopts. Si las banderas especificadas en la optstring no se proporcionan cuando se llama el script, entonces no pasa nada, a menos que maneje especialmente este caso en su código. Cualquier argumento que no sea manejado por getops puede ser capturado con las variables regulares de $1, $2, etc.