Cómo pasar argumentos a un Bash-Script

Cómo pasar argumentos a un Bash-Script

Cómo pasar argumentos a un Bash-Script

VALORACIÓN DEL ARTÍCULO:
5/5


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 $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 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
terminado

He 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.sh 

sh stats.sh 'songlist 3

Mé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 pdf

Bash 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
terminado

Se 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.

TAMBIÉN TE INTERESA

GeForce RTX Serie 50

GeForce RTX Serie 50: el futuro de las gráficas y de la IA ya está aquí

NVIDIA ha presentado sus GPUs GeForce RTX Serie 50 para ordenadores de sobremesa y portátiles. Con este lanzamiento, se abre una nueva era para el futuro de los dispositivos, los cuales estarán impulsados por la inteligencia artificial en todas sus variantes. Impulsadas por la arquitectura NVIDIA Blackwell, los núcleos Tensor de quinta generación y los núcleos

OnePlus 13

El móvil del año 2025 llega muy pronto: ya a la venta el OnePlus 13

Justo después de Reyes, OnePlus 13 salía el mercado europeo tras debutar en el asiático semanas atrás. Smartphone bestial donde los haya, muy equilibrado, potente y muy duradero. Eso sí, el precio supera los 1.000 euros. Pero es que puede ser el móvil del año. Seguramente la competencia mire con detalle todo lo que puede