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

Linux - 4

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

Système Linux

Pr: Yousef EL MOURABIT


Plan

Programmation Shell

 Introduction aux scripts Shell

 Les variables

 Les conditions

 Les boucles

 Les fonctions

2
Programmation Shell

Introduction aux scripts shell


 Toutes les commandes que nous nous avons vu jusqu‘à présent sont
standards et ne sont pas propres à un shell particulier.

Avant d'entamer la programmation shell elle-même, il nous faut voir


quelques options détaillées du shell par défaut, le Bourne Shell

 L’interprète de commandes (shell) permet d’interagir avec le système

 Exècution de commandes (modification / consultation de l’état du système)

 Utilisation avancée : combinaison de commandes par exemple en redirigeant


les entrées/sorties

 Programmation shell : combinaison de commandes au sein d’un script dans le


but d’automatiser certains taches

3
Programmation Shell

Introduction aux scripts shell

 Le shell est le programme qui gère l'invite de commandes. C'est donc le


programme qui attend que vous rentriez des commandes:

 Auto compléter une commande ou un nom de fichier

 Gérer les processus (envoi en arrière-plan, mise en pause avec Ctrl + Z…)

 Rediriger et chaîner les commandes (les fameux symboles >, <, |, etc.)

 Le shell fournit toutes les fonctionnalités de base pour pouvoir lancer des
commandes

4
Gestion des processus et des flux de données
Introduction aux scripts shell

 Une commande peut être interne ou externe.

 Une commande interne est une commande directement incluse et


interprétée par le shell, sans passer par un quelconque exécutable.
Un exemple est la commande cd.

 Une commande externe est un exécutable que le shell recherchera dans une
liste de chemins prédéfinis, le PATH, puis exécutera en tant que processus ls.

5
Programmation Shell

Introduction aux scripts shell

 Les principaux shell existants

sh : Bourne Shell. L'ancêtre de tous les shells.


bash : Bourne Again Shell. Une amélioration du Bourne Shell, disponible par
défaut sous Linux et Mac OS X.
ksh : Korn Shell. Un shell puissant assez présent sur les Unix propriétaires,
mais aussi disponible en version libre, compatible avec bash.
csh : C Shell. Un shell utilisant une syntaxe proche du langage C.
tcsh : Tenex C Shell. Amélioration du C Shell.
zsh : Z Shell. Shell assez récent reprenant les meilleures idées de bash, ksh
et tcsh.

6
Programmation Shell

Introduction aux scripts shell

 Le bash est installé sur Ubuntu par défaut.

 Si vous voulez essayer un autre shell, comme ksh par exemple, vous pouvez
le télécharger comme n'importe quel paquet (apt-get install ksh, chsh,
bin/ksh…

Pour écrire du script shell il faut crée un fichier en utilisant un éditeur de


texte ( nano, vi…)

Un Script shell correspond à un fichier exécutable d’extension .sh et


débutant par : #!/bin/bash

7
Programmation Shell

Introduction aux scripts shell

Un Script shell correspond à un fichier exécutable d’extension .sh.

 Première ligne : #!/bin/bash

 Ecrire les commandes que vous souhaitez exécuter

 les commentaires commencent par un #.

 Enregistrer le fichier et fermer l’éditeur

 donner le droit d’exécution au fichier

Exécution du script en tapant « ./ » devant le nom du fichier (./script.sh)

8
Programmation Shell

Introduction aux scripts shell

 Exécution de débogage: bash -x fichier.sh

 Le PATH est une variable système qui indique où sont les programmes
exécutables sur votre ordinateur. Si vous tapez echo $PATH vous aurez la
liste de ces répertoires « spéciaux ».

 Copier le script dans un de ces répertoires


comme /bin, /usr/bin ou /usr/local/bin .

9
Programmation Shell

Les Variables

Déclaration et affectation

 Une variable est une donnée identifiée par un nom. Le nom d’une variable
est une suite de caractères alphanumérique.

 Un nom de variable obéit à certaines règles :

 Il peut être composé de lettres minuscules, majuscules, de chiffres, de


caractères de soulignement.

 Le premier caractère ne peut pas être un chiffre

 La taille d'un nom est en principe illimite (il ne faut pas abuser non plus)

 Les conventions veulent que les variables utilisateur soient en minuscules


pour les différencier des variables système. Au choix de l'utilisateur.

10
Programmation Shell

Les Variables

 Une variable est déclarée des qu'une valeur lui est affectée. L'affectation
est effectuée avec le signe =, sans espace avant ou après le signe.
exemple: var=Bonjour.

 la commande echo affiche dans la console tous les paramètres qu'elle reçoit
 echo –e : Activer le retour à la ligne \n.
 Pour afficher une variable, utiliser le nom précédé du symbole dollar $
 Pour afficher à la fois du texte et la variable, faire attention
