Мне нужно проверить пользовательские опции в моем скрипте bash, но эти опции не всегда будут предоставляться при вызове скрипта. Например, возможными параметрами могут быть -dontbuild -donttest -dontupdate в любой комбинации, есть ли способ проверить их? Извините, если этот вопрос является базовым, я новичок в сценарии bash.
Спасибо
РЕДАКТИРОВАТЬ: я попробовал этот кусок кода, и вызвал сценарий с параметром -disableVenusBld, но он по-прежнему выводит «Начиная сборку». Я делаю что-то неправильно? Заранее спасибо!
while [ $# -ne 0 ]
do
arg="$1"
case "$arg" in
-disableVenusBld)
disableVenusBld=true
;;
-disableCopperBld)
disableCopperBld=true
;;
-disableTest)
disableTest=true
;;
-disableUpdate)
disableUpdate=true
;;
*)
nothing="true"
;;
esac
shift
done
if [ "$disableVenusBld" != true ]; then
echo "Starting build"
fi
источник
shift
добавление дополнительного веса.for arg
на самом деле не работает в bash, вам нужно ссылаться на $ 1, $ 2 и т. д. Вам нужен сдвиг, чтобы на самом деле перебирать аргументы, и дополнительная переменная ARG должна быть в состоянии использовать сдвиг сразу, поэтому любые параметры в $ 1for arg
делает неявную итерацию,$@
так что это, безусловно , работает. Попробуй. Вы также можете сделать это явно сfor $arg in $@
. Не используяshift
вы можете оставить$@
нетронутыми.Где
do_something
представляет либо установление флага, либо фактическое выполнение чего-либо. Обратите внимание, чтоfor arg
неявно перебирает$@
(массив позиционных параметров) и эквивалентно явномуfor arg in $@
.Также обратите внимание, что Bash имеет встроенную функцию под названием,
getopts
но она принимает только короткие опции (например-x
). Есть также внешняя утилита,getopt
которая называется длинная, но имеет несколько недостатков и не рекомендуется.источник
do
который я исправил.