0% ont trouvé ce document utile (0 vote)
2 vues47 pages

Programmation Système

Le document présente un programme de formation en programmation système Linux, axé sur la création de scripts shell. Il couvre des sujets tels que les variables, l'interactivité, les structures de contrôle, et les commandes de test. Des exemples pratiques illustrent l'utilisation des scripts pour automatiser des tâches administratives et de gestion de services.

Transféré par

THE BASKETBALL
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
2 vues47 pages

Programmation Système

Le document présente un programme de formation en programmation système Linux, axé sur la création de scripts shell. Il couvre des sujets tels que les variables, l'interactivité, les structures de contrôle, et les commandes de test. Des exemples pratiques illustrent l'utilisation des scripts pour automatiser des tâches administratives et de gestion de services.

Transféré par

THE BASKETBALL
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

PROGRAMMATION SYSTÈME LINUX

2024-2025/ESMT/MASTER ISI&SSI

M. Abagana Mahamat KACHALLAH


Certifié Linux Professional Institute LPIC-2 LINUX ENGINEER
Oracle Cloud Infrastructure Architect Associate ORACLE
PROGRAMME

Programmation SHELL
▪ Les scripts shell
▪ Les variables
▪ L'interactivité
▪ L'arithmétique : les instructions expr, let, bc
▪ Structures de contrôle, boucles
▪ Menu
▪ Scripts d'administration système

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 2


PROGRAMMATION SHELL
SCRIPT SHELL

Le SHELL - Le rôle du SHELL

Un système d'exploitation fournit au moins un shell ou d'une interface; ce qui vous permet de dire à
l'ordinateur ce qu'il doit faire.
Un shell permet d’exécuter des instructions que vous saisissez au clavier ou au sein d’un script et vous en
retourne les résultats. Il prend les commandes saisis par l’utilisateur et les interprète en une forme que
le noyau peut exécuter sur le matériel de l'ordinateur.

Les deux types shell les plus distingués sont le Graphical User Interface (GUI) et Command Line Interface
(CLI).

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 3


PROGRAMMATION SHELL
SCRIPT SHELL

Un script SHELL permet d'automatiser une série d’instructions.

Il se présente sous la forme d'un fichier contenant une ou plusieurs commandes qui seront exécutées de
manière séquentielle.

La première ligne du script (shebang) precise l’interpréteur de commande.

Exemple: #!/bin/bash

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 4


PROGRAMMATION SHELL
SCRIPT SHELL

Pour pouvoir exécuter un script, deux conditions doivent être remplies :


− la première ligne doit contenir: #!/bin/bash ;
− le fichier doit être exécutable: chmod +x mon_script
./mon_script

Si toutes ces conditions ne sont pas remplies, il est toujours possible de forcer l’exécution du script avec la
commande bash:
bash mon_script

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 5


PROGRAMMATION SHELL
SCRIPT SHELL

Les variables

classe=Master var1=$(date +%d%m%Y) var2=`date +%d%m%Y`


echo $classe echo $var1 echo $var2
echo $classe1
echo ${classe}1

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 6


PROGRAMMATION SHELL
SCRIPT SHELL

Les variables: variable d’environnement

Une variable définie n’est accessible que dans le SHELL courant. Elle n’est pas transmise aux processus fils.
Pour qu’elle soit transmise aux processus fils, il faut utiliser le mot clef :
export variable

L’affichage des variables d’environnement se fait avec la commande env

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 7


PROGRAMMATION SHELL
SCRIPT SHELL

Les variables: variable d’environnement

Soit le script afficher_classe


#!/bin/bash
echo "le contenu de la variable classe est: $classe"

classe=Master
./afficher_classe
export classe
./afficher_classe
MPSI1/ESMT- M. DIOKH & M. KACHALLAH 8
PROGRAMMATION SHELL
SCRIPT SHELL

L'interactivité

▪ Passage d'arguments ($0, $n, $#, $*, ...)

▪ La commande read

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 9


PROGRAMMATION SHELL
SCRIPT SHELL

▪ Passage d'arguments ($0, $n, $#, $*, ...)

Les paramètres:
$1,$2,...,$9 premier paramètre, deuxième,...

