Puede escribir un script de bash tal que reciba los argumentos especificados cuando se llama al script desde la línea de comandos. Este método se utiliza cuando un script tiene que realizar una función ligeramente diferente según los valores de los parámetros de entrada (los argumentos).
Por ejemplo, puede tener un script llamado "stats.sh" que realiza una operación particular en un archivo, como contar sus palabras. Si desea poder usar ese script en muchos archivos, es mejor pasar el nombre del archivo como argumento, de modo que pueda usar el mismo script para procesar todos los archivos. Por ejemplo, si el nombre del archivo a procesar es "lista de canciones", ingresará la siguiente línea de comando:
sh stats.sh lista de canciones
Se accede a los argumentos dentro de un script utilizando las variables $ 1, $ 2, $ 3, etc., donde $ 1 se refiere al primer argumento, $ 2 al segundo argumento, y así sucesivamente. Esto se ilustra en el siguiente ejemplo: ARCHIVO 1 = $ 1wc $ FILE1
Para facilitar la lectura, asigne una variable con un nombre descriptivo al valor del primer argumento ($ 1) y luego llame a la utilidad de conteo 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 usar un bucle for para procesar iterativamente cada uno, como se ilustra en el siguiente ejemplo: para el ARCHIVO1 en "$ @"hacerwc $ FILE1hecho
Este es un ejemplo de cómo llamar a este script con argumentos desde la línea de comando: sh stats.sh songlist1 songlist2 songlist3
Si un argumento tiene espacios, debe incluirlo entre comillas simples. Por ejemplo: sh stats.sh 'lista de canciones 1' 'lista de canciones 2' 'lista de canciones 3'
Con frecuencia, un script se escribe de manera tal que el usuario puede pasar argumentos en cualquier orden utilizando indicadores. 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 desea escribir su script para que pueda pasar estos parámetros cuando se llama al script. Podría verse así: makereport -u jsmith -p cuadernos -d 10-20-2011 -f pdf
Bash habilita esta funcionalidad con la función "getopts". Para el ejemplo anterior, podría usar getopts de la siguiente manera: mientras getopts u: d: p: f: opciónhacercaso "$ {opción}"enu) USUARIO = $ {OPTARG} ;;d) FECHA = $ {OPTARG} ;;p) PRODUCTO = $ {OPTARG} ;;f) FORMATO = $ OPTARG ;;esachecho
Este es un bucle while que utiliza la función "getopts" y la llamada "cadena de opciones", en este caso "u: d: p: f:", para iterar a través de los argumentos. El ciclo while recorre la cadena de opciones, que contiene los indicadores que se pueden utilizar para pasar argumentos, y asigna el valor de argumento proporcionado para ese indicador a la variable "opción". La declaración de caso luego asigna el valor de la variable "opción" a una variable global que puede usarse después de que se hayan leído todos los argumentos. Los dos puntos de la cadena de opciones significan que se requieren valores para las banderas correspondientes. En el ejemplo anterior, todas las banderas van seguidas de dos puntos: "u: d: p: f:". Esto significa que todas las banderas necesitan un valor. Si, por ejemplo, no se esperaba que las banderas "d" y "f" tuvieran un valor, la cadena de opciones sería "u: dp: f". Los dos puntos al comienzo de la cadena de caracteres, por ejemplo ": u: d: p: f:", tienen un significado completamente diferente. Le permite manejar banderas que no están representadas en el optstring. En ese caso, el valor de la variable "opción" se establece en "?" y el valor de "OPTARG" se establece en el indicador inesperado. El le permite mostrar un mensaje de error adecuado que informa al usuario del error. Los argumentos que no están precedidos por una bandera son ignorados por getopts. Si no se proporcionan los indicadores especificados en el optstring cuando se llama al script, no ocurre nada, a menos que usted maneje este caso especialmente en su código. Cualquier argumento que no sea manejado por getops todavía puede ser capturado con las variables regulares de $ 1, $ 2, etc.