Salut! Cet article est la deuxième partie de la série de didacticiels sur les scripts shell Howtoforge. À ce stade, je suppose que vous avez lu la première partie de la série et savez comment créer un script simple et l'exécuter. Dans la deuxième partie, vous apprendrez comment accepter les entrées de l'utilisateur et les traiter via des scripts shell. Commençons !
Variables sous Linux
Tout comme les langages de programmation, le shell Linux a la capacité de stocker des données dans des variables. Une variable est un conteneur qui stocke temporairement des données qui seront traitées via un langage de programmation. Il existe deux types de variables sous Linux :les variables d'environnement et les variables shell.
Variables d'environnement
Les variables d'environnement sont les variables par défaut de Linux et sont utilisées pour transmettre des informations entre les processus du shell. Les variables d'environnement sont sensibles à la casse et doivent toujours être en majuscules pour y accéder.
Le tableau ci-dessous montre les variables d'environnement courantes dans le shell Linux :
Nom de la variable | Utilisation |
BASH | Contient le chemin complet de l'interpréteur de commandes pour les scripts Bash |
BASH_VERSION | Contient la version bash de la machine actuellement utilisée |
ACCUEIL | Contient le chemin relatif du répertoire personnel. |
LOGNAME | Contient le nom du compte de l'utilisateur actuellement connecté |
OSTYPE | Contient une chaîne décrivant le système d'exploitation actuel de la machine utilisée |
CHEMIN | Contient un chemin absolu séparé par deux-points des fichiers exécutables sous Linux |
PWD | Contient le répertoire de travail actuel du shell |
SHELL | Contient le shell de ligne de commande préféré |
UTILISATEUR | Fonctionne comme LOGNAME. Il contient le nom du compte de l'utilisateur actuellement connecté |
_ | Contient le nom de la commande récemment utilisée dans le shell |
Pour afficher la valeur d'une variable d'environnement, l'utilisateur doit ajouter un signe dollar ($) à la variable à laquelle accéder. Par exemple, pour afficher certaines informations système telles que le répertoire de travail actuel, l'utilisateur connecté et le type de système d'exploitation à l'aide d'écho, nous utilisons :
#!/bin/bash
echo $PWD
echo $LOGNAME
echo $OSTYPE
Le résultat est :
Pour obtenir la liste complète des variables d'environnement sous Linux, utilisez la commande env.
Modifier les valeurs des variables d'environnement
Pour assurer la flexibilité du système, ces variables d'environnement peuvent être manipulées. Pour définir une valeur pour une variable d'environnement, utilisez une expression d'affectation (signe égal).
Exemple :
#!/bin/bash
echo $USER
USER="new user"
echo $USER
Le résultat du script est :
Lorsque vous exécutez le script, dans un premier temps, le $USER dans la ligne echo $USER affiche la valeur de la variable USER. En utilisant un opérateur d'affectation (=), la variable USER change sa valeur. Cependant, si l'utilisateur affecte des valeurs inconnues à une variable d'environnement, le shell créera une autre variable shell similaire à la variable d'environnement dans le contexte local du script mais cela n'affectera pas le comportement des autres applications. Cela signifie qu'une fois notre script fermé, la variable USER conservera sa valeur par défaut.
Notez que dans notre exemple précédent, nous omettons le signe dollar ($) dans le nom de la variable lors de la manipulation des valeurs des variables d'environnement telles que la ligne USER="new user". De plus, lors de l'utilisation de l'opérateur d'affectation, il ne doit y avoir aucun espace entre le signe USER et =. L'ajout d'un espace entre eux crée une erreur.
Variables shell
Le shell permet également à l'utilisateur de déclarer des variables. Tout comme PHP, pour déclarer une variable dans des scripts shell, l'utilisateur n'a pas à se soucier de déclarer son type de données; l'interpréteur détectera automatiquement le type de données de la variable en fonction des données que l'utilisateur y stocke pendant l'exécution.
Règles de nommage des variables shell
Comme tout langage de programmation, il existe des règles pour nommer les variables shell. Voici un résumé des règles :
- Les noms des variables doivent commencer par une lettre ou un trait de soulignement.
- Il ne doit contenir que des caractères alphanumériques ou un trait de soulignement.
- Les variables sont sensibles à la casse, les variables path, PATH et Path sont donc différentes.
Pour prouver cette règle, nous allons créer un script simple ci-dessous :
#!/bin/bash
12abc=10
abc#*=10
_abc=10
_ABC=2
echo $12abc $abc#* $_abc $_ABC
Les lignes 2 et 3 renvoient l'erreur "command not found" car la variable 12abc commence par un caractère numérique et la variable abc#* contient des caractères illégaux. Nous avons également prouvé que _abc et _ABC sont des variables différentes et que la ligne _ABC=2 ne remplace pas la valeur de _abc.
Assigner des valeurs aux variables shell à l'aide de la commande read :
read est une commande qui permet d'accepter les entrées de l'utilisateur. La syntaxe lors de l'utilisation de la commande de lecture est :
read <variable_name>
Par exemple, nous allons créer un script qui permettra à un utilisateur de saisir ses nom et prénom et de les afficher. Pour que l'utilisateur sache quoi faire, nous affichons une invite utilisateur avec la commande echo.
#!/bin/bash
echo "Your first name: "
read fname
echo "Your last name:"
read lname
echo "Hello $fname $lname ! I am learning how to create shell scripts."
Le résultat est :
Veuillez noter que, comme dans notre exemple précédent, nous n'avons pas besoin de déclarer une variable pour l'utiliser. L'interpréteur crée également automatiquement la variable utilisée dans la commande de lecture. Cependant, dans l'exemple, nous avons utilisé à plusieurs reprises la commande echo pour créer une invite à l'utilisateur. La commande de lecture a également la capacité de créer une invite tout en acceptant les entrées de l'utilisateur. La syntaxe d'utilisation de prompt dans la commande de lecture est :
read -p "Your prompt: " <variable_name>
Pour simplifier notre code précédent, nous pouvons reconstruire le code pour :
#!/bin/bash
read -p "Your first name: " fname
read -p "Your last name: " lname
echo "Hello $fname $lname ! I am learning how to create shell scripts"
Un autre avantage de la commande de lecture est que l'invite de commande se trouve juste après le texte et non dans la ligne ci-dessous.
La commande de lecture peut également être utilisée pour accepter les mots de passe. Contrairement aux entrées ordinaires, les mots de passe sont masqués pour assurer la sécurité. La syntaxe pour accepter un mot de passe est :
read -s -p "your prompt" <variable_name>
Effectuer des opérations arithmétiques simples à l'aide du shell
En plus d'accepter les entrées et d'afficher la sortie, le shell bash a également une option arithmétique intégrée. Le tableau ci-dessous résume les opérateurs arithmétiques intégrés du shell Bash.
Opérateur | Description | Syntaxe | Utilisation |
+ | Ajout | a=$((b+c)) | Ajoute la valeur de b et c et la stocke dans la variable a |
- | Soustraction | a=$((b-c)) | Soustrait la valeur de c de b et la stocke dans la variable a |
* | Multiplication | a=$((b*c)) | Multiplie la valeur de b et c et la stocke dans la variable a |
/ | Division | a=$((b/c)) | Divise la valeur de b par c et la stocke dans la variable a |
% | Module | a=$((b%c)) | Effectue la division modulo de b et c et la stocke dans la variable a |
++ | Pré-incrémentation | $((++aa)) | Incrémente la valeur de la variable a immédiatement |
++ | Post-incrémentation | $((a++)) | Incrémente la valeur de la variable a et reflète les changements à la ligne suivante |
-- | Pré-décrémentation | $((--a)) | Décrémente la valeur de la variable a immédiatement |
-- | Post-décrémentation | $((a--)) | Décrémente la valeur de la variable a et reflète les changements à la ligne suivante |
** | Exponentiation | $((a**2)) | Élever la valeur de a à l'exposant de 2 |
+= | Plus égal | $((a+=b)) | Ajoute la valeur de a et b et la stocke dans la variable a |
-= | Moins égal | $((a-=b)) | Soustrait la valeur de b de a et la stocke dans la variable a |
*= | Fois égaux | $((a*=b)) | Multiplie la valeur de a et b et la stocke dans la variable a |
/= | Barre oblique égale | $((a/=b)) | Divise la valeur de a par b et la stocke dans la variable a |
%= | Mod égal | $((a%=b)) | Effectuer une division modulo entre a et b et la stocker dans la variable a |
Notez que chaque fois que vous exécutez une instruction arithmétique, toutes nos variables seront entourées d'un signe dollar et d'une double parenthèse. En faisant cela, l'interpréteur traite les valeurs de nos variables comme des nombres entiers. Sans cela, l'interpréteur traite les valeurs de la variable comme une chaîne. Pour avoir un exemple, consultez le script ci-dessous :
#!/bin/bash
read -p "Enter int1: " a
read -p "Enter int2: " b
echo $((a+b))
c=$a+$b
echo $c
Lorsque nous exécutons notre exemple, la ligne $((a+b)) ajoute les valeurs de l'utilisateur stockées respectivement dans les variables a et b tandis que c=$a+$b traite les variables a et b comme une chaîne.
Conclusion
Nous avons expliqué comment accepter les entrées et les stocker dans une variable et comment effectuer des opérations arithmétiques dans les scripts shell bash. Dans la prochaine partie, nous présenterons les structures de contrôle et notamment la structure de décision.
Références :
Le projet d'information Linux. (2007). Extrait le 29 avril 2015 de Linfo.org : http://www.linfo.org/
Cooper, M. (n.d.). Guide de script avancé pour Bash. Extrait le 29 avril 2015 de http://www.tldp.org/LDP/abs/html/
Variables d'environnement. (s.d.). Extrait le 29 avril 2015 de la documentation Ubuntu : https://help.ubuntu.com/community/EnvironmentVariables