Я хочу передать 3 параметра с getopts в свой скрипт оболочки. Скрипт требует, по крайней мере, первых 2, третий параметр является необязательным. Если он не установлен, используется его значение по умолчанию. Так что следующий будет как работа:Как передать в командной строке обязательные и необязательные флаги в командной строке с помощью getopts?
sh script.sh -a "/home/dir" -b 3
sh script.sh -a "/home/dir" -b 3 -c "String"
Я попытался сделать это как следующий, но она постоянно игнорирует мои введенные параметры.
usage() {
echo "Usage: Script -a <homedir> -b <threads> -c <string>"
echo "options:"
echo "-h show brief help"
1>&2; exit 1;
}
string="bla"
while getopts h?d:t:a: args; do
case $args in
-h|\?)
usage;
exit;;
-a) homedir=d;;
-b) threads=${OPTARG};;
-c) string=${OPTARG}
((string=="bla" || string=="blubb")) || usage;;
:)
echo "Missing option argument for -$OPTARG" >&2; exit 1;;
* )
echo "Unimplemented option: -$OPTARG" >&2; exit 1;;
esac
done
Я новичок в этом getopts, прежде чем я только что добавили параметры в определенном порядке, который я не хочу, чтобы сделать здесь. Я читал здесь много вопросов, но, к сожалению, не нашел его так, как мне это нужно.
Я действительно хотел бы помочь вам здесь. Спасибо :)
Вы посмотрели на значение '$ args' внутри цикла while? В учебнике [getops tutorial] (http://wiki.bash-hackers.org/howto/getopts_tutorial) есть хорошая информация; возможно, вам стоит сначала проверить их. – larsks