Getopts по умолчанию case bash скрипт - PullRequest
0 голосов
/ 30 мая 2019

Я хочу использовать getopts, но регистр по умолчанию не работает.

Код, который я пробовал:

while getopts "sdp" arg; do
case "$arg" in
s) 
    echo "1" 
;;
p)
    echo "2" 
;;
d) 
   echo "3" 
;;
*) 
   echo "default"
;;
esac

при запуске процесса: ./myTask

Я не получил никакого вывода

Ответы [ 2 ]

2 голосов
/ 31 мая 2019

Работает как задумано.

Случай по умолчанию не для обработки случая, когда у вас нет аргументов, а для случая, когда вы предоставляете недопустимые аргументы:

$ ./myTest -X
./myTest: illegal option -- X
default

Обычнов этом случае вы бы написали сообщение об использовании.

0 голосов
/ 31 мая 2019

Это значение по умолчанию для оператора case, но оно означает что-то конкретное в контексте getopts: у вас есть определенный параметр, но нет условия для его обработки.

Если вы, например, запустите ./myTask -z, вы увидите вывод «default» в виде @that_other_guy в другом ответе.

Если вы хотите вывести что-то, что указывает на то, что опция не была предоставлена:

Затем после блока while getopts, но перед строкой shift $(($OPTIND - 1)), сделайте это (с любой обработкой, которую вы хотите внутриблок if:

if ((OPTIND == 1))
then
    echo "No options specified"
fi

Обратите внимание, что это не означает, что аргументы не были указаны (например, ./myTask как в вашем вопросе). Чтобы сделать что-то с этим, добавьтеэто после строки shift:

if (($# == 0))
then
    echo "No positional arguments specified"
fi

См. справочную реализацию функции getopts в моем ответе здесь .

...