Les paramètres spéciaux:


$0 Contient le nom du script
$* L'ensembles des paramètres
$# Le nombre de paramètres passés au script
$? Le code retour de la dernière commande
MPSI1/ESMT- M. DIOKH & M. KACHALLAH 10
PROGRAMMATION SHELL
SCRIPT SHELL

▪ Passage d'arguments ($0, $n, $#, $*, ...)


#!/bin/bash
# [Link]
echo "Le nom de mon script est : $0"
echo "Vous avez passé $# paramètres"
echo "Voici la liste des paramètres $*"
echo " le premier paramètre $1"
echo " le deuxième paramètre $2"

./[Link] un deux trois


MPSI1/ESMT- M. DIOKH & M. KACHALLAH 11
PROGRAMMATION SHELL
SCRIPT SHELL

L'interactivité : Passage d'arguments ($0, $n, $#, $*, ...)

Soit le script [Link]


# !/bin/bash
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12

./[Link] un deux trois quatre cinq six sept huit neuf dix onze douze

Quelle est la solution ?


MPSI1/ESMT- M. DIOKH & M. KACHALLAH 12
PROGRAMMATION SHELL
SCRIPT SHELL

L'interactivité avec la commande read

L’instruction read permet de créer des scripts interactifs.

La commande read lit son entrée standard et affecte la valeur saisie dans la variable passée en argument;
on peut avoir plusieurs variable

Exemple: read nom

-p pour afficher un message et -s pour cacher la valeur saisie

Exemple: read -p "Entrez votre nom: " nom


MPSI1/ESMT- M. DIOKH & M. KACHALLAH 13
PROGRAMMATION SHELL
SCRIPT SHELL

L'interactivité avec la commande read

# !/bin/bash
#[Link]
read -p "login: " var1
read -sp "password: " var2
echo "Votre login est: $var1 et votre mot de passe: $var2 "

./[Link]

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 14


PROGRAMMATION SHELL
SCRIPT SHELL

L'arithmétique : les instructions expr, let, bc

$(($i+1)) ou $[$i+1] ou expr $i \+ 1

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 15


PROGRAMMATION SHELL
TEST

La commande test ou [ …. ]

La commande test permet de faire un test et de renvoyer 0 si tout s'est bien passé ou 1 en cas d'erreur.
La valeur retourne se trouve dans la variable $?

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 16


PROGRAMMATION SHELL
TEST

Opérateurs de test
-e fichier si fichier existe.
-d fichier si fichier existe et est un répertoire.
-f fichier si fichier existe et est un fichier 'normal'.
-w fichier si fichier existe et est en écriture.
-x fichier si fichier existe et est exécutable.
f1 -nt f2 si f1 est plus récent que f2.
f1 -ot f2 si f1 est plus vieux que f2.

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 17


PROGRAMMATION SHELL
TEST

Opérateurs de comparaison numériques


$A -lt 5 si $A est strictement inférieur à 5
$A -le 5 si $A est inférieur ou égal à 5
$A -gt 5 si $A est strictement supérieur à 5
$A -ge 5 si $A est supérieur ou égal à 5
$A -eq 5 si $A est égal à 5
$A -ne 5 si $A est différent de 5

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 18


PROGRAMMATION SHELL
TEST

Opérateurs de comparaison de chaines chaine1 = chaine2 si chaine1 égal à chaine2


chaine1 != chaine2 si chaine1 différent de chaine2
chaine1 =~ regex si chaine1 correspond à l’expression régulière regex
chaine1 > chaine2 si chaine1 supérieur à chaine2
chaine1 < chaine2 si chaine1 inférieur à chaine2
-z chaine si la taille de la chaine est égale à zéro
-n chaine si la taille de la chaine n’est pas égale de zéro

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 19


PROGRAMMATION SHELL
TEST

touch [Link]
test -e [Link] ou [ -e [Link] ]
echo $?
test -x [Link] ou [ -x [Link] ]
echo $?
chmod a+x [Link]
test -x [Link] ou [ -x [Link] ]
echo $?
MPSI1/ESMT- M. DIOKH & M. KACHALLAH 20
PROGRAMMATION SHELL
IF

Cette instruction sert pour les tests et branchements.

Syntaxe
if condition ; then if condition ; then if condition ; then

liste_commandes liste_commandes liste_commandes


else elif condition; then
fi
liste_commandes liste_commandes
fi else
liste_commandes
Attention !!! if [ -e file ]; fi
MPSI1/ESMT- M. DIOKH & M. KACHALLAH 21
PROGRAMMATION SHELL
IF

Ecrire un programme qui affiche « Vous êtes l’administrateur » si vous êtes connecté en tant que root
sinon le message « Vous êtes utilisateur simple ».

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 22


PROGRAMMATION SHELL
IF

#!/bin/bash
id=`id -u`

if [ $id -eq 0 ]; then


echo "Vous êtes administrateur"
else
echo "Vous êtes utilisateur simple"
fi

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 23


PROGRAMMATION SHELL
IF

#!/bin/bash
# Authentification

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 24


PROGRAMMATION SHELL
IF

#!/bin/bash
# Authentification
read -p 'username: ' username
read -s -p 'password: ' password
if [ $username == "admin" -a $password == "secret" ]; then
echo "login/mot de passe correct"
else
echo "login/mot de passe incorrect "
fi
MPSI1/ESMT- M. DIOKH & M. KACHALLAH 25
PROGRAMMATION SHELL
IF

#!/bin/bash
# Sauvegarde hebdomadaire

Effectuer la sauvegarde d’un dossier…. !!! La commande date

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 26


PROGRAMMATION SHELL
IF

#!/bin/bash
# Sauvegarde hebdomadaire
if [ $(date +%u) -eq 7 ]
then echo "Sauvegarde hebdomadaire"
else
echo "Sauvegarde simple"
fi

Effectuer la sauvegarde d’un dossier…. !!! La commande date


MPSI1/ESMT- M. DIOKH & M. KACHALLAH 27
PROGRAMMATION SHELL
IF

Ecrire un programme de gestion d’un service avec IF

Le script :
- crée le fichier /tmp/[Link] s’il reçoit l’argument start
- sinon supprime le fichier /tmp/[Link] s’il reçoit l’argument stop
- sinon fait un stop puis un start s’il reçoit l’argument restart
- sinon affiche l’aide

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 28


PROGRAMMATION SHELL
CASE

Case permet de remédier aux inconvénients de if (elif)

Syntaxe:
case variable in
choix1) liste_commandes ;;
choix2) liste_commandes ;;
….
esac

