Оператор case в сценарии bash не работает. Ниже приведен фрагмент моего сценария оболочки.
usage="Usage: \n servicer [ service argument ] {-h}\n"
invalid="\n not a valid option\n"
argument="\n Please use -h option for help\n"
while getopts ":h:s" option
do
case "${option}" in
s ) service=$OPTARG;;
h ) echo -e $usage
exit 0
;;
* ) echo -e $invalid
exit 1
;;
esac
done
Поэтому всякий раз, когда я запускаю свой скрипт с опцией -h или -s, поток переходит к последней опции *.
В man getops
страница не самое легкое чтение. Я уверен, что хочешь getopts "hs:"
. Двоеточие представляет собой параметр-аргумент (значение параметра) для предыдущей опции (буква).
В h
не требует параметра, поэтому двоеточие (:).
В s
требует параметра, следовательно s:
. s
без параметра также недопустимо, поскольку аргумент требуется двоеточием.
Все остальное неверно.
Я бы также поместил ваши статические строки (usage=, invalid=, argument=
) в одинарных кавычках и заключите выходные данные в двойные кавычки.
usage='Usage: \n servicer [ service argument ] {-h}\n'
invalid='\n not a valid option\n'
argument='\n Please use -h option for help\n'
while getopts "hs:" option; do
case "${option}" in
s) service="$OPTARG"
;;
h) echo -e "$usage"
exit 0
;;
*) echo -e "$invalid"
exit 1
;;
esac
done