Pregunta

Tengo un script de shell pez cuyo comportamiento por defecto es el envío de un correo electrónico cuando haya terminado. Me gustaría modificarlo para responder a un argumento nomail desde la línea de comandos. Así, por ejemplo, ejecutar el script normalmente produciría un correo electrónico:

michaelmichael: ~/bin/myscript

Sin embargo, si se ejecuta con el interruptor nomail, que no enviaría el mensaje de confirmación:

michaelmichael: ~/bin/myscript nomail

Si ejecuto el script con el argumento nomail, funciona muy bien. Sin nomail, $argv no está definida y que arroja un error. He rastreado la documentación cáscara de pescado, pero parece que no puede encontrar nada que funcione. Esto es lo que tengo hasta ahora

switch $argv
  case nomail
    ## Perform normal script functions
  case ???
    ## Perform normal script functions
    mailx -s "Script Done!"
end

Al ejecutar este arroja el siguiente error:

switch: Expected exactly one argument, got 0

Es evidente que espera un argumento, es que no sé la sintaxis para contarla a aceptar sin argumentos, o uno si es que existe.

supongo que esto es bastante básico, pero simplemente no entienden shell scripting muy bien.

¿Fue útil?

Solución

Wrap su estado de switch como esto:

if set -q argv
    ...
end

Además, creo que el caso por defecto debería ser case '*'.

Otros consejos

Si prefiere utilizar sentencia switch también es posible:

switch (echo $argv)
  case nomail
    ## Perform normal script functions
  case '*'
    ## Perform normal script functions
    mailx -s "Script Done!"
end
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top