Comment passer des arguments à un script Bash

Ecrivez un script Bash afin qu'il reçoive les arguments spécifiés lorsque le script est appelé à partir de la ligne de commande. Utilisez cette méthode lorsqu'un script doit exécuter une fonction légèrement différente selon les valeurs des paramètres d'entrée, également appelées arguments.

Écran d'ordinateur avec script bash illustré

Fil de vie / Ran Zheng

Exemple de passage d'arguments dans un script Bash

Si vous avez développé un script appelé statistiques.sh qui compte les mots d'un fichier, il est préférable de passer le nom du fichier en argument afin que le même script puisse être utilisé pour tous les fichiers qui seront traités. Par exemple, si le nom du fichier à traiter est liste de chansons, saisissez ce qui suit sur la ligne de commande:

sh stats.sh liste de chansons

Les arguments sont accessibles à l'intérieur d'un script en utilisant les variables $1, $2, $3, etc. La variable $1 renvoie au premier argument, $2 au deuxième argument, et $3 au troisième argument. Par exemple, dans le script:

FICHIER1=$1
wc $FILE1

Affectez une variable avec un nom descriptif à la valeur du premier argument (

$1), puis appelez l'utilitaire de comptage de mots (toilettes) sur la variable $FILE1 ou tout ce que vous voudrez peut-être faire.

Si vous avez besoin d'un nombre variable d'arguments, utilisez le $@ variable, qui est un tableau de tous les paramètres d'entrée. Cette procédure utilise un pour boucle pour traiter itérativement chacun, comme illustré dans l'exemple suivant:

pour FILE1 dans "$@"
faire
wc $FILE1
terminé

Voici un exemple de la façon d'appeler ce script avec des arguments à partir de la ligne de commande:

sh stats.sh liste de chansons1 liste de chansons2 liste de chansons3

Si un argument comprend des espaces, placez-le entre guillemets simples. Par exemple:

sh stats.sh 'liste de chansons 1' 'liste de chansons 2' 'liste de chansons 3'

Méthode des drapeaux

Fréquemment, un script est écrit pour que les arguments puissent être passés dans n'importe quel ordre à l'aide d'indicateurs. Avec la méthode flags, certains des arguments peuvent être rendus facultatifs.

Par exemple, écrivez un script qui récupère les informations d'une base de données en fonction de paramètres spécifiés, tels que Nom d'utilisateur, Date, et produit, et génère un rapport dans un format spécifié. Le script doit être écrit de manière à ce que ces paramètres soient transmis lorsque le script est appelé. Cela pourrait ressembler à ceci:

makereport -u jsmith -p cahiers -d 20-10-2011 -f pdf

Bash active cette fonctionnalité avec le getopts fonction. Pour l'exemple ci-dessus, utilisez getopts comme suit:

tandis que getopts u: d: p: f: option
faire
cas "${option}"
dans
u) UTILISATEUR=${OPTARG};;
d) DATE=${OPTARG};;
p) PRODUIT=${OPTARG};;
f) FORMAT=${OPTARG};;
esac
terminé

Il s'agit d'une boucle while qui utilise le getopts fonction et une soi-disant chaîne d'options-dans ce cas u: d: p: f:- pour parcourir les arguments. Les tandis que boucle parcourt l'optstring, qui contient les indicateurs qui sont utilisés pour passer des arguments, et affecte la valeur d'argument fournie pour cet indicateur à la variable option. Les Cas l'instruction affecte ensuite la valeur de la variable option à une variable globale qui est utilisée après que tous les arguments ont été lus.

Significations pour les deux points

Les deux points dans la chaîne opt signifient que des valeurs sont requises pour les indicateurs correspondants. Dans l'exemple ci-dessus de u: d: p: f:, tous les indicateurs sont suivis de deux points. Cela signifie que tous les indicateurs ont besoin d'une valeur. Si, par exemple, le et F les drapeaux n'étaient pas censés avoir de valeur, u: dp: f serait l'optstring.

Les deux points de départ mettent getopts en « mode de rapport silencieux ». Au lieu d'erreur totalement le script, tout argument inattendu remplit le? option et vous pouvez rechercher ou gérer cela si nécessaire. Sans les deux points initiaux dans la chaîne optstring, le terminal affiche une erreur. Par exemple, j'ai le script d'en haut qui compte les mots. Il attend une syntaxe telle que "stats.sh -f filename". Sans les deux points, si j'essaye "stats.sh -h", j'obtiens:

statistiques.sh -h
stats.sh: option illégale -- h

Alors qu'avec les deux points, je peux alors mettre une ligne dans mon script en attendant quelque chose comme ça, comme - ?) echo "Aucun argument -${OPTARG} trouvé.";;. Cela me permet ensuite de capturer et de gérer l'entrée inattendue (dans ce cas en affichant mon propre message d'erreur).

statistiques.sh -h
Aucun argument -h trouvé.

Les arguments qui ne sont pas précédés d'un indicateur sont ignorés par getopts. Si les indicateurs spécifiés dans l'optstring ne sont pas fournis lorsque le script est appelé, rien ne se passe, à moins que vous ne gériez spécialement ce cas dans votre code. Tout argument non traité par attrape peut toujours être capturé avec le régulier $1, $2, et $3 variables.