Мене бентежить як включити необов'язкові аргументи / прапорці під час написання 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
це те, що ти хочеш. Без цього ви можете використовувати цикл з оператором перемикання для виявлення кожного прапора, необов'язкового чи ні.