au « quottes ».

Exemple:
test=‘hello world'
echo $test
Echo ‘le message est $test‘ erreur
Echo ‘’le message est $test‘’

11
Programmation Shell

Les Variables

read : Demander une saisie

Exemple:
 read nom
echo "Bonjour $nom !’’

 read -p 'Entrez votre nom : ' nom


echo "Bonjour $nom !’’

 read –n : limiter le nombre de caractères

read –t : limiter le temps autoriser pour saisir un message

read –s : ne pas afficher le texte saisi.

12
Programmation Shell

Les Variables

Les opérations arithmétiques

 En bash, les variables sont toutes des chaînes de caractères. En soi, le


bash n'est pas vraiment capable de manipuler des nombres ; il n'est donc pas
capable d'effectuer des opérations.

 Heureusement, il est possible de passer par des commandes). Ici, la


commande à connaître est let . (+;-^;*;**;/;%)
Exemple:
#!/bin/bash
let "a = 5“
let "b = 2“
let "c = a + b"
echo $c

13
Programmation Shell

Les Variables
Les variables d'environnement

 Les variables d'environnement sont des variables que l'on peut utiliser dans
n'importe quel programme. On parle aussi parfois de variables globales. Vous
pouvez afficher toutes celles que vous avez actuellement en mémoire avec la
commande env :

Exemples:
 SHELL : indique quel type de shell est en cours d'utilisation (sh, bash…)
 PATH : une liste des répertoires qui contiennent des exécutables
 EDITOR : l'éditeur de texte par défaut
 HOME : la position de votre dossier home
 PWD : le dossier dans lequel vous vous trouvez
 OLDPWD : le dossier dans lequel vous vous trouviez auparavant.

les noms de ces variables sont, par convention, écrits en majuscules.

14
Programmation Shell

Les Variables

Les variables des paramètres

 Comme toutes les commandes, vos scripts bash peuvent eux aussi accepter
des paramètres.
 Récupération des paramètres:
$# : contient le nombre de paramètres
$0 : contient le nom du script exécuté
$1 : contient le premier paramètre
$2 : contient le second paramètre
…;
Exemple:
#!/bin/bash
echo "Vous avez lancé $0, il y a $# paramètres"
echo "Le paramètre 1 est $1’’
./test.sh param1 param2 param3
Vous avez lancé ./test.sh, il y a 3 paramètres Le paramètre 1 est param1

15
Programmation Shell

Les Variables

Les tableaux
Le bash gère également les variables « tableaux ». Ce sont des variables qui
contiennent plusieurs cases:

Exemples:
 tableau=('valeur0' 'valeur1' 'valeur2')
${tableau[2]}

 #!/bin/bash
tableau=('valeur0' 'valeur1' 'valeur2')
tableau[5]='valeur5'
echo ${tableau[*]}

16
Programmation Shell

Les structures alternatives

Instruction if

Syntaxe 1 : Syntaxe 2 :
if [ condition ] if [ condition ]
then then
action1 action1
fi else
action2
fi

 Teste de la valeur d’une variable


Tester les valeurs des paramètres
Comparaison de deux variables
17
Programmation Shell

Les structures alternatives

Instructions if imbriquées

if [ condition 1 ]
then
action1
elif [ condition 2 ]
then
action2
elif [ condition 3 ]
action3
...
else
actionN
Fi
 Inversement du test: if [ !condition ]
18
Programmation Shell

Les structures alternatives

Instructions case

case valeur_de_variable in
val1)
commandes
;;
val2)
commandes
;;
...
*)
commandes
esac

19
Programmation Shell

Les structures alternatives


Les types de tests:
 Il est possible d’effectuer trois types de tests différents en bash :
 Tests des chaînes de caractères
 Tests des nombres
 Tests des fichiers

 Tests des chaînes de caractères

Condition Signification

$chaine1 = $chaine2 Vérifie si les deux chaînes sont identiques.


Il est aussi possible d'écrire « == » pour les
habitués du langage C.
$chaine1 != $chaine2 Vérifie si les deux chaînes sont différentes.
-z $chaine Vérifie si la chaîne est vide.
-n $chaine Vérifie si la chaîne est non vide.
20
Programmation Shell
Les structures alternatives

Tests des nombres

Condition Signification

$num1 -eq $num2 Vérifie si les nombres sont égaux (equal). À ne pas
confondre avec le « = » qui, lui, compare deux chaînes
de caractères.
$num1 -ne $num2 Vérifie si les nombres sont différents (nonequal).
Encore une fois, ne confondez pas avec « != » qui est
censé être utilisé sur des chaînes de caractères.
$num1 -lt $num2 Vérifie sinum1est inférieur ( < ) ànum2(lowerthan).
$num1 -le $num2 Vérifie sinum1est inférieur ou égal ( <= )
ànum2(lowerorequal).
$num1 -gt $num2 Vérifie sinum1est supérieur ( > ) ànum2(greaterthan).
$num1 -ge $num2 Vérifie sinum1est supérieur ou égal ( >= )
ànum2(greaterorequal).
21
Programmation Shell
Les structures alternatives
Tests des fichiers
Condition Signification

-e $nomfichier Vérifie si le fichier existe.


-d $nomfichier Vérifie si le fichier est un répertoire.
-f $nomfichier Vérifie si le fichier est un… fichier. Un vrai fichier
cette fois, pas un dossier.
-L $nomfichier Vérifie si le fichier est un lien symbolique
-r $nomfichier Vérifie si le fichier est lisible (r).
-w $nomfichier Vérifie si le fichier est modifiable (w).
-x $nomfichier Vérifie si le fichier est exécutable (x).
$fichier1 -nt $fichier2 Vérifie sifichier1est plus récent
quefichier2(newerthan).
$fichier1 -ot $fichier2 Vérifie sifichier1est plus vieux
quefichier2(olderthan).
22
Programmation Shell
Les structures alternatives

Exercice:
Ecrire un script qui demande à l'utilisateur d'entrer le nom d'un
répertoire et qui vérifie si c'en est bien un.

#!/bin/bash
read -p 'Entrez un répertoire : ' repertoire
if [ -d $repertoire ]
then
echo ’Bien, vous avez entrer un répertoire’
else
echo ’ce n’est pas un répertoire...’
fi

23
Programmation Shell
Les structures alternatives

 On peut effectuer plusieurs tests à la fois en utilisant les operateurs


logiques:

 && : signifie « et »
 || : signifie « ou »
Exemple: if [ condition1 ] && [ condition2 ]

Exercice:
Ecrire un script shell qui nous informe:
si le fichier accepte au moine un paramètre et si le premier paramètre vaut
MID2017 afficher le message ‘ vous avez trouvez le mot de passe‘ si non
afficher ‘mot de passe erroné’.
#!/bin/bash
if [ $# -ge 1 ] && [ $1 = ‘MID2017' ]
then
echo ’’msg1"
else
echo ’’msg2’’
fi 24
25
Programmation Shell

Les structures répétitives

Instruction for

for var in liste


do for i in `seq 1 10`
do
commandes echo $i
done done

Exemple :
for file in *.sh for fichier in `ls`
do do mv $fichier $fichier-old
cat $file done
Done
Exercice:
Renommer tous les fichiers du répertoire actuel en leur ajoutant un
suffixe.(-mid).
26
Programmation Shell

Les structures répétitives

Tests des nombres


while [ condition ]
do
commandes
Done

Exemple:
1) Que fait le script suivant?
#!/bin/bash
while [ -z $reponse ] || [ $reponse != ‘DWAM2018' ]
do read -p ‘Ecrire DWAM2018 : ' reponse
done

27
Programmation Shell

Les Fonctions

Dans un programme script, on peu regrouper un ensemble d’instructions dans


une fonction qui sera identifiée par un nom.

# déclaration méthode 1 # déclaration méthode 2


function maFonction
maFonction ()
{
{ bloc d’instructions
bloc d’instructions }
} #appel de la fonction
#appel de ma fonction maFonction
maFonction

28
Programmation Shell

Exercices
Exercices:
1) La boucle while
Ecrire un programme shell qui affiche les arguments du programme, dans
l'ordre d'apparition (1er argument en premier). Si le programme n'a aucun
argument, afficher « sans argument ».
Indication : Utilisez la commande shift. (décalage des paramètres)

2) La boucle for
Ecrire un programme shell qui affiche tous les sous-répertoires du répertoire
courant, en utilisant une boucle.

3) Que fait le script suivant :


#!/bin/bash
((test $1 -lt $2) && (echo ’$1 < $2’)) || (echo ’$2 < $1’)
Récrivez ce script en utilisant une structure conditionnelle if then else fi.

29
Merci de votre
attention

30
Programmation Shell

Solutions:
Exercice 1 Exercice 2:
#!/bin/sh #!/bin/sh
if [ $# -eq 0 ]; then for rep in *; do # pour chaque fichier "rep"
echo "sans argument" du repertoire courant
exit 0 if [ -d "$rep" ]; then # si rep est un repertoire
fi echo $rep # affiche rep
fi
while [ $# -gt 0 ]; do
done
echo $1
shift
done

31

Vous aimerez peut-être aussi