CM 5 : Programmation Bash

Transcription

CM 5 : Programmation Bash
C.M. 5 : Programmation Bash
Grégory Bonnet
[email protected]
GREYC – Université Caen Basse Normandie
Diaporama original : Jean-Philippe Métivier – Boris Lesner
Grégory Bonnet [email protected]
C.M. 5 : Programmation Bash
Un script bash ?
script bash
= une suite d’instructions dans le langage utilisé par les terminaux
= un ”petit” programme utilisant les instructions et commandes
des terminaux
hello.sh
]!/bin/bash
echo "Hello World!"
Pour exécuter un script bash :
soit on donne les droits d’exécution au script et on l’exécute
de la manière suivante ./hello.sh ;
soit on le lance grâce à l’interpréteur bash de la manière
suivante sh hello.sh.
Grégory Bonnet [email protected]
C.M. 5 : Programmation Bash
Les variables
Une variable permet de stocker une valeur et peut être utilisée
pour désigner cette valeur.
Le nom d’une variable est une chaı̂ne de alphanumérique : une
chaı̂ne de caractères commençant par au moins une lettre puis une
suite de lettres ou de chiffres.
Deux opérations peuvent être effectuées :
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égory Bonnet [email protected]
C.M. 5 : Programmation Bash
Les variables d’environnement
Certaines variables sont utilisées par le système : elles sont
appelées des variables d’environnement :
$USER et $UID : donne le login et l’identifiant de l’utilisateur
connecté
$HOME et $PWD : donne le chemin absolu des répertoires home
et courant de l’utilisateur connecté
...
On peut lister les variables d’environnement utilisées par le système
grâce à la commande env et en ajouter temporairement grâce à
export.
Grégory Bonnet [email protected]
C.M. 5 : Programmation Bash
Les valeurs passées en arguments
On peut passer des valeurs en argument à un script (exactement
comme pour une commande).
jdoe@trantor :∼$ sh script.sh argument1 argument2
$0
${i}
$]
$*
$?
le nom du script exécuté
le i ieme argument
le nombre d’arguments
une chaine de caractères de tous les arguments
code de retour d’un programme
La fonction shift permet de décaler les arguments d’un rang vers
la gauche : le deuxième devient le premier, le troisième le deuxième
et ainsi de suite.
N.B. shift n de même que shift mais avec un décalage de n.
Grégory Bonnet [email protected]
C.M. 5 : Programmation Bash
À vous de jouer
Écrire 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ée en argument.
Écrire un script affichant le nom du script, le nombre d’arguments
et la liste des arguments.
Grégory Bonnet [email protected]
C.M. 5 : Programmation Bash
Évaluer une expression
On peut effectuer des opérations arithmétiques :
+ la somme
- la soustraction
* la mutilplication
/ la division (en nombre entier)
Pour évaluer une opération, 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égory Bonnet [email protected]
C.M. 5 : Programmation Bash
Évaluer une expression
Comparer des chaı̂nes de caractères :
égalité = ....... différence !=
Comparer des entiers :
égalité -eq
différence
plus grand
plus petit -lt
pp ou égale -le ....... pg ou égale
-ne
-gt
-ge
‘test valeur op valeur ‘
[ valeur op valeur ]
N.B. : les espaces sont importants.
Grégory Bonnet [email protected]
C.M. 5 : Programmation Bash
Branchement conditionnel : if
if (si en anglais) est une structure qui permet d’exécuter une suite
d’instructions si un test est verifié.
if condition
........then instruction
fi
Exemple :
if ‘test "$1" -lt 10‘
........then le premier argument est inférieur a 10
fi
Grégory Bonnet [email protected]
C.M. 5 : Programmation Bash
Branchement conditionnel : if
On peut ajouter le bloc optionnel else pour exécuter des
instructions en cas où 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égory Bonnet [email protected]
C.M. 5 : Programmation Bash
À vous de jouer
Écrire un script qui calcule pour deux nombres passés en
arguments leur somme et leur produit.
Écrire un script qui vérifie si le login donné en entrée est celui
de la personne connectée au terminal.
Écrire une petite calculatrice qui prend en entrée le premier
nombre puis l’operateur et le second nombre, et qui affiche
l’opération et son résultat.
Grégory Bonnet [email protected]
C.M. 5 : Programmation Bash
Conditions multiples
On peut écrire des tests liés par et en utilisant -a :
if [ "$jour" = 11 -a "$mois" = novembre ]
........then echo "jour ferie"
fi
On peut écrire des tests liés par ou en utilisant -o :
if [ "$we" = 1 -o "$ferie" = 1 -o $vacances = 1 ]
........then echo "repos"
fi
Ou la négation de la condition (!) :
if [ ! $1 -lt 5 ]
........then echo "superieur ou egal a 5"
fi
Grégory Bonnet [email protected]
C.M. 5 : Programmation Bash
Boucle conditionnelle : while
L’instruction while (tant que en anglais) permet d’exécuter des
instructions tant qu’un test est verifié :
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égory Bonnet [email protected]
C.M. 5 : Programmation Bash
Itération : for
L’instruction for (pour en anglais) permet d’exécuter des
instructions sur chaque élement 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égory Bonnet [email protected]
C.M. 5 : Programmation Bash
À vous de jouer
Écrire un script retournant la factorielle de la valeur passée en
entrée (rappel : factoriel(5)= 1 × 2 × 3 × 4 × 5)
Écrire un script dessinant un carré de côté n.
*
***
dessine rectangle(3) ⇒
***
***
De même avec un triangle rectangle isocèle de côté n.
*
*
dessine triangle(3) ⇒
**
***
Grégory Bonnet [email protected]
C.M. 5 : Programmation Bash
Fonctionnalités diverses
La fonction read permet de lire une entrée clavier.
jdoe@trantor:∼$ read x
50
jdoe@trantor:∼$ echo $x
50
La variable $RANDOM retourne un nombre aléatoire. 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égory Bonnet [email protected]
C.M. 5 : Programmation Bash
À vous de jouer
Le calcul mental : écrire un petit jeu de calcul mental en
proposant deux nombres (entre 1 et 10) et un operateur (+
ou *) et qui attend la réponse du joueur. Une fois la réponse
donnée le script vérifie le résultat s’il est bon.
La basse-cour : tant que la valeur passé en argument n’est pas
atteinte, on tire un nombre aléatoire 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ès avoir fait l’ajout à la basse-cour de l’animal, le script
affiche le nombre de fois que chacun des animaux est présent
dans la basse cour.
Grégory Bonnet [email protected]
C.M. 5 : Programmation Bash
case
Plutôt 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égory Bonnet [email protected]
C.M. 5 : Programmation Bash
À vous de jouer
La basse-cour : réécrire basse-cour avec un case plutot qu’un
if.
Grégory 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ède les droits de lecture ?
-w le fichier possède les droits d’écriture ?
-x le fichier possède les droits d’exécution ?
Exemple :
for f in $(ls); do
.... if [ -f $f -a -x $f ]
.... .... then echo $f
.... fi
done
Grégory Bonnet [email protected]
C.M. 5 : Programmation Bash
Écrire des fonctions
Un fonction permet de factoriser un morceau de code qui sera
souvent appelé.
function nom fonction ()
{
commande
}
Les arguments de la fonction n’ont pas besoin d’être spécifiés lors
de sa définition et sont accessibles grâce à $1, ...
Grégory Bonnet [email protected]
C.M. 5 : Programmation Bash
Écrire 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égory Bonnet [email protected]
C.M. 5 : Programmation Bash

Documents pareils