« * » représente le choix par défaut.


MPSI1/ESMT- M. DIOKH & M. KACHALLAH 29
PROGRAMMATION SHELL
CASE

Case permet de remédier aux inconvénients de if (elif)

#!/bin/bash
echo "Le contenu du répertoire courant va être affiché."
read -p "Souhaitez-vous aussi afficher les fichiers cachés (oui/non) : " choix
case $choix in
oui) ls -a;;
non) ls ;;
*) echo "Veuillez répondre par oui ou par non.";;
esac
MPSI1/ESMT- M. DIOKH & M. KACHALLAH 30
PROGRAMMATION SHELL
CASE

case " $(groups) " in *\ admin\ *|*\ sudo\ *)


if [ -x /usr/bin/sudo ]; then
cat <<-EOF
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

EOF
fi
esac
MPSI1/ESMT- M. DIOKH & M. KACHALLAH 31
PROGRAMMATION SHELL
FOR

Cette boucle sert pour répéter les traitements un nombre de fois connu.

Syntaxe1:
for variable in liste; do
liste_commandes
done

Exemple
for jour in lundi mardi mercredi; do
echo $jour
done
MPSI1/ESMT- M. DIOKH & M. KACHALLAH 32
PROGRAMMATION SHELL
FOR

Syntaxe2:
for ((initialisation;condition_darrêt;incrémentation));
do
liste_commandes
done

Exemple:
for ((i=0;i<=5;i++))
do
echo $i
done
MPSI1/ESMT- M. DIOKH & M. KACHALLAH 33
PROGRAMMATION SHELL
FOR

#!/bin/bash
#Table de multiplication

