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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top