Intereting Posts
Какие дополнительные привилегии у пользователя root есть у стандартного пользователя? Преобразование жесткой ссылки в символическую ссылку wacom pen & touch cth-460 на debian Откройте вкладку URxvt со сдвигом вниз, а не ctrl-t Автоматически обновлять билеты на kerberos на экране GNU поиск файлов с несколькими строками (все включено, а не один или другой) и номера строк печати Зачем нам нужно два дескриптора файла при создании неназванного канала? Почему экран GNU / byobu оставляет текст мусора в оболочке во время обратного поиска? Sabayon 16 – сервер MySQL не может запускаться Безопасен ли «yum -y install»? Есть ли способ кэшировать последний IP-адрес, назначенный на DHCP-клиентах, и использовать его, если DHCP-сервер не работает? Загрузка X ресурсов из .Xresources и .Xdefaults для Emacs Настройте беспроводной адаптер USB при подключении к сети Как правильно проверить отравление кэша арп локально Как отключить внутреннюю клавиатуру на Fedora 26 (Wayland)?

Как запустить указанный код с помощью getopts, когда параметры или аргументы не заданы?

Поэтому я пишу скрипт, который смешивает параметры с аргументами с параметрами, которые этого не делают. Из исследования я обнаружил, что getopts – лучший способ сделать это, и до сих пор было просто выяснить и настроить. Проблема, с которой я столкнулась, заключается в том, как установить это, чтобы при отсутствии параметров или аргументов для запуска отдельного набора команд. Это то, что у меня есть:

while getopts ":n:h" opt; do case $opt in n) CODEBLOCK >&2 ;; h) echo "script [-h - help] [-n <node> - runs commands on specified node]" >&2 exit 1 ;; \?) echo "Invalid option: -$OPTARG" >&2 exit 1 ;; :) echo "Option -$OPTARG requires an argument." >&2 exit 1 ;; esac done 

Я попытался добавить что-то вроде этого в начало кода, чтобы не находить аргументов, но затем он запускает тот же код, даже когда поставляются параметры и аргументы (что-то, вероятно, неверно в моем синтаксисе здесь):

 [[ -n "$1" ]] || { CODEBLOCK1 } while getopts ":n:h" opt; do case $opt in n) CODEBLOCK2 >&2 ;; h) echo "script [-h - help] [-n <node> - runs commands on specified node]" >&2 exit 1 ;; \?) echo "Invalid option: -$OPTARG" >&2 exit 1 ;; :) echo "Option -$OPTARG requires an argument." >&2 exit 1 ;; esac done 

Страница man для getopts была скудна, и я нашел относительно немного примеров в поисках, которые дают представление о getopts, не говоря уже о всех его особенностях.

Вы можете использовать любое из следующих действий для запуска команд, когда $1 пуст:

 [[ ! $1 ]] && { COMMANDS; } [[ $1 ]] || { COMMANDS; } [[ -z $1 ]] && { COMMANDS; } [[ -n $1 ]] || { COMMANDS; } 

Кроме того, вам не нужно указывать расширение в этом конкретном примере, поскольку расщепление слов не выполняется.

Если вы хотите проверить, есть ли аргументы, лучше использовать (( $# )) .

Если я понял ваши намерения, вот как ваш код может быть написан с помощью getopts :

 #!/bin/bash (( $# )) || printf '%s\n' 'No arguments' while getopts ':n:h' opt; do case "$opt" in n) [[ $OPTARG ]] && printf '%s\n' "Commands were run, option $OPTARG, so let's do what that says." [[ ! $OPTARG ]] && printf '%s\n' "Commands were run, there was no option, so let's run some stuff." ;; h) printf '%s\n' 'Help printed' ;; *) printf '%s\n' "I don't know what that argument is!" ;; esac done