Quiero que mi script pueda tomar una entrada opcional,
por ejemplo, actualmente mi script es
#!/bin/bash
somecommand foo
pero me gustaría que dijera:
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
Quiero que mi script pueda tomar una entrada opcional,
por ejemplo, actualmente mi script es
#!/bin/bash
somecommand foo
pero me gustaría que dijera:
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
Respuestas:
Puede usar la sintaxis de valor predeterminado:
Lo anterior, como se describe en el Manual de referencia de Bash - 3.5.3 Expansión del parámetro Shell [énfasis mío]:
Si solo desea sustituir un valor predeterminado si el parámetro no está establecido (pero no si es nulo, por ejemplo, si es una cadena vacía), utilice esta sintaxis en su lugar:
Nuevamente del Manual de referencia de Bash - 3.5.3 Expansión del parámetro Shell :
fuente
foo
si no$1
está configurado o una cadena vacía " y${1-foo}
"devolverfoo
si no$1
está configurado".Puede establecer un valor predeterminado para una variable así:
somecommand.sh
Aquí hay algunos ejemplos de cómo funciona esto:
fuente
-
me confundió (¿se niega?).fuente
-n
es el mismo que! -z
.-n
y! -z
así que diría que no es el caso aquí.[ -n $1 ]
siempre será cierto . Si usa bash,[[ -n $1 ]]
se comportará como espera, de lo contrario debe citarlo[ -n "$1" ]
Puede verificar el número de argumentos con
$#
fuente
por favor no olvides, si su variable $ 1 .. $ n necesitas escribir en una variable regular para usar la sustitución
fuente
DAY=${1:-$(date +%F -d "yesterday")}
Para argumentos múltiples opcionales , por analogía con el
ls
comando que puede tomar uno o más archivos o, por defecto, enumera todo en el directorio actual:No funciona correctamente para archivos con espacios en la ruta, por desgracia. Todavía no he descubierto cómo hacer que eso funcione.
fuente
Esto permite el valor predeterminado para el 1er argumento opcional, y conserva múltiples argumentos.
fuente
Es posible utilizar la sustitución de variables para sustituir un valor fijo o un comando (como
date
) para un argumento. Las respuestas hasta ahora se han centrado en valores fijos, pero esto es lo que solía hacer de la fecha un argumento opcional:fuente