Я пишу bash-скрипт, разбирая параметры с помощью getopts, например:
#!/bin/bash
while getopts ab: ; do
case $opt in
a) AOPT=1
;;
b) BOPT=$OPTARG
;;
esac
done
Я бы хотел, чтобы опция "-b" ОБЯЗАТЕЛЬНО принимала аргумент, но пока что getopts жалуется, если аргумент не передан. Как я могу этого добиться?
Спасибо!
Вы можете запускать getopts в автоматическом режиме, включив двоеточие в качестве первого символа optstring. Это можно использовать для подавления сообщения об ошибке.
Из справочной страницы getopts:
If the first character of optstring is a colon, the shell variable specified
by name shall be set to the colon character and the shell variable OPTARG shall
be set to the option character found.
Таким образом, у вас может сработать что-то вроде следующего:
#!/bin/bash
AOPT="unassigned"
BOPT="unassigned"
while getopts :ab: opt ; do
case $opt in
a) AOPT=1
;;
b) BOPT=$OPTARG
;;
:) BOPT=
;;
esac
done
echo "AOPT = $AOPT"
echo "BOPT = $BOPT"
Некоторые примеры:
rlduffy@hickory:~/test/getopts$ ./testgetopts -a -b Hello
AOPT = 1
BOPT = Hello
rlduffy@hickory:~/test/getopts$ ./testgetopts -b goodbye
AOPT = unassigned
BOPT = goodbye
rlduffy@hickory:~/test/getopts$ ./testgetopts -a -b
AOPT = 1
BOPT =