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.

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top