Проверка на наличие взаимоисключающих аргументов
У меня есть простой скрипт (ниже), который имеет взаимоисключающие аргументы.
Аргументы для сценария должны быть ./scriptname.sh -m|-d [-n]
Однако пользователь может запустить скрипт с ./scriptname.sh -m -d
что неправильно.
Вопрос: как я могу обеспечить, чтобы пользователь предоставил только один из взаимоисключающих аргументов?
#!/bin/bash
progname=$0
function usage () {
cat <<EOF
Usage: $progname -m|-d [-n]
where:
-m create minimal box
-d create desktop box
-n perform headless build
EOF
exit 0
}
headless='false'
buildtype=''
while getopts 'mdnh' flag; do
case "${flag}" in
m) buildtype='minimal' ;;
d) buildtype='desktop' ;;
n) headless='true' ;;
h) usage ;;
\?) usage ;;
*) usage ;;
esac
done
if [ "$buildtype" == "" ];
then
usage
exit
fi
1 ответ
Решение
Я могу придумать 2 способа:
Принять вариант как -t <argument>
Где аргумент может быть desktop
или же minimal
Так что ваш скрипт будет называться как:
./scriptname.sh -t desktop -n
ИЛИ ЖЕ
./scriptname.sh -t minimal -n
Другой альтернативой является принудительная проверка в вашем скрипте:
headless='false'
buildtype=''
while getopts 'mdnh' flag; do
case "${flag}" in
m) [[ -n "$buildtype" ]] && usage || buildtype='minimal' ;;
d) [[ -n "$buildtype" ]] && usage || buildtype='desktop' ;;
n) headless='true' ;;
h) usage ;;
\?) usage ;;
*) usage ;;
esac
done