L'écriture d'un poisson script avec un argument optionnel
Question
J'ai un script shell poissons dont le comportement par défaut est d'envoyer un e-mail lorsque vous avez terminé. Je voudrais modifier pour répondre à un argument nomail
de la ligne de commande. Ainsi, par exemple, l'exécution du script produirait normalement un email:
michaelmichael: ~/bin/myscript
Mais si elle est exécutée avec le commutateur nomail
, il ne serait pas envoyer l'e-mail de confirmation:
michaelmichael: ~/bin/myscript nomail
Si je lance le script avec l'argument nomail
, il fonctionne très bien. Sans nomail
, $argv
est pas défini et il renvoie une erreur. J'ai épluché la documentation de coquille de poisson, mais ne peut pas sembler trouver quelque chose qui fonctionne. Voici ce que j'ai jusqu'à présent
switch $argv
case nomail
## Perform normal script functions
case ???
## Perform normal script functions
mailx -s "Script Done!"
end
L'exécution de ce jette l'erreur suivante:
switch: Expected exactly one argument, got 0
De toute évidence, il attend un argument, je ne sais pas la syntaxe pour dire à accepter aucun argument, ou un si elle existe.
Je devine que cela est assez basique, mais je ne comprends pas très bien les scripts shell.
La solution
Enveloppez votre déclaration de switch
comme ceci:
if set -q argv
...
end
, je pense également votre cas par défaut devrait être case '*'
.
Autres conseils
Si vous préférez utiliser l'instruction switch, il est également possible:
switch (echo $argv)
case nomail
## Perform normal script functions
case '*'
## Perform normal script functions
mailx -s "Script Done!"
end