Dans certaines situations, il est nécessaire de d'exécuter plusieurs commandes BASH les unes à la suite des autres. Pour automatiser leur exécution, il est possible d'écrire un script BASH.
Le BASH est un langage programmation shell intégré à Linux. Ce n'est pas un langage aussi complet que peuvent l'être le C, le C++ ou le Java par exemple, mais cela permet d'automatiser la plupart de vos tâches : sauvegarde des données, surveillance de la charge de votre machine, etc.
Le langage BASH est un langage permettant de construire des scripts. Sa syntaxe est assez simple et il permet l'utilisation de tous les concepts présents dans d'autres langages ( variable, structures conditionnelles, boucles, fonctions...).
Pour écrire un script BASH, il suffit de créer un fichier avec l'extension .sh
.
nano mon_script.sh
La première ligne du fichier doit contenir le texte suivant :
#!/bin/bash
Le reste du fichier contiendra les différentes instructions de votre script.
Pour exécuter un script, il faut d'abord lui donner les droits d'exécution grâce à la commande chmod
.
chmod u+x mon_script.sh
Ensuite, il suffit d'écrire le nom du fichier précédé par les symboles ./.
./mon_script.sh
Pour créer une variable, il faut utiliser la syntaxe suivante :
#!/bin/bash
titre=bonjour
message="bonjour le monde"
age=15
nbre_lignes=$(wc -l < fichier.ext)
Pour afficher le contenu d'une variable, il faut utiliser la commande echo
.
#!/bin/bash
message="Bienvenue en NSI"
echo $message
Pour concaténer plusieurs variables, il suffit de les écrire l'une à la suite des autres.
#!/bin/bash
var1=bonjour
var2=le
var3=monde
echo $var1 $var2 $var3
Avec BASH, toutes les variables sont considérées comme des chaînes de caractères. Ainsi, l'expression 1+3
ne permet pas d'obtenir 4.
Pour effectuer des opérations mathématiques, il faut utiliser la syntaxe suivante :
!/bin/bash
r=$((6+9))
echo $r
Comme sur les commandes de base (ls
, cp
, mv
), il est possible de transmettre des arguments à un script lors de son exécution.
mon_script.sh arg1 arg2 arg3 ...
BASH utilise des variables spéciales permettant de récupérer ces arguments.
Variable | Utilisation |
---|---|
$* |
Contient tous les arguments passés au script |
$# |
Contient le nombre d'arguments |
$0 |
Contient le nom du script |
$1 , $2 , $.. |
Contient la suite des arguments en fonction de leur position |
La ligne suivante permet afficher le nombre d'arguments du script.
#!/bin/bash
echo $#
Il est également possible d'exécuter certaines parties d'un script en fonction d'une certaine condition.
if...then else...fi
a=6
if [ "$a" -eq 10 ]
then
echo $a "est égal à 10"
else
echo $a "est différent de 10"
fi
if
indique le début du bloc et il est suivi d'une ou plusieurs conditions, toujours entre crochets.then
est suivi des instructions à exécuter quand la condition est vraie.else
est suivi des instructions à exécuter quand la condition est fausse.fi
indique la fin du bloc de condition.elif
.On utilise les symboles classique de comparaisons comme =
ou !=
.
#!/bin/bash
a="bonjour"
b="le monde"
if [ "$a" = "$b" ]; then
echo "Chaines identiques"
else
echo "Chaines différentes."
fi
Avec BASH, les symboles classiques de comparaison ne fonctionnent pas avec les nombres. À la place, on utilise les commandes suivantes .
Comparaison | Utilisation |
---|---|
$a -lt 5 |
Retourne vrai si $a est strictement inférieur à 5 |
$a -le 5 |
Retourne vrai si $a est inférieur ou égal à 5 |
$a -gt 5 |
Retourne vrai si $a est strictement supérieur à 5 |
$a -ge 5 |
Retourne vrai si $a est supérieur ou égal à 5 |
$a -eq 5 |
Retourne vrai si $a est égal à 5 |
$a -ne 5 |
Retourne vrai si $a est différent de 5 |
Ces commandes doivent être entourées de crochets lorsqu'elles sont utilisées avec les structures if
ou while
.
Il est également possible de répéter certaines actions grâce aux différentes structures de boucles.
for
#!/bin/bash
for i in 1 2 3 4 5
do
echo $i
done
for
est très proche du langage Python.do
et done
.Il est possible d'indiquer les valeurs à parcourir de plusieurs façons :
for i in 1 2 3 4 5
do
echo $i
done
#!/bin/bash
for i in $(seq 0 10);
do
echo $i;
done
Il est possible de demander des informations à l'utilisateur. Pour cela, on utilise la commande read
. Cette commande est identique à la commande input
en Python.
echo "Donne-moi ton age : "
read age
echo $age
Pour plus d'indications, vous pouvez lire la documentation disponible ici : https://doc.ubuntu-fr.org/tutoriel/script_shell
Question 1 - Écrire un script message.sh
qui permet d'afficher le message Bienvenue en NSI
.
Question 2 - Modifier ce script pour permettre d'afficher le message indiqué en paramètre du script.
Par exemple, la commande d'exécution du script pourra être ./message.sh "bonjour le monde"
.
Question 1 - Écrire un script arguments.sh
qui permet d'afficher les informations suivantes :
Les informations seront affichées sous la forme suivante :
Nom du script : ...
Nombre d'arguments : ...
Ensemble des arguments : ...
Premier argument : ...
Question 1 - Écrire un script aire.sh
permettant de calculer l'aire d'un rectangle. Les tailles des deux côtés seront passées comme argument du script.
Par exemple, la commande d'exécution du script pourra être ./aire.sh 10 8
.
Question 2 - Écrire le script rectangle.sh
afin de calculer l'aire ou le périmètre d'un rectangle. Le choix du calcul et les dimensions des côtés seront des arguments du script.
-a
pour calculer l'aire ou -p
pour calculer le périmètre.Par exemple, la commande d'exécution du script pourra être ./rectangle -a 18 5
ou ./rectangle -p 18 9
.
Question 1 - Écrire un script age.sh
qui affiche un message si l'utilisateur est majeur ou mineur. Pour cela, le script demandera l'âge à l'utilisateur grâce à la commande read
.
Par exemple, la commande d'exécution du script sera ./age.sh
.
Question 1 - Écrire un script comparer.sh
qui permet de comparer 2 nombres. Ce script affichera un message indiquant quel nombre est le plus grand. En cas d'égalité, un message sera également affiché.
Les deux nombres à comparer seront des arguments du script.
Par exemple, la commande d'exécution du script sera ./comparer.sh 15 9
.
Question 1 - Écrire un script lister_arguments.sh
qui permet de lister tous les arguments du script sous la forme suivante :
./lister_arguments.sh un deux trois quatre
Paramètre 1 -> un
Paramètre 2 -> deux
Paramètre 3 -> trois
Paramètre 4 -> quatre
Pour cela, vous aurez besoin d'une boucle et de la variable spéciale $*.
Question 2 - Écrire un script addition_arguments.sh
qui permet d'additionner tous les nombres passés comme arguments.
Par exemple, la commande d'exécution du script sera ./addition_arguments.sh 3 4 9 10 14
.
Question 1 - Écrire un script table.sh
qui affiche la table de multiplication d'un nombre. Le script prend 2 arguments :
Par exemple, la commande d'exécution du script sera ./table.sh 3 10
.
L'objectif de ce dernier exercice de construire un script permettant de générer plusieurs dossiers et fichiers pour des utilisateurs.
Ce script prend en argument le nom d'un utilisateur et exécute les tâches suivantes :
NSI
, Physique
et Maths
.programme_annee_2023.txt
.Le script peut prendre plusieurs noms d'utilisateurs en argument. Durant l'exécution du script, des messages seront affichés pour indiquer l'avancement et les étapes effectuées.