Escribiendo un pescado Shell Script Con un argumento opcional
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.
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