Ecrire un programme affiche la table de multiplication d’un nombre; demander à l’utilisateur de saisir une
valeur s’il ne passe pas l’argument.

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 34


PROGRAMMATION SHELL
FOR

#!/bin/bash
#Table de multiplication
if [ $# -eq 0 ]; then
echo "donner un argument"
else for i in 1 2 3 4 5 6 7 8 9; do
expr $i \* $1
done
fi

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 35


PROGRAMMATION SHELL
FOR

if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 36


PROGRAMMATION SHELL
FOR

#!/bin/bash
wget -qN '[Link]

for line in $(cat [Link] | grep -i SBL | cut -f 1 -d ';')


do
if [[ $line =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}$ ]]; then
iptables -A INPUT -s $line -j DROP
fi
done
MPSI1/ESMT- M. DIOKH & M. KACHALLAH 37
PROGRAMMATION SHELL
WHILE

Cette boucle sert pour répéter les traitements un nombre de fois inconnu a priori.

Le test de continuité se fait au début de la boucle.

La boucle continue tant que la condition est vraie.

Syntaxe:
while [ condition ]
do
liste_commandes
done
MPSI1/ESMT- M. DIOKH & M. KACHALLAH 38
PROGRAMMATION SHELL
WHILE

Exemple:
Pour faire le test de lecture d’une valeur jusqu’à ce que l’utilisateur entre la valeur 5 :

#!/bin/bash
nbm=0
while [ $nbm -ne 5 ]; do
read -p "Entrez le nombre magique pour sortir: " nbm
done

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 39


PROGRAMMATION SHELL
WHILE

Exemple:
Pour faire le test de lecture d’une valeur jusqu’à ce que l’utilisateur entre la valeur 5 :

#!/bin/bash
nbm=0
while [ $nbm -ne 5 ]; do
read -p "Entrez le nombre magique pour sortir: " nbm
done

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 40


PROGRAMMATION SHELL
WHILE

Exemple:
Lecture des lignes d’un fichier :

#!/bin/bash
file='/etc/issue'
while read line; do
echo $line
done < $file

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 41


PROGRAMMATION SHELL
SELECT

La commande select est utilisée pour demander à un utilisateur de choisir une valeur et une seule dans

une liste de valeurs prédéfinies.

L’invite à afficher est à indiquer dans la variable prédéfinie PS3.

La commande select a deux arguments : la liste des valeurs proposées, et une variable dans laquelle sera

stockée la valeur choisie.

Le numéro de la valeur choisie sera stocké dans la variable prédéfinie REPLY.


MPSI1/ESMT- M. DIOKH & M. KACHALLAH 42
PROGRAMMATION SHELL
SELECT

Syntaxe :

select <variable> in <liste de choix>; do

liste_commandes

done

On peut sortir de la boucle avec la commande break.

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 43


PROGRAMMATION SHELL
SELECT

#!/bin/bash

PS3=" Veuillez choisir l’opération -> "

select operation in "Retrait" "Versement" " Transfert"

do

echo "Vous avez fait le choix numéro $REPLY..."

echo "Vous allez faire une opération de: $operation "

done
MPSI1/ESMT- M. DIOKH & M. KACHALLAH 44
PROGRAMMATION SHELL
LES FONCTIONS

Fonctions

Pour déclarer une fonction, on utilise la syntaxe suivante :

maFonction() function ma_fonction {


{ instructions
instructions }
}

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 45


PROGRAMMATION SHELL
LES FONCTIONS

Fonctions

#!/bin/bash
check_fichier() {
if [ -e $fichier ]; then
echo "le fichier $fichier existe"
else
echo "le fichier $fichier n'existe pas"
fi
}
check_fichier

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 46


PROGRAMMATION SHELL
LES FONCTIONS

Fonctions

#!/bin/bash
read -p "Entrer le fichier" fichier
check_fichier() {
if [ -e $fichier ]; then
echo "le fichier $fichier existe"
else
echo "le fichier $fichier n'existe pas"
fi
}
check_fichier

MPSI1/ESMT- M. DIOKH & M. KACHALLAH 47

Vous aimerez peut-être aussi