universite grenoble alpes´ · 2020-06-11 · structures de controle et fonctions en shellˆ...

27
Tests Structures conditionnelles It´ erations Fonctions Structures de contr ˆ ole et fonctions en shell Syst ` eme et environnement de programmation Universit ´ e Grenoble Alpes INF203 (UGA) shell 1 / 27

Upload: others

Post on 09-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Structures de controle et fonctions en shell

Systeme et environnement de programmation

Universite Grenoble Alpes

INF203 (UGA) shell 1 / 27

Page 2: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Plan

1 Tests

2 Structures conditionnelles

3 Iterations

4 Fonctions

INF203 (UGA) shell 2 / 27

Page 3: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Code de retour

$? = code retour de la derniere commande executee

Convention : 0 = commande terminee sans erreurs

Exemples

cp toto.txt tutu.txtecho $?⇒ affiche 0

cpecho $?⇒ affiche 1

Plusieurs valeurs positives differentes peuvent etre utilisees pourdiscriminer le type d’erreur (cf. manuel de chaque commande)

INF203 (UGA) shell 3 / 27

Page 4: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Code de retour

Autres usages

pour certaines commandes, comme grep, le code de retourpermet de discriminer le resultat

Exemplegrep motif fichier

$? vaut 0 si et seulement simotif apparaıt dans fichier au moins une fois

exit val termine un script avec val comme code de retourCe code sera visible via $? dans le shell appelant

INF203 (UGA) shell 4 / 27

Page 5: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

La commande test

test a pour code de retour 0 si et seulement si l’expression qui lui estdonnee en arguments est vraie

Syntaxe : test expression ou [ expression ]

Tres utilisee en conjonction avec les structures conditionnelles et lesboucles while, surtout sous la seconde forme (compacte)

INF203 (UGA) shell 5 / 27

Page 6: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

test, expressions sur les fichiers et repertoires

Syntaxe : option fichier(attention aux espaces)

option signification-e fich existe-s fich n’est pas vide-f fich est un fichier-d fich est un repertoire-r fich a le droit r (lecture)-w fich a le droit w (ecriture)-x fich a le droit x (execution)

Exemple

# code de retour nul si toto.txt existetest -e toto.txt

INF203 (UGA) shell 6 / 27

Page 7: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

test, expressions sur les entiers

Syntaxe : n1 option n2

(attention aux espaces)

option signification-eq n1 = n2

-ne n1 6= n2

-lt n1 < n2

-gt n1 > n2

-le n1 ≤ n2

-ge n1 ≥ n2

Exemple

# code de retour nul si la variable x represente# un entier strictement inferieur a 42[ $x -lt 42 ]

INF203 (UGA) shell 7 / 27

Page 8: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

test, expressions sur les chaines

Syntaxe : option chaine ou chaine1 option chaine2

(attention aux espaces)

option signification-z chaine est vide-n chaine n’est pas vide= les 2 chaines sont identiques!= les 2 chaines sont differentes

Exemple

# code de retour nul si la variable x contient# la chaine "INF203"[ $x = "INF203" ]

INF203 (UGA) shell 8 / 27

Page 9: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

test, operateurs booleens sur les expressions

Expression Interpretation logiqueexpr1 -a expr2 ETexpr1 -o expr2 OU! expr NON

Plus parenthesage : \( \)Exemple

# code de retour nul si la variable dir represente :# - un repertoire accessible en execution[ -d $dir -a -x $dir ]# - un repertoire accessible en lecture ou en execution[ -d $dir -a \( -r $dir -o -x $dir \) ]

INF203 (UGA) shell 9 / 27

Page 10: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Plan

1 Tests

2 Structures conditionnelles

3 Iterations

4 Fonctions

INF203 (UGA) shell 10 / 27

Page 11: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Structure conditionnelle simple

Syntaxe

if <condition>then

# a executer si la condition est vraie<suite de commandes 1>

else# a executer sinon<suite de commandes 2>

fi

La partie else est facultative.

La condition est determinee par le code de retour ($?) d’unecommande, souvent on se contente de la commande test

INF203 (UGA) shell 11 / 27

Page 12: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Structures conditionnelles imbriquees

Sucre syntaxique pour imbriquer des if dans la partie else :

if <condition 1>then

<suite de commandes 1>elif <condition 2>then

<suite de commandes 2>else

<suite de commandes 3>fi

INF203 (UGA) shell 12 / 27

Page 13: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Exemples (1)

#!/bin/bashmod=$(expr $1 % 2)if [ $mod -eq 0 ]then

echo $1 est pairelse

echo $1 est impairfi

INF203 (UGA) shell 13 / 27

Page 14: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Exemples (2)

#!/bin/bash

# attention aux espaces apres ’[’ et avant ’]’

if [ $1 -gt $2 ]then

echo $1 est plus grand que $2else

echo $1 n’est pas plus grand que $2fi

INF203 (UGA) shell 14 / 27

Page 15: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Exemples (3)

#!/bin/bash

# La condition peut etre n’importe quelle commande

if cd ˜/INF203/TP1then

echo Je peux me rendre dans mon repertoire de TP1else

echo Probleme : mon repertoire de TP1 n’existe pasecho ou je n’ai pas le droit de m’y rendre

fi

INF203 (UGA) shell 15 / 27

Page 16: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Exemples (4)

#!/bin/bashif [ -d $1 ]then

echo "$1 est un repertoire"elif [ -f $1 ]then

echo "$1 est un fichier "if [ -x $1 ]then

echo "executable"fi

elseecho "$1 n’existe pas !"

fi

INF203 (UGA) shell 16 / 27

Page 17: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Remarque sur le typage (avec test)

#!/bin/bash# le type d’une variable est deduit du contexte# sa valeur est convertie dans le bon type au besoinV1=042if [ $V1 -eq 42 ] # V1 est vue comme un entier

then echo ’$V1 vaut bien 42’fiif [ $V1 != 42 ] # V1 est vue comme une chaıne

then echo "mais \$V1 n’est pas 42"fi

INF203 (UGA) shell 17 / 27

Page 18: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Plan

1 Tests

2 Structures conditionnelles

3 Iterations

4 Fonctions

INF203 (UGA) shell 18 / 27

Page 19: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Boucle while

Syntaxe

while <condition>do

<suite de commandes>done

Exemple

#!/bin/bashecho "donnez un nom de fichier"read fichwhile [ ! -f $fich ]do

echo "$fich n’existe pas, donnez un autre nom"read fich

done

INF203 (UGA) shell 19 / 27

Page 20: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Un while sans test

#!/bin/bashnum=1while read lignedo

echo "$num : $ligne"num=$(expr $num + 1)

done

INF203 (UGA) shell 20 / 27

Page 21: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Boucle for

Syntaxe

for <variable> in <liste>do

<suite de commandes>done

INF203 (UGA) shell 21 / 27

Page 22: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Exemples (1)

#!/bin/bash

cd $HOME/INF203for i in 1 2 3do

ls -l TP$idone

for fich in *.odo

rm $fichdone

INF203 (UGA) shell 22 / 27

Page 23: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Exemples (2)

#!/bin/bash

if [ ! -d Executables ]then

mkdir Executablesfi

for fich in *do

if [ -f $fich -a -x $fich ]then

mv $fich Executablesfi

done

INF203 (UGA) shell 23 / 27

Page 24: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Plan

1 Tests

2 Structures conditionnelles

3 Iterations

4 Fonctions

INF203 (UGA) shell 24 / 27

Page 25: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Definition d’une fonction

Syntaxe

<nom_fonction>() {<suite de commandes>

}

INF203 (UGA) shell 25 / 27

Page 26: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Exemples (1)

#!/bin/bash

accumule() {# $i est le ieme parametre de la fonctionsomme=$(expr $somme + $1)}

somme=0for i in 1 2 3 4 5do

accumule $idone

echo "somme = $somme"

INF203 (UGA) shell 26 / 27

Page 27: Universite Grenoble Alpes´ · 2020-06-11 · Structures de controle et fonctions en shellˆ Systeme et environnement de programmation` Universite Grenoble Alpes ... echo ou je n’ai

Tests Structures conditionnelles Iterations Fonctions

Exemples (2)

#!/bin/bash

lire() {somme=0while read lignedoecho "ligne : " $lignesomme=$(expr $somme + $ligne)echo "somme " $somme

done}

lire < fichier_d_entiers

INF203 (UGA) shell 27 / 27