12

我有一个鱼壳脚本,其默认行为是在完成后发送电子邮件。我想修改它以响应nomail来自命令行的参数。因此,例如,正常运行脚本会产生一封电子邮件:

michaelmichael: ~/bin/myscript

但如果使用nomailswitch 运行,它不会发送确认电子邮件:

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

显然它需要一个参数,我只是不知道告诉它不接受任何参数的语法,或者如果它存在的话。

我猜这是非常基本的,但我只是不太了解 shell 脚本。

4

2 回答 2

10

像这样包装你的switch陈述:

if set -q argv
    ...
end

另外,我认为您的默认情况应该是case '*'.

于 2010-06-25T14:26:34.777 回答
7

如果您更喜欢使用 switch 语句,也可以:

switch (echo $argv)
  case nomail
    ## Perform normal script functions
  case '*'
    ## Perform normal script functions
    mailx -s "Script Done!"
end
于 2014-01-04T17:42:51.797 回答