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