RHEL6 getopts не работает
У меня есть новая машина RHEL6, и я пытаюсь запустить скрипт для генерации некоторого вывода. Скрипт использует getopts, которые я никогда не использовал в прошлом. Это должно было работать на других машинах, но я впервые пробую это. Ниже начало сценария. Что-то не так с синтаксисом? Когда я пытаюсь вывести переменные, он ничего не отображает:
#! /bin/sh
while getopts "h:u:g:o:e:y:bf" c
do
case "$c" in
u) USER=$OPTARG;;
g) GROUP=$OPTARG;;
o) OUT=$OPTARG;;
b) BATCH=1;;
f) FORCE=1;;
h) FQDN=$OPTARG;;
e) ENTITYID=$OPTARG;;
y) YEARS=$OPTARG;;
\?) echo "keygen [-o output directory (default .)] [-u username to own keypair] [-g owning groupname] [-h hostname for cert] [-y years to issue cert] [-e entityID to embed in cert]"
exit 1;;
esac
done
echo $FQDN
Эхо отображает пустую строку.
1 ответ
Вы не можете использовать знак вопроса с bash getopts
(вы также не можете использовать двоеточие). В случае знака вопроса, getopts
устанавливает значение аргумента ($c
в вашем случае) до вопросительного знака, когда встречается конец опций. Он также использует вопросительный знак и двоеточие в качестве значения имени аргумента при возникновении ошибки (в частности,? Используется, когда встречается недопустимая опция или когда используется режим без вывода сообщений и обязательная опция не указана; двоеточие используется в режиме без вывода сообщений). режим, когда обязательная опция не указана). В этих случаях ошибки OPTARG содержит ошибочный аргумент. Так работает POSIX getopts.
Getopts KSH ведет себя по-разному, но это также исключает ? :
(так же как - [ ]
и только позволяя #
как первый вариант). Тем не менее, он показывает сообщение об использовании, когда вы предоставляете -?
, В основном, не используйте -? с оболочкой гетопц.:)
Обычно я пишу небольшую функцию под названием "использование" и вызываю ее как из *)
и проверяя $?
сразу после оператора case для ненулевого значения.