Как запустить указанный код с помощью 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, не говоря уже о всех его особенностях.

One Solution collect form web for “Как запустить указанный код с помощью 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 
  • Формат запроса zsh в соответствии со значением переменной среды
  • Как научить zsh, если не сделать autocorrect?
  • Как вы управляете своими псевдонимами bash / zsh?
  • Каков zsh способ чтения n символов из stdin?
  • Список завершения автозапуска Zsh в файл или меньше
  • Экран: текущий каталог в заголовке (не как заголовок)
  • Кластеризация идентичных файлов, игнорирующих пробелы и разрывы строк
  • Как определить, работает ли программа при запуске оболочки и запустить эту программу, если она еще не запущена?
  • Как получить доступ к fpath пользователя, в отличие от fpath системы со сценарием?
  • Вставка имеет нечетное поведение в оболочке
  • Как изменяется подсказка о подоболочке
  • Interesting Posts

    Изменение интернет-канала при ошибке

    Как вы помните последний (n-й?) Переданный аргумент предыдущей команды, которую вы использовали с bash?

    Где я могу найти файл журнала firefox?

    Почему оператор printf в этом цикле выводит массив из последовательности?

    Как найти все файлы в папке, содержащей совпадение регулярного выражения в имени файла?

    Борьба с поиском

    Цвет PS1 на основе предыдущего выходного файла

    Где значения параметров устройства, начинающиеся с «Monitor-xyz», происходят из xorg.conf?

    Где официальный источник udev и другие данные разработчика?

    Почему я не могу создать «hardlink» для файла из каталога «mount -bind» в той же файловой системе?

    Установите заголовки linux 4.12 на Kali 2017.2

    Беспроводное сканирование с помощью HP Envy 5530

    Вывод gzip трубы для передачи Bluetooth?

    Команда Unix bash Sed Комбинация по одному файлу

    Попытка сортировать два списка чисел и использовать uniq для получения пересечения

    Linux и Unix - лучшая ОС в мире.