CM 5 : Programmation Bash - Grégory Bonnet

une suite d'instructions dans le langage utilisé par les terminaux. = un ”petit” programme utilisant les instructions et commandes des terminaux hello.sh. ♯!/bin/ ...
248KB taille 76 téléchargements 113 vues
C.M. 5 : Programmation Bash Gr´egory Bonnet [email protected] GREYC – Universit´ e Caen Basse Normandie

Diaporama original : Jean-Philippe M´ etivier – Boris Lesner

Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash

Un script bash ? script bash = une suite d’instructions dans le langage utilis´e par les terminaux = un ”petit” programme utilisant les instructions et commandes des terminaux hello.sh ]!/bin/bash echo "Hello World!" Pour ex´ecuter un script bash : soit on donne les droits d’ex´ecution au script et on l’ex´ecute de la mani`ere suivante ./hello.sh ; soit on le lance grˆace `a l’interpr´eteur bash de la mani`ere suivante sh hello.sh. Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash

Les variables Une variable permet de stocker une valeur et peut ˆetre utilis´ee pour d´esigner cette valeur. Le nom d’une variable est une chaˆıne de alphanum´erique : une chaˆıne de caract`eres commen¸cant par au moins une lettre puis une suite de lettres ou de chiffres. Deux op´erations peuvent ˆetre effectu´ees : 1

donner une valeur (affectation) : nom variable=valeur

2

lire le contenu d’une variable : $nom variable hello2.sh ]!/bin/bash nom="John Doe" echo "Hello $nom !"

Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash

Les variables d’environnement

Certaines variables sont utilis´ees par le syst`eme : elles sont appel´ees des variables d’environnement : $USER et $UID : donne le login et l’identifiant de l’utilisateur connect´e $HOME et $PWD : donne le chemin absolu des r´epertoires home et courant de l’utilisateur connect´e ... On peut lister les variables d’environnement utilis´ees par le syst`eme grˆace `a la commande env et en ajouter temporairement grˆace `a export.

Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash

Les valeurs pass´ees en arguments On peut passer des valeurs en argument `a un script (exactement comme pour une commande). jdoe@trantor :∼$ sh script.sh argument1 argument2 $0 ${i} $] $* $?

le nom du script ex´ecut´e le i ieme argument le nombre d’arguments une chaine de caract`eres de tous les arguments code de retour d’un programme

La fonction shift permet de d´ecaler les arguments d’un rang vers la gauche : le deuxi`eme devient le premier, le troisi`eme le deuxi`eme et ainsi de suite. N.B. shift n de mˆeme que shift mais avec un d´ecalage de n. Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash

` vous de jouer A

´ Ecrire un script saluant l’utilisateur avec son nom et lui donnant la date : en utilisant la variable d’environnement stockant le login ; en utilisant une valeur pass´ee en argument. ´ Ecrire un script affichant le nom du script, le nombre d’arguments et la liste des arguments.

Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash

´ Evaluer une expression On peut effectuer des op´erations arithm´etiques : + la somme - la soustraction * la mutilplication / la division (en nombre entier) Pour ´evaluer une op´eration, on utilise : $((operation)) operation.sh valeur1=5 valeur2=3 chaine=$valeur1+$valeur2-1 resultat=$(($valeur1+$valeur2-1)) echo "L’operation $chaine a pour resultat $resultat"

Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash

´ Evaluer une expression

Comparer des chaˆınes de caract`eres : ´egalit´e = ....... diff´erence != Comparer des entiers : ´egalit´e -eq diff´erence plus grand plus petit -lt pp ou ´egale -le ....... pg ou ´egale

-ne -gt -ge

‘test valeur op valeur ‘ [ valeur op valeur ] N.B. : les espaces sont importants.

Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash

Branchement conditionnel : if

if (si en anglais) est une structure qui permet d’ex´ecuter une suite d’instructions si un test est verifi´e. if condition ........then instruction fi Exemple : if ‘test "$1" -lt 10‘ ........then le premier argument est inf´erieur a 10 fi

Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash

Branchement conditionnel : if On peut ajouter le bloc optionnel else pour ex´ecuter des instructions en cas o` u le test serait faux. if condition ........then instruction OK ........else instruction KO fi Exemple : if [ "$1" = "pass" ] ........then echo "le mot pass" ........else echo "pas le mot pass" fi

Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash

