Несколько параметров для сценария bash

Мне нужно проверить параметры, предоставленные пользователем, в моем сценарии bash, но параметры не всегда будут предоставляться при вызове сценария. Например, возможные варианты могут быть -dontbuild -donttest -dontupdate в любой комбинации, есть ли способ проверить их? Извините, если этот вопрос является реальным, я новичок в создании сценариев bash.

благодаря

EDIT: Я попробовал этот фрагмент кода и назвал скрипт с параметром -disableVenusBld, но он все еще печатает «Starting build». Я делаю что-то неправильно? Заранее спасибо!

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 

2 Solutions collect form web for “Несколько параметров для сценария bash”

У Денниса была правильная идея, я бы предложил несколько небольших модов.

Доступ к сценариям оболочки можно получить с помощью позиционных параметров $ 1, $ 2, $ 3 и т. Д., А текущий счетчик – $ #. Классическая проверка для этого была бы:

 while [ $# -ne 0 ] do ARG="$1" shift # get rid of $1, we saved in ARG already case "$ARG" in -dontbuild) DONTBUILD=1 ;; -somethingwithaparam) SAVESOMEPARAM="$1" shift ;; # ... continue done 

Как говорит Деннис, если ваши требования вписываются в getopts, вам лучше использовать это.

 for arg do case "$arg" in -dontbuild) do_something ;; -donttest) do_something ;; -dontupdate) do_something ;; *) echo "Unknown argument" exit 1 ;; esac done 

Где do_something представляет либо установку флага, либо выполнение чего-либо. Обратите внимание, что for arg неявно выполняется итерация над $@ (массив позиционных параметров) и эквивалентна явному for arg in $@ .

Обратите также внимание на то, что Bash имеет встроенный getopts но он принимает только короткие варианты (например, -x ). Существует также внешняя утилита, называемая getopt которая принимает длинные варианты, но имеет несколько недостатков и не рекомендуется.

 options=":es:w:d:" OLDOPTIND=$OPTIND while getopts $options option do case $option in e ) do_something;; w ) do_something $OPTARG;; d ) foo=$OPTARG;; q ) do_something;; s ) case $OPTARG in m | M ) bar="abc";; s | S ) baz="def";; * ) echo "Invalid option for blah blah" 1>&2; exit;; esac;; * ) echo "Unimplemented option chosen.";; # DEFAULT esac OLDOPTIND=$OPTIND done 
  • Что означает «rc» в «.bashrc» и т. Д.?
  • Sudo chmod -R 777 /
  • Есть ли способ отображения таймера обратного отсчета или секундомера в терминале?
  • Поиск всех символических и жестких ссылок на файл в UNIX
  • Rm на cygwin, не может отменить связь не владельца
  • Вырезать - разделитель должен быть единственным символом
  • Что такое команда unix, чтобы узнать, какой исполняемый файл соответствует данной команде?
  • Как удалить все файлы, кроме одного в Unix?
  • В чем разница между bash и sh?
  • Как я могу найти историю bash и повторить команду?
  • Linux bash iterating и Break
  • Как выполнить команду при каждом изменении файла?
  • Interesting Posts

    Воспроизведение MIDI через виртуальное устройство?

    Как использовать одновременные подключения vpn через Windows 7 и привязывать их к конкретной программе?

    Как сказать rsync пропустить файлы на поврежденном блоке жесткого диска, а не застревать, пытаясь его прочитать

    Как протестировать источник питания?

    Не удается создать раздел или найти существующий при установке окон 8.1

    Переместить таблицу в стиле матрицы в 3 столбца в Excel

    Как сделать Outlook показанным непрочитанным подсчетом папки, включая ее подпапки?

    Как я могу изменить содержимое файла ISO?

    Получение этого простого регулярного выражения для соответствия в grep

    Где используются чипы Intel Itanium?

    Как я мог безопасно исправить мою ходячую ошибку «мертвого пикселя»?

    Переместить дом в раздел или изменить размер дома, чтобы он соответствовал разделу

    Как определить, какой пакет пива предоставляет данный файл?

    Не удалось загрузить мою ОС X после установки Windows 8

    Найти и заменить {0,} вхождения в Word

    Давайте будем гением компьютера.