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

StackOverflow https://stackoverflow.com/questions/3118529

  •  29-09-2019
  •  | 
  •  

Вопрос

У меня есть сценарий рыбной оболочки, поведение по умолчанию, по умолчанию - отправить электронное письмо при завершении. Я хотел бы изменить его, чтобы ответить на 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

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

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

Это было полезно?

Решение

Оберните свой switch Заявление, как это:

if set -q argv
    ...
end

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

Другие советы

Если вы предпочитаете использовать оператор Switch, это также возможно:

switch (echo $argv)
  case nomail
    ## Perform normal script functions
  case '*'
    ## Perform normal script functions
    mailx -s "Script Done!"
end
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top