20.2.3. Указание значений опций с помощью команды getopts
20.2.3. Указание значений опций с помощью команды getopts
Иногда для сценариев требуется включение фактического значения одной из опций командной строки. При этом используется команда getopts. Все, что требуется для этого сделать, — вставить двоеточие после буквы опции параметра строка_параметров. Например:
getopts ahfvc: OPTION
Эта команда определяет передачу опций a, h, f, v без указания значений, но опция с должна иметь значение. После указании значения оно будет присвоено переменной OPTARG. Если попытаться передать данную опцию без этого значения, отобразится сообщение об ошибке. Стандартное сообщение об ошибке не является особо информативным, поэтому "подавите" его отображение и выполните следующее:
Укажите двоеточие перед параметром строка_параметров.
while getopts :ahfgvc: OPTION
Используйте оператор usage внутри конструкции case. При этом применяется символ ?, выполняющий функции перехвата ошибок.
case
?) # оператор usage
echo "`basename $0` -[a h f v] -[с value] file"
esac
Ниже представлен измененный сценарий getopt1:
$ pg getopt1
#!/bin/sh
#getopt1
# установка значений переменных
ALL=false
HELP=false
FILE=false
VERBOSE=false
COPIES=0 # значение опции -c равно нулю
while getopts :ahfgvc: OPTION do
case $OPTION in
a)ALL=true
echo "ALL is $ALL"
;;
h)HELP=true
echo "HELP is $HELP"
;;
f}FILE=true
echo "FILE is $FILE"
;;
v)VERBOSE=true
echo "VERBOSE" is $VERBOSE"
;;
C)COPIES=$OPTARG
echo "COPIES is $COPIES"
;;
?) # оператор usage
echo "`basename $0` —[ahfv] —[c value] file" >&2
;;
esac done
При выполнении указанного выше сценария с опцией -c, не содержащей значения, возникает ошибка. В этом случае отображается сообщение usage:
$ getopt1 -ah -с
ALL is true
HELP is true
getopt1 —[ahfv] -[c value] file
Теперь указываются все допустимые опции:
$ getopt1 -ah -с 3
ALL is true HELP is true COPIES is 3