Estoy confundido sobre cómo incluir argumentos / indicadores opcionales al escribir un script bash para el siguiente programa:
El programa requiere dos argumentos:
run_program --flag1 <value> --flag2 <value>
Sin embargo, hay varias banderas opcionales:
run_program --flag1 <value> --flag2 <value> --optflag1 <value> --optflag2 <value> --optflag3 <value> --optflag4 <value> --optflag5 <value>
Me gustaría ejecutar el script bash de modo que tome argumentos del usuario. Si los usuarios solo ingresan dos argumentos en orden, entonces sería:
#!/bin/sh
run_program --flag1 $1 --flag2 $2
Pero, ¿qué pasa si se incluye alguno de los argumentos opcionales? Yo pensaría que sería
if [ --optflag1 "$3" ]; then
run_program --flag1 $1 --flag2 $2 --optflag1 $3
fi
Pero, ¿qué pasa si se dan $ 4 pero no $ 3?
getopts
, ¿necesitaría especificar cada combinación de argumentos? 3 y 4, 3 y 5, 3 y 4 y 5, etc.
getopts
. Digamos que fuerzo a los usuarios a ejecutar el script con todos los argumentos: run_program.sh VAL VAL FALSE FALSE FALSE FALSE FALSE
que ejecuta el programa como program --flag1 VAL --flag2 VAL
. Si ejecutó run_program.sh VAL VAL FALSE 10 FALSE FALSE FALSE
, el programa se ejecutará como program --flag1 VAL --flag2 VAL --optflag2 10
. ¿Cómo puedes conseguir ese comportamiento getopts
?
getopts
es lo que quieres Sin eso, podría usar un bucle con una instrucción switch para detectar cada bandera, opcional o no.