Comment écrire un script bash qui prend en option arguments d'entrée?
Je veux que mon script pour être en mesure de prendre une option d'entrée,
par exemple, actuellement mon script est
#!/bin/bash
somecommand foo
mais je tiens à dire:
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
- Bash ou POSIX? Avec Bash, il y a plus de possibilités
- bash - j'ai mis à jour les balises.
- Voir aussi unix.stackexchange.com/questions/122845/...
- ...et stackoverflow.com/questions/2013547/...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser la valeur par défaut de la valeur de la syntaxe:
La ci-dessus sera, comme décrit dans Bash Manuel De Référence - 3.5.3 Shell Paramètre D'Extension [c'est moi qui souligne]:
Si vous ne voulez remplacer une valeur par défaut si le paramètre n'est pas défini (mais pas si elle est null, par exemple, ne pas si c'est une chaîne vide), utilisez cette syntaxe:
À nouveau à partir de Bash Manuel De Référence - 3.5.3 Shell Paramètre D'Extension:
foo
si$1
est unset ou une chaîne vide", et${1-foo}
, "retourfoo
si$1
est pas défini".somecommand ${@-foo}
Vous pouvez définir une valeur par défaut pour une variable comme ceci:
somecommand.sh
Voici quelques exemples de la façon dont cela fonctionne:
-
confus moi (est-il annulé?).-n
est le même que! -z
.Vous pouvez vérifier le nombre d'arguments
$#
s'il vous plaît ne oubliez pas, si la variable $1 .. $n
vous avez besoin d'écrire régulièrement une variable à l'utilisation de la substitution
DAY=${1:-$(date +%F -d "yesterday")}
Pour facultatif plusieurs arguments, par analogie avec la
ls
de commande qui peut prendre un ou plusieurs fichiers ou par défaut des listes de tout dans le répertoire courant:Ne fonctionne pas correctement pour les fichiers avec des espaces dans le chemin, hélas. N'ai pas compris comment le faire fonctionner encore.
Cela permet à la valeur par défaut pour l'option 1er arg, et conserve plusieurs args.
Il est possible d'utiliser la variable de substitution pour remplacer une valeur fixe ou une commande (comme
date
) pour un argument. Les réponses ont porté sur des valeurs fixes, mais c'est ce que j'ai utilisé pour faire de ce jour, un argument optionnel: