Моя проблема в том, что, когда я использую фрагменты ниже, скрипт забивает порядок, когда я не даю аргумент опции.Если я включаю аргументы, все хорошо, и я могу вводить опции в любом порядке.
Как я могу убедиться, что различные опции (-s и -f) правильно сопоставлены с их переменными, используя getopts?
Пожалуйста, смотрите пример ниже.
./script.bash -ftestfile -s0
search flag: 0
file: testfile
./script.bash -s0 -ftestfile
search flag: 0
file: testfile
Пока все хорошо ..
Проблема возникает, когда опция f не содержит аргумента (testfile в примерах).Кажется, getopts больше не может распознать, что -s должен быть inputsearch, а -f по-прежнему является inputfile.
./script.bash -f -s0
search flag:
file: -s0
Волшебство ниже
s=0
while getopts :s:f:ih option
do
case "${option}" in
s) inputsearch=${OPTARG};;
f) inputfile=${OPTARG};;
h) display_help; exit 1;;
?) display_help; exit 1;;
esac
done
# crap validation (must contain some option and option cant simply be "-" or "--"
if [ -z "$1" ] || [ "$1" = "-" ] || [ "$1" = "--" ]
then
display_help
exit 1
fi
#this fails
if [[ $inputsearch -gt 1 ]] || [[ -z $inputfile ]]
then
display_help
exit 1
else
echo "search flag: $inputsearch"
echo "file: $inputfile"
fi
Спасибо за ваш вклад!