質問
私は、完了したときに電子メールを送信するデフォルトの動作であるフィッシュシェルスクリプトを持っています。 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
明らかに、それは議論を期待していますが、私はそれが引数を受け入れないように伝えるための構文、またはそれが存在するかどうかを知らないことを知りません。
これはかなり基本的なものだと思いますが、シェルスクリプトがよくわかりません。
解決
あなたを包みます switch
このような声明:
if set -q argv
...
end
また、あなたのデフォルトのケースはあるべきだと思います case '*'
.
他のヒント
スイッチステートメントを使用することを好む場合は、それも可能です:
switch (echo $argv)
case nomail
## Perform normal script functions
case '*'
## Perform normal script functions
mailx -s "Script Done!"
end
所属していません StackOverflow