Je veux que mon script puisse prendre une entrée facultative,
par exemple, actuellement mon script est
#!/bin/bash
somecommand foo
mais je voudrais qu'il dise:
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
Je veux que mon script puisse prendre une entrée facultative,
par exemple, actuellement mon script est
#!/bin/bash
somecommand foo
mais je voudrais qu'il dise:
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
Réponses:
Vous pouvez utiliser la syntaxe de valeur par défaut:
Comme décrit dans le Manuel de référence Bash - 3.5.3 Expansion des paramètres du shell [accentuation], les éléments ci-dessus :
Si vous ne souhaitez remplacer une valeur par défaut que si le paramètre n'est pas défini (mais pas s'il est nul, par exemple pas s'il s'agit d'une chaîne vide), utilisez plutôt cette syntaxe:
Encore une fois dans le manuel de référence Bash - 3.5.3 Expansion des paramètres du shell :
la source
foo
if$1
is unset or a empty string ", and${1-foo}
, "returnfoo
if$1
is unset".Vous pouvez définir une valeur par défaut pour une variable comme ceci:
somecommand.sh
Voici quelques exemples de comment cela fonctionne:
la source
-
m'a confondu (est-ce nié?).la source
-n
est le même que! -z
.-n
et! -z
donc je dirais que ce n'est pas le cas ici.[ -n $1 ]
sera toujours vrai . Si vous utilisez bash,[[ -n $1 ]]
se comportera comme prévu, sinon vous devez citer[ -n "$1" ]
Vous pouvez vérifier le nombre d'arguments avec
$#
la source
n'oubliez pas, si sa variable $ 1 .. $ n vous devez écrire dans une variable régulière pour utiliser la substitution
la source
DAY=${1:-$(date +%F -d "yesterday")}
Pour les arguments multiples optionnels , par analogie avec la
ls
commande qui peut prendre un ou plusieurs fichiers ou par défaut liste tout dans le répertoire courant:Hélas, ne fonctionne pas correctement pour les fichiers avec des espaces dans le chemin. Je n'ai pas encore trouvé comment faire fonctionner cela.
la source
Cela permet la valeur par défaut du 1er argument optionnel et préserve plusieurs arguments.
la source
Il est possible d'utiliser la substitution de variable pour substituer une valeur fixe ou une commande (comme
date
) à un argument. Jusqu'à présent, les réponses se sont concentrées sur des valeurs fixes, mais c'est ce que j'ai utilisé pour faire de la date un argument facultatif:la source