Запись сценария оболочки рыбы с дополнительным аргументом

У меня есть сценарий оболочки рыбы, чье поведение по умолчанию состоит в том, чтобы послать электронное письмо, когда завершенный. Я хотел бы изменить его для ответа на a nomail аргумент от командной строки. Так, например, запущение скрипта обычно производило бы электронное письмо:

michaelmichael: ~/bin/myscript

Но, если выполнено с nomail переключатель, это не отправило бы электронное письмо с подтверждением:

michaelmichael: ~/bin/myscript nomail

Если я запускаю скрипт с nomail аргумент, это хорошо работает. Без nomail, $argv не определено, и это бросает ошибку. Я обыскивал документацию оболочки рыбы, но, может казаться, не нахожу ничего, что будет работать. Вот то, что я имею до сих пор

switch $argv
  case nomail
    ## Perform normal script functions
  case ???
    ## Perform normal script functions
    mailx -s "Script Done!"
end

Выполнение этого бросает следующую ошибку:

switch: Expected exactly one argument, got 0

Очевидно, это ожидает аргумент, я просто не знаю синтаксис для сообщения этого не принять аргументы или тот, если это существует.

Я предполагаю, что это является довольно основным, но я просто не понимаю оболочку, пишущую сценарий очень хорошо.

12
задан Barett 14 July 2015 в 05:53
поделиться

1 ответ

Оберните оператор switch следующим образом:

if set -q argv
    ...
end

Кроме того, я думаю, что ваш случай по умолчанию должен быть case '*' .

10
ответ дан 2 December 2019 в 19:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: