Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Script SHELL

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 35

PROGRAMMATION UNIX

M. Jean DIOKH
Certifié Linux Professional Institute ( LPIC-3 Core & LPIC-3 Security )
http://www.lpi.org/verify/LPI000201968/9ntq6grjtk
PROGRAMME

Les scripts shell

▪ Le principe

▪ Les exécutions

▪ Shebang

▪ Les options du shell

MASTER1/ESTM- M. DIOKH 2
PROGRAMME

Les variables

▪ Les variables (les types, la création, la manipulation avancée)

▪ Les tableaux (l'initialisation, la manipulation avancée)

▪ Les fichiers de personnalisations d'environnements (profile, bashrc)

L'interactivité

▪ La commande read

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


MASTER1/ESTM- M. DIOKH 3
PROGRAMME

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

Structures de contrôle, boucles:


▪ Test conditionnel (test, […], if then else)
▪ Création de menus (select)
▪ Concordance de chaînes (case)
▪ Boucle itérative (while, until, for)
▪ Interruption (break, continue)

Scripts d'administration système

MASTER1/ESTM- M. DIOKH 4
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).

MASTER1/ESTM- M. DIOKH 5
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

MASTER1/ESTM- M. DIOKH 6
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

MASTER1/ESTM- M. DIOKH 7
SCRIPT SHELL

Créer le fichier script1.sh avec le contenu suivant:


#!/bin/bash
#Mon premier script
#script1.sh
echo "Hello world ! "

Rendre le fichier exécutable:


chmod a+x script1.sh
Exécuter le script
./script1.sh
MASTER1/ESTM- M. DIOKH 8
SCRIPT SHELL

Initialisation de variable:

classe=Master
echo $classe
echo $classe1
echo ${classe}1

DATE=$(date +%d%m%Y)
echo $DATE
MASTER1/ESTM- M. DIOKH 9
SCRIPT SHELL

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

▪ L'interactivité avec read

MASTER1/ESTM- M. DIOKH 10
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


MASTER1/ESTM- M. DIOKH 11
SCRIPT SHELL

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

#!/bin/bash
# srcipt2.sh
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"

./script2.sh un deux trois


MASTER1/ESTM- M. DIOKH 12
SCRIPT SHELL

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

Soit le script anomalie.sh


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

./anomalie.sh un deux trois quatre cinq six sept huit neuf dix onze douze

Quelle est la solution ?


MASTER1/ESTM- M. DIOKH 13
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

MASTER1/ESTM- M. DIOKH 14
SCRIPT SHELL

L'interactivité avec la commande read


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

./script3.sh

MASTER1/ESTM- M. DIOKH 15
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 $?

MASTER1/ESTM- M. DIOKH 16
TEST

Opérateurs de test Opérateurs de comparaison numériques


-e fichier si fichier existe. $A -lt 5 si $A est strictement inférieur à 5
-d fichier si fichier existe et est un répertoire. $A -le 5 si $A est inférieur ou égal à 5
-f fichier si fichier existe et est un fichier $A -gt 5 si $A est strictement supérieur à 5
'normal'.
$A -ge 5 si $A est supérieur ou égal à 5
-w fichier si fichier existe et est en écriture.
$A -eq 5 si $A est égal à 5
-x fichiersi fichier existe et est exécutable.
$A -ne 5 si $A est différent de 5
f1 -nt f2 si f1 est plus récent que f2.
f1 -ot f2 si f1 est plus vieux que f2.

MASTER1/ESTM- M. DIOKH 17
TEST

touch fichier1.txt
test -e fichier1.txt ou [ -e fichier1.txt ]
echo $?
test -x fichier1.txt ou [ -x fichier1.txt ]
echo $?
chmod a+x fichier1.txt
test -x fichier1.txt ou [ -x fichier1.txt ]
echo $?
MASTER1/ESTM- M. DIOKH 18
TEST

Exercice:
Faire un script qui demande à l’utilisateur de saisir le chemin d’un fichier et vérifier si le fichier existe.

MASTER1/ESTM- M. DIOKH 19
IF

Cette boucle sert pour les tests et branchements.


Syntaxe
if <condition> ; then Attention !!! if [ -e file ];
<commande1>
<commande2>
...
else
<commande1>
<commande2>
...
fi
La partie « else... » est optionnelle
MASTER1/ESTM- M. DIOKH 20
IF

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

if [ $id -eq 0 ]; then


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

MASTER1/ESTM- M. DIOKH 21
IF

#!/bin/bash
# script 1
read -p " Entrer le nom du serveur: " serveur
if [ $serveur = "srv1" ]; then
echo "192.168.1.10"
else
echo "Adresse inconnue"
fi

MASTER1/ESTM- M. DIOKH 22
IF

#!/bin/bash
# script 3
if [ $(date +%u) -eq 7 ]
then echo "Sauvegarde complète"
else
echo "Sauvegarde incrémentale"
fi

MASTER1/ESTM- M. DIOKH 23
FOR

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

Syntaxe1:

for variable in *
do
Commande(s)
done

MASTER1/ESTM- M. DIOKH 24
FOR

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

Exemple:
for ((i=0;i<=5;i++))
do
echo $i
done
MASTER1/ESTM- M. DIOKH 25
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

MASTER1/ESTM- M. DIOKH 26
FOR

wget -qN 'http://www.spamhaus.org/drop/drop.txt'

for line in $(cat drop.txt | 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

MASTER1/ESTM- M. DIOKH 27
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
Commandes
done

MASTER1/ESTM- M. DIOKH 28
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

MASTER1/ESTM- M. DIOKH 29
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

MASTER1/ESTM- M. DIOKH 30
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 afficher aussi 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
MASTER1/ESTM- M. DIOKH 31
CASE

#!/bin/bash
echo "Le contenu du répertoire courant va être affiché."
read -p "Souhaitez-vous afficher aussi 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

MASTER1/ESTM- M. DIOKH 32
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.


MASTER1/ESTM- M. DIOKH 33
SELECT

Syntaxe : select <variable> in <liste de choix>

On peut sortir de la boucle avec la commande break.

MASTER1/ESTM- M. DIOKH 34
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
MASTER1/ESTM- M. DIOKH 35

Vous aimerez peut-être aussi