Dans cette documentation, vous allez apprendre le concept de variables en Bash.
Une variable est l'assignation d'une "étiquette" à un contenu.
Ce contenu comme son nom "variable" l'indique signifie qu'elle peut changer autant que l'on veut !
L'assignation de l'étiquette à ce contenu, elle, est "fixe" aussi longtemps que l'on ne dissout pas la variable (= tant qu'on ne change pas le contenu).
Une variable va contenir des données, ces données suivant le contexte peut-être
Attention votre variable n'existe que pendant l'éxécution de votre script, après cela elle disparait de la mémoire du système.
Les variables en bash sont très simple a utiliser. Dans un premier temps il vous suffit de lui assigner une valeur
[ilan@machine-bash ~]$ MaVariable="Toto"
Pour afficher le contenu de ma variable je peux ensuite utiliser la commande "echo"
[ilan@machine-bash ~]$ echo $MaVariable
Toto
J'ai également la possibilité de demander dans mon terminal de saisir la valeur a déclarer dans ma variable avec la commande "read"
[ilan@machine-bash ~]$ read MaVariable
Toto
[ilan@machine-bash ~]$ echo $MaVariable
Toto
Attention a la manière dont vous appelez vos variables
Par exemple si vous utilisez echo de cette manière en remplaçant les guillemets ("") par des apostrophes ('')
[ilan@machine-bash ~]$ MaVariable='Toto'
[ilan@machine-bash ~]$ echo 'Je m appelle $MaVariable'
Je m appelle $MaVariable
La commande echo n'affichera pas le contenu de la variable mais simplement le texte en "brut" (= il affichera simplement ce que vous avez mis entre les apostrophes)
Utiliser un "mix" entre les apostrophes et les guillemets est cependant possible
[ilan@machine-bash ~]$ MaVariable='Toto'
[ilan@machine-bash ~]$ echo 'Je m appelle '"$MaVariable"
Je m appelle $MaVariable
Je ferme les apostrophes à la fin de la partie que je souhaites afficher en "brut" et je met entre guillemets ce que je souhaites afficher de manière normale.
Pour ne pas vous perdre je ne recommande cependant pas cela.
Supposons que je souhaites que mon script enregistre le résultat de la commande ls /etc
dans une variable.
Je vais en premier créer mon script echo-etc.sh
[ilan@machine-bash ~]$ vim echo-etc.sh
J'ajoute le shabang ainsi que ma variable, pour exécuter une commande et l'enregistrer dans une variable, vous devez utiliser la synthaxe suivante :
MaVariable=$(ma_commande)
Dans mon cas cela donne
#!/bin/bash
result=$(ls /etc)
echo $result
Je rend mon script exécutable puis je l'éxécute
[ilan@machine-bash ~]$ chmod +x echo-etc.sh
[ilan@machine-bash ~]$ ./echo-etc.sh
abrt dnsmasq.conf iproute2 modprobe.d qemu-ga subgid-
acpi dnsmasq.d ipsec.conf modules-load.d rc0.d subuid
adjtime dracut.conf ipsec.d motd rc1.d subuid-
aliases dracut.conf.d ipsec.secrets motd.d rc2.d sudo.conf
alsa egl iscsi mtab rc3.d sudoers
[...] [...] [...] [...] [...]
Il m'affiche bien le contenu du dossier /etc !
Je peux modifier le contenu de ma variable, pour cela il me suffit de réatribuer une valeur à celle-ci
#!/bin/bash
result=$(ls /etc)
echo $result
result=$(ls /var)
echo $result
Lorsque je réexecute mon script voilà le résultat
[ilan@machine-bash ~]$ ./echo-etc.sh
abrt dnsmasq.conf iproute2 modprobe.d qemu-ga subgid-
acpi dnsmasq.d ipsec.conf modules-load.d rc0.d subuid
adjtime dracut.conf ipsec.d motd rc1.d subuid-
aliases dracut.conf.d ipsec.secrets motd.d rc2.d sudo.conf
alsa egl iscsi mtab rc3.d sudoers
[...] [...] [...] [...] [...]
account adm cache crash db empty ftp games kerberos lib local lock log mail named nis opt preserve run spool tmp www yp
Il m'affiche bien dans un premier temps le résultat de ls /etc puis dans un second temps le résultat de /var
Supposons maintenant que l'on souhaite demander à l'utilisateur quel dossier il souhaite afficher
Je créer un script nommé ask-user.sh
[ilan@machine-bash ~]$ vim ask-user.sh
Je vais ensuite écrire mon shabang, déclarer mes variables puis demander à l'utilisateur d'écrire le nom du dossier grâce à la commande read
Vu que je souhaites poser une question à l'utilisateur, j'utiliserais l'option -p
pour "prompt" un message
Par exemple
[ilan@machine-bash ~]$ read -p "Rentrez un nom de dossier : " NomDossier
Rentrez un nom de dossier : home
[ilan@machine-bash ~]$ echo $NomDossier
home
Dans mon script cela donnera alors
#!/bin/bash
read -p "Rentrez un nom de dossier (avec les /) : " NomDossier
result=$(ls $NomDossier)
echo $result
Au moment de l'éxécution
[ilan@machine-bash ~]$ chmod +x ask-user.sh
[ilan@machine-bash ~]$ ./ask-user.sh
Rentrez un nom de dossier (avec les /) : /home
ilan toto
Super ! Notre script fonctionne bien
Comme vous l'avez surement remarqué, j'ai préféré ajouter "(avec les /)" pour ne pas causer de problème lors de l'exécution de mon script, en effet l'utilisateur aurait pu écrire
Rentrez un nom de dossier : home
Avec le script que j'avais effectué, cela aurait entré la commande suivante
result=$(ls $NomDossier) # La commande avec la variable
result=$(ls home) # La commande avec le contenu de la variable
La commande ls home aurait alors voulu afficher le dossier home dans mon dossier actuel (équivalent de ./home)
Ce qui n'aurait pas été le résultat attendu.
Vous savez maintenant comment utiliser les variables en Bash.
Vous pouvez aller plus loin, si vous le souhaitez, n’hésitez pas à me contacter dans ce cas ou à vous renseigner sur les autres tutos présents sur mon wiki ou directement sur Google !
Si vous souhaitez avoir plus d’informations ou si vous avez découvert une coquille sur ce tutoriel, merci de me contacter à l’adresse i.martel@imweb.ovh
v1 - Version initiale