Estou confuso sobre como incluir argumentos / sinalizadores opcionais ao escrever um script bash para o seguinte programa:
O programa requer dois argumentos:
run_program --flag1 <value> --flag2 <value>
No entanto, existem vários sinalizadores opcionais:
run_program --flag1 <value> --flag2 <value> --optflag1 <value> --optflag2 <value> --optflag3 <value> --optflag4 <value> --optflag5 <value>
Eu gostaria de executar o script bash de forma que ele receba argumentos do usuário. Se os usuários digitarem apenas dois argumentos em ordem, seria:
#!/bin/sh
run_program --flag1 $1 --flag2 $2
Mas e se algum dos argumentos opcionais for incluído? Eu pensaria que seria
if [ --optflag1 "$3" ]; then
run_program --flag1 $1 --flag2 $2 --optflag1 $3
fi
Mas e se $ 4 forem dados, mas não $ 3?
getopts
, eu precisaria especificar cada combinação de argumentos? 3 e 4, 3 e 5, 3 e 4 e 5, etc.?
getopts
. Digamos que eu force os usuários a executar o script com todos os argumentos: run_program.sh VAL VAL FALSE FALSE FALSE FALSE FALSE
que executa o programa como program --flag1 VAL --flag2 VAL
. Se você executou run_program.sh VAL VAL FALSE 10 FALSE FALSE FALSE
, o programa seria executado como program --flag1 VAL --flag2 VAL --optflag2 10
. Como você pode obter esse comportamento getopts
?
getopts
é o que você quer. Sem isso, você pode usar um loop com uma instrução switch para detectar cada sinalizador, opcional ou não.