Scrivendo Un Pesce Shell script con un argomento opzionale
Domanda
Ho uno script di shell di pesce il cui comportamento predefinito è quello di inviare una e-mail una volta completato. Mi piacerebbe modificarlo a rispondere a un argomento nomail
dalla riga di comando. Così, per esempio, l'esecuzione dello script normalmente produrrebbe una e-mail:
michaelmichael: ~/bin/myscript
Ma se eseguito con l'interruttore nomail
, non avrebbe mandato l'e-mail di conferma:
michaelmichael: ~/bin/myscript nomail
Se faccio funzionare lo scritto con l'argomento nomail
, funziona benissimo. Senza nomail
, $argv
non è definito e genera un errore. Ho perlustrato la documentazione della shell di pesce, ma non riesco a trovare nulla che funziona. Ecco quello che ho finora
switch $argv
case nomail
## Perform normal script functions
case ???
## Perform normal script functions
mailx -s "Script Done!"
end
L'esecuzione di questo getta il seguente errore:
switch: Expected exactly one argument, got 0
Ovviamente si aspetta un argomento, solo che non so la sintassi per dicendogli di non accettare argomenti o uno se esiste.
Sto indovinando questo è piuttosto semplice, ma io proprio non capisco scripting di shell molto bene.
Soluzione
Wrap sua dichiarazione switch
in questo modo:
if set -q argv
...
end
Inoltre, penso che il tuo caso di default dovrebbe essere case '*'
.
Altri suggerimenti
Se si preferisce utilizzare un'istruzione switch è anche possibile:
switch (echo $argv)
case nomail
## Perform normal script functions
case '*'
## Perform normal script functions
mailx -s "Script Done!"
end