Difficulté: Débutant
Ce cours vous donnera les bases pour utiliser un shell Linux. Ce troisième cours sera orienté vers la création d’un script bash.
Permissions
Le système de permissions Linux est assez simple mais robuste. Les permissions pour un élément sont séparées en 3 blocs :
- Un pour le propriétaire de l’élément
- Un pour le groupe associé à l’élément
- Un pour les autres utilisateurs
Chaque bloc possède 3 permissions indépendantes :
- Lecture (r pour read)
- Ecriture (w pour write)
- Exécution (x pour execute)
On peut voir les permissions avec la commande ls -l. Le premier caractère représente le type de l’objet :
- Fichier (-)
- Dossier (d)
- Lien (l)
Les 9 caractères suivants sont les 3 blocs de 3 permissions.
1
2
3
mickael@culture-numerique:~ $ touch file
mickael@culture-numerique:~ $ ls -l
-rw-rw-r-- 1 mickael mickael 0 Apr 20 14:51 file
Dans l’exemple précédent, file est un fichier (-). Le propriétaire possède les permissions de lecture et d’écriture (rw-). Le groupe possède les mêmes permissions (rw-). Les autres utilisateurs n’ont que le droit de lecture (r–).
Script
Un script est un fichier exécutable, qui va être lu par le système et contenant une suite d’instructions spécifiques écrites en clair (c’est-à-dire que ce n’est pas un programme compilé). On débute un script par un she-bang. Un she-bang est une suite de caractères permettant de spécifier le programme qui va lire les instructions (#!). Le she-bang est donc suivi du chemin du programme.
1
#!/usr/bin/bash
Variables
Une variable sert à stocker du texte. Dans bash, une variable ne peut contenir que du texte. On peut cependant traiter ce texte de différentes manières. pour créer une variable et lui donner une valeur, on écrit le nom de la variable, suivi du caractère ‘=’, suivi de la valeur à donner.
Attention à ne pas ajouter d’espaces autour du caractère ‘=’ car cela casse la syntaxe.
Pour utiliser une variable, on place le caractère ‘$’ devant. Pour enregistrer le STDOUT d’une commande dans une variable, on place la commande dans les parenthèses de l’indicateur suivant : ‘$()’.
1
2
3
4
5
6
7
8
9
mickael@culture-numerique:~ $ mavariable=texte
mickael@culture-numerique:~ $ echo $mavariable
texte
mickael@culture-numerique:~ $ mavariable="beaucoup de texte"
mickael@culture-numerique:~ $ echo $mavariable
beaucoup de texte
mickael@culture-numerique:~ $ mavariable=$(ls -l /home)
mickael@culture-numerique:~ $ echo $mavariable
drwxr-x--- 6 mickael mickael 4096 Apr 01 09:49 mickael
Conditions
Une condition permet de former généralement trois cas:
- Une condition if
- Une boucle for
- Une boucle while
Evaluation de condition
Une évaluation de condition s’écrit entre crochets ( [ et ] ). A l’intérieur de ces crochets, on met la condition à tester. Cette évaluation renverra 0 pour true (vrai) ou 1 pour false (faux). On peut utiliser les opérateurs de condition suivants :
- -eq signifie equals (égal à en français) Exemple : “[ $var -eq 1 ]” retournera true pour var=1
- -ne signifie not equal (différent de en français) Exemple : “[ $var -ne 0 ]” retournera true pour var=1
- -lt signifie lesser than (strictement inférieur à en français) Exemple : “[ $var -lt 2 ]” retournera true pour var=1
- -le signifie lesser or equals (inférieur ou égal en français) Exemple : “[ $var -le 1 ]” retournera true pour var=1
- -gt signifie greater than (strictement supérieur à en français) Exemple : “[ $var -gt 0 ]” retournera true pour var=1
- -ge signifie greater or equals (supérieur ou égal à en français) Exemple : “[ $var -ge 1 ]” retournera true pour var=1
- -z signifie zero Exemple : “[ -z $var ]” retournera true pour var=””
- -n signifie non-zero Exemple : “[ -n $var ]” retournera false pour var=””
- -d signifie is a directory (est un dossier en français) Exemple : “[ -d $var ]” retournera true pour var=/etc
- -f signifie is a file (est un fichier en français) Exemple : “[ -f $var ]” retournera true pour var=/etc/os-release
- == permet de tester l’égalité de deux chaînes de caractères Exemple : “[ $var1 == $var2 ]” retournera true pour var1=abc et var2=abc
- != permet de tester l’inégalité de deux chaînes de caractères Exemple : “[ $var1 != $var2 ]” retournera true pour var1=abc et var2=abcd
On doit toujours trouver un espace avant et après chaque crochet.
Condition if
Une condition permet de réaliser une action par rapport à une condition. Elle commence par le mot-clé if (si en français) suivie d’une évaluation de condition. L’action à effectuer en cas de condition validée doit être précédée du mot-clé then (ensuite en français). En cas de cas supplémentaire, on utilise le mot-clé elif (sinon si en français) suivi d’une nouvelle condition. Pour effectuer une action dans tous les autres cas, on utilise le mot-clé else (sinon en français). Enfin, on ferme la condition avec le mot-clé fi (l’inverse de if).
1
2
3
4
5
6
7
if [ $var -eq 0 ]
then echo "variable est égal à zero"
elif [ $var -eq 1 ]
then echo "variable est égal à un"
else
echo "variable est égal à $var"
fi
Boucle for
Une boucle for permet de réaliser un certain nombre d’actions dont le nombre est prédéfini en avance. Elle commence par le mot-clé for (pour en français) suivie d’une varible à utiliser et sur laquelle itérer, le mot-clé in (dans en français) et d’une liste. Généralement on utilise deux listes possibles.
- Une liste numérique, en écrivant entre crochets la liste de chiffres ou la portée des chiffres à utiliser.
- Une liste de fichiers, en écrivant un pattern qui se valide sur plusieurs fichiers Exemples : “for i in {1,3,5}” ou bien “for i in {1..5}” ou encore “for file in /opt/app/”* L’action à effectuer doit être précédée du mot-clé do (faire en français). On ferme la boucle avec le mot-clé done (fait en français).
1
2
3
for i in {1..5}
do echo "je compte à $i"
done
Boucle while
Une boucle while permet de réaliser une action tant qu’une condition est vraie. Elle commence par le mot-clé while (tant que en français) suivie de la condition. L’action à effectuer doit être précédée du mot-clé do (faire en français). On ferme la boucle avec le mot-clé done (fait en français).
1
2
3
4
var="a"
while [ "$var" != "a a a" ]
do var="$var a"
done
Commandes
which
which est une commande qui permet d’obtenir le chemin absolu d’un exécutable.
PARAMETRES : un exécutable dont le chemin est à trouver
1
2
mickael@culture-numerique:~ $ which bash
/usr/bin/bash
read
read est une commande qui permet de lire une entrée utilisateur.
PARAMETRES : une variable dans laquelle stocker l’entrée utilisateur
OPTIONS :
- -p : signifie prompt, permet d’entrer une chaîne de caractères qui sera affichée avant d’attendre l’entrée utilisateur
- -s : signifie secret, permet de ne pas afficher l’entrée utilisateur
1
2
3
4
5
6
7
8
mickael@culture-numerique:~ $ read -p "Entrez du texte: " texte
Entrez du texte: Ceci est du texte écrit par l'utilisateur
mickael@culture-numerique:~ $ echo $texte
Ceci est du texte écrit par l'utilisateur
mickael@culture-numerique:~ $ read -s -p "Mon secret:" secret
Mon secret:
mickael@culture-numerique:~ $ echo $secret
Ceci est un secret écrit par l'utilisateur
chmod
chmod est une commande qui permet de changer les permissions d’un élément
PARAMETRES : l’action à effectuer ou les nouvelles permissions à donner, suivi de l’élément à changer
Une action de permissions utilise les éléments suivants :
- Bloc de permission :
- Propriétaire (u pour user)
- Groupe associé (g pour group)
- Autres utilisateurs (o pour other)
- Tous les blocs en même temps (a pour all)
- Une action de permission :
- Ajouter une permission (+)
- Supprimer une permission (-)
- Donner exactement une ou des permissions (=)
- La permissions en question (r, w, x)
Les permissions peuvent aussi être données de façon binaire. On doit imaginer chaque permission comme une suite de 1 et 0 : 1 pour donner la permission et 0 pour ne pas la donner. On écrit ensuite chaque bloc de 3 bits en un chiffre décimal.
Cette syntaxe est assez avancée, elle ne sera donc pas expliquées plus en détails ici.
1
2
3
4
5
6
7
mickael@culture-numerique:~ $ touch file
mickael@culture-numerique:~ $ ls -l
-rw-rw-r-- 1 mickael mickael 0 Apr 20 15:27 file
mickael@culture-numerique:~ $ chmod u+x file
-rwxrw-r-- 1 mickael mickael 0 Apr 20 15:27 file
mickael@culture-numerique:~ $ chmod 400 file
-r-------- 1 mickael mickael 0 Apr 20 15:27 file