` vous de jouer A

´ Ecrire un script qui calcule pour deux nombres pass´es en arguments leur somme et leur produit. ´ Ecrire un script qui v´erifie si le login donn´e en entr´ee est celui de la personne connect´ee au terminal. ´ Ecrire une petite calculatrice qui prend en entr´ee le premier nombre puis l’operateur et le second nombre, et qui affiche l’op´eration et son r´esultat.

Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash

Conditions multiples On peut ´ecrire des tests li´es par et en utilisant -a : if [ "$jour" = 11 -a "$mois" = novembre ] ........then echo "jour ferie" fi On peut ´ecrire des tests li´es par ou en utilisant -o : if [ "$we" = 1 -o "$ferie" = 1 -o $vacances = 1 ] ........then echo "repos" fi Ou la n´egation de la condition (!) : if [ ! $1 -lt 5 ] ........then echo "superieur ou egal a 5" fi Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash

Boucle conditionnelle : while L’instruction while (tant que en anglais) permet d’ex´ecuter des instructions tant qu’un test est verifi´e : while condition ; do ........ instruction done Exemple : un while qui compte des moutons. i=0 while [ $i -le $1 ]; do ........ echo $i moutons ........ i=$(($+1)) done

Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash

It´eration : for L’instruction for (pour en anglais) permet d’ex´ecuter des instructions sur chaque ´element d’une liste : for variable in liste ; do ........ instruction done Exemple :

for f in 1 2 3 4; do echo $f done

for f in ‘seq 1 4‘; do echo $f done

for f in $(ls); do cat $f done Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash

` vous de jouer A ´ Ecrire un script retournant la factorielle de la valeur pass´ee en entr´ee (rappel : factoriel(5)= 1 × 2 × 3 × 4 × 5) ´ Ecrire un script dessinant un carr´e de cˆ ot´e n. * *** dessine rectangle(3) ⇒ *** *** De mˆeme avec un triangle rectangle isoc`ele de cˆot´e n. * * dessine triangle(3) ⇒ ** ***

Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash

Fonctionnalit´es diverses

La fonction read permet de lire une entr´ee clavier. jdoe@trantor:∼$ read x 50 jdoe@trantor:∼$ echo $x 50 La variable $RANDOM retourne un nombre al´eatoire. Pour que le nombre soit compris entre 0 et n (non inclus) on peut utiliser le modulo (%). echo ”Un nombre entre 1 et 10 : $(($RANDOM%10+1))”

Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash

` vous de jouer A

Le calcul mental : ´ecrire un petit jeu de calcul mental en proposant deux nombres (entre 1 et 10) et un operateur (+ ou *) et qui attend la r´eponse du joueur. Une fois la r´eponse donn´ee le script v´erifie le r´esultat s’il est bon. La basse-cour : tant que la valeur pass´e en argument n’est pas atteinte, on tire un nombre al´eatoire entre 0 et 3 et on ajoute un animal dans la basse-cour (si c’est un 0 il s’agit d’un mouton, pour 1 d’un cochon, 2 d’une poule et 3 un vache). Apr`es avoir fait l’ajout `a la basse-cour de l’animal, le script affiche le nombre de fois que chacun des animaux est pr´esent dans la basse cour.

Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash

case Plutˆot qu’enchaˆıner les if, on peut utiliser un case : case "$variable" in .... motif1) instruction1 ;; .... motif2) instruction2 ;; .... *) instruction ;; esac Exemple : for f in $(ls); do ....case "$f" in ....*.temp ) rm $f ;; ....*.css ) mv $f style;; esac

Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash

` vous de jouer A

La basse-cour : r´e´ecrire basse-cour avec un case plutot qu’un if.

Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash

Test sur les fichiers Il existe des tests particuliers pour les fichiers -e le fichier existe ? -d le repetoire existe ? -f le fichier regulier existe ? -r le fichier poss`ede les droits de lecture ? -w le fichier poss`ede les droits d’´ecriture ? -x le fichier poss`ede les droits d’ex´ecution ? Exemple : for f in $(ls); do .... if [ -f $f -a -x $f ] .... .... then echo $f .... fi done

Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash

´ Ecrire des fonctions

Un fonction permet de factoriser un morceau de code qui sera souvent appel´e. function nom fonction () { commande } Les arguments de la fonction n’ont pas besoin d’ˆetre sp´ecifi´es lors de sa d´efinition et sont accessibles grˆace `a $1, ...

Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash

´ Ecrire des fonctions factoriel.sh # !/bin/bash function factorielle () { res=1 for i in ‘seq 1 $1‘ ; do res=$(($res*$i)) done echo $res } factorielle 1 factorielle 10

Gr´ egory Bonnet [email protected]

C.M. 5 : Programmation Bash