Написание сценария «Рыбная раковина» с необязательным аргументом - PullRequest
10 голосов
/ 25 июня 2010

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

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

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

Ответы [ 2 ]

9 голосов
/ 25 июня 2010

Оберните ваше switch утверждение так:

if set -q argv
    ...
end

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

6 голосов
/ 04 января 2014

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

switch (echo $argv)
  case nomail
    ## Perform normal script functions
  case '*'
    ## Perform normal script functions
    mailx -s "Script Done!"
end
...