Как запустить указанный код с помощью 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 / sched
  • При передаче аргументов в программы через переменные массива
  • Лучший способ убить процессы в списке
  • Как я могу связать poweroff с git push?
  • привязать последовательность клавиш к Escape, zsh
  • Zsh завершение команд hadoop
  • Липкие записи в истории оболочки
  • Почему `zip` в цикле for работает, когда файл существует, но не тогда, когда он этого не делает?
  • Портативный способ получить абсолютный путь скрипта?
  • как grep для пакетов на основе несжатого размера файла?
  • Zsh: расширение хэшированных имен каталогов в приглашении
  • Linux и Unix - лучшая ОС в мире.