Schreiben Ein Fisch Shell Script mit einem optionalen Argument
Frage
Ich habe einen Fisch Shell-Skript, dessen Standardverhalten ist eine E-Mail, wenn Sie fertig zu senden. Ich möchte es zu einem nomail
Argumente von der Kommandozeile reagieren ändern. So zum Beispiel, in der Regel das Skript ausführen würde eine E-Mail erzeugen:
michaelmichael: ~/bin/myscript
Wenn aber mit dem nomail
Schalter läuft, wäre es nicht die Bestätigung E-Mail:
michaelmichael: ~/bin/myscript nomail
Wenn ich das Skript mit dem nomail
Argumente ausführen, wird es in Ordnung. Ohne nomail
, $argv
ist nicht definiert, und es wirft einen Fehler. Ich habe die Fische Shell Dokumentation abgekocht, kann aber nicht scheinen, nichts zu finden, die funktioniert. Hier ist, was ich bisher
switch $argv
case nomail
## Perform normal script functions
case ???
## Perform normal script functions
mailx -s "Script Done!"
end
der Lauf führt den folgenden Fehler:
switch: Expected exactly one argument, got 0
Natürlich erwartet sie ein Argument, ich weiß nur nicht, die Syntax für das Erklären es keine Argumente zu akzeptieren, oder einen, wenn es vorhanden ist.
Ich vermute, das ist ziemlich einfach, aber ich verstehe einfach nicht, Shell Scripting sehr gut.
Lösung
Wickeln Sie Ihre switch
Anweisung wie folgt:
if set -q argv
...
end
Außerdem glaube ich, Ihr Standardfall case '*'
sein sollte.
Andere Tipps
Wenn Sie switch-Anweisung lieber mit, es ist auch möglich:
switch (echo $argv)
case nomail
## Perform normal script functions
case '*'
## Perform normal script functions
mailx -s "Script Done!"
end