Я запутался, как включить необязательные аргументы / флаги при написании сценария bash для следующей программы:
Программа требует двух аргументов:
run_program --flag1 <value> --flag2 <value>
Однако есть несколько необязательных флагов:
run_program --flag1 <value> --flag2 <value> --optflag1 <value> --optflag2 <value> --optflag3 <value> --optflag4 <value> --optflag5 <value>
Я хотел бы запустить скрипт bash таким образом, чтобы он принимал пользовательские аргументы. Если пользователи вводят только два аргумента в порядке, то это будет:
#!/bin/sh
run_program --flag1 $1 --flag2 $2
Но что, если какие-либо необязательные аргументы включены? Я думаю, что это будет
if [ --optflag1 "$3" ]; then
run_program --flag1 $1 --flag2 $2 --optflag1 $3
fi
Но что, если дается 4 доллара, а не 3?
getopts
, мне нужно будет указать каждую комбинацию аргументов? 3 и 4, 3 и 5, 3 и 4 и 5 и т. Д.?
getopts
. Допустим, я заставляю пользователей запускать скрипт со всеми аргументами: run_program.sh VAL VAL FALSE FALSE FALSE FALSE FALSE
который запускает программу как program --flag1 VAL --flag2 VAL
. Если вы запустили run_program.sh VAL VAL FALSE 10 FALSE FALSE FALSE
, программа запустится как program --flag1 VAL --flag2 VAL --optflag2 10
. Как вы можете получить такое поведение с getopts
?
getopts
это то, что вы хотите. Без этого вы можете использовать цикл с оператором switch для определения каждого флага, необязательного или нет.