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

SE UNIX - Part3

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

3IIR

Système d’exploitation (UNIX)


3ème partie

Professeur: IOUNOUSSE Jawad


Exercice 3
Modifiez « script.sh » pour permettre de:
a) Afficher un simple message : Vous êtes dans le programme: Nom_du_fichier
b) Demander la saisie de deux nombres nb1 et nb2 consécutivement avec un simple
message de demande.
c) Afficher le résultat des opérations entre nb1 et nb2 avec un message:
- Somme
- Soustraction
- Division
- Multiplication
- Modulo
d) Utiliser maintenant les variables paramètres de « script.sh » pour la saisie des
nombres et refaire c)
e) Vérifier les expressions suivantes en donnant leur code de retour:
- nb1 < nb2
- nb1 = nb2
f) Ajouter 2 autres variables paramètres et vérifier les expressions suivantes en donnant
leur code de retour:
1. nb1 - nb2 > nb4 - nb3 3. nb1 ≥ nb2 or nb4 ≤ nb3
2. nb1 = nb4 and nb2 ≠ nb3
Exercice 3 (Correction)
Modifiez « script.sh » pour permettre de:
a) Afficher un simple message : Vous êtes dans le programme: Nom_du_fichier
#!/bin/bash
echo " Vous êtes dans le programme: " $0
b) Demander la saisie de deux nombres nb1 et nb2 consécutivement avec un simple message
de demande.
read –p "donner nombre1:" nb1
read –p "donner nombre2:" nb2
c) Afficher le résultat des opérations entre nb1 et nb2 avec un message:
echo "La somme des 2 nombres:" `expr $nb1 + $nb2`
echo "La soustraction des 2 nombres:" `expr $nb1 - $nb2`
echo "Le produit des 2 nombres:" `expr $nb1 \* $nb2`
echo "La division des 2 nombres:" `expr $nb1 / $nb2`
echo "Le modulo des 2 nombres:" `expr $nb1 % $nb2`
((s=nb1+nb2)); echo "La somme des 2 nombres: " $s
((s=nb1-nb2)); echo "La soustraction des 2 nombres: " $s
ou ((p=nb1*nb2)); echo "Le produit des 2 nombres: " $p
((d=nb1/nb2)); echo "La division des 2 nombres: " $d
((m=nb1%nb2)); echo "Le modulo des 2 nombres: " $m
Exercice 3 (Correction)
c) Afficher le résultat des opérations entre nb1 et nb2 avec un message:

let "s=nb1+nb2"; echo "La somme des 2 nombres: " $s


let "s=nb1-nb2"; echo "La soustraction des 2 nombres: " $s
ou let "p=nb1*nb2"; echo "Le produit des 2 nombres: " $p
let "d=nb1/nb2"; echo "La division des 2 nombres: " $d
let "m=nb1%nb2"; echo "Le modulo des 2 nombres: " $m
d) Utiliser maintenant les variables paramètres de « script.sh » pour la saisie des nombres et
refaire c)
let "s=$1+$2"; echo "La somme des 2 nombres: " $s
let "s=$1-$2"; echo "La soustraction des 2 nombres: " $s
let "p=$1*$2"; echo "Le produit des 2 nombres: " $p
let "d=$1/$2"; echo "La division des 2 nombres: " $d
let "m=$1%$2"; echo "Le modulo des 2 nombres: " $m
e) Vérifier les expressions suivantes en donnant leur code de retour:
- nb1 < nb2
- nb1 = nb2
nb1=$1 ; nb2=$2
((nb1<nb2)); echo "Le code de retour (nb1<nb2): " $?
((nb1=nb2)); echo "Le code de retour (nb1=nb2): " $?
Exercice 3 (Correction)
f) Ajouter 2 autres variables paramètres et vérifier les expressions suivantes en donnant leur
code de retour:
1. nb1 - nb2 > nb4 - nb3 3. nb1 ≥ nb2 or nb4 ≤ nb3
2. nb1 = nb4 and nb2 ≠ nb3
nb1=$1 ; nb2=$2 ; nb3=$3 ; nb4=$4
((nb1-nb2>nb4-nb3)) ; Cr1=$?
echo "Le code de retour ( nb1-nb2 > nb4-nb3 ): " $Cr1
[ $nb1 -eq $nb4 ] && [ $nb2 –ne $nb3 ] ; Cr2=$?
echo "Le code de retour ( nb1=nb4 and nb2!=nb3 ): " $Cr2
[ $nb1 -ge $nb2 ] || [ $nb4 –le $nb3 ] ; Cr3=$?
echo "Le code de retour ( nb1>=nb2 and nb4<=nb3 ): " $Cr3
Exercice 4
1) Identifiez les fichiers d’initialisation de sessions propres à votre compte.
2) Créez un alias permanent pour remplacer la commande “ls -la” par “ls”.
Exercice 4
1) Les fichiers d'initialisation de sessions propres à un compte utilisateur sur les systèmes de type Unix
comprennent généralement :
 .bash_profile : Ce fichier est exécuté pour les shells de connexion. Il est couramment utilisé pour
définir des variables d'environnement, exécuter des commandes lors de la connexion et définir des alias
spécifiques à l'utilisateur.
 .bashrc : Ce fichier est exécuté pour les shells interactifs non de connexion. Il est souvent utilisé pour
définir des options de shell, définir des fonctions et créer des alias qui ne sont pertinents que pour les
sessions de shell interactives.
 .profile : Ce fichier est exécuté par les shells de connexion avant le démarrage du shell. Il est
similaire à .bash_profile mais n'est pas spécifique au shell Bash. Il peut être utilisé pour définir des
variables d'environnement et exécuter des commandes lors de la connexion.
 .bash_logout : Ce fichier est exécuté lors de la déconnexion d'un shell Bash. Il peut être utilisé pour
effectuer des tâches de nettoyage ou exécuter des commandes avant que l'utilisateur ne se déconnecte.
 .bash_history : Ce fichier stocke l'historique des commandes pour les sessions du shell Bash de
l'utilisateur. Il est utilisé pour conserver un enregistrement des commandes précédemment exécutées.
 .bash_aliases : Ce fichier est utilisé pour définir des alias pour les commandes couramment
utilisées dans le shell Bash. Il est souvent sourcé à partir de .bashrc ou .bash_profile.
Ces fichiers sont situés dans le répertoire personnel de l'utilisateur (généralement
/home/nom_utilisateur) et sont préfixés par un point pour en faire des fichiers cachés. Chaque utilisateur
peut personnaliser ces fichiers selon ses préférences et ses besoins.
2) Ajoutez la ligne suivante à la fin du fichier ".bashrc" :
alias ls='ls -la'
Programmation shell scripts (2)
Les conditions alternatives
 Les structures de contrôle (SI, ALORS, SINON) :
La structure de contrôle if permet de réaliser des tests. La commande située à droite
du if est exécutée.
if condition1
 Si le code retour de la commande ($?) est then
égal à 0 (vrai), les commandes situées dans commande2
le bloc then sont exécutées. ...
elif condition2
 Si le code de retour est supérieur à 0 (faux), then
ce sont les commandes situées dans le bloc commande2
else (optionnel) qui sont exécutées. ...
 Dans le cas où le bloc else n'est pas else
spécifié, le Shell continue à la première commande3
commande située sous le fi. ...
fi
Les conditions alternatives
 Les structures de contrôle (SI, ALORS, SINON) :
Exemple: « time.sh » avec une variable paramètre

#/bin/bash

time=$1
if [ $time -lt 10 ]
then
echo "Good morning"
elif [ $time -lt 20 ]
then
echo "Good day"
else
echo "Good evening"
fi
Branchement à choix multiples
 La structure « case…esac » :
La structure de contrôle case permet elle aussi d'effectuer des tests. Elle permet
d'orienter la suite du programme en fonction d'un choix de différentes valeurs.
Quand il y a un nombre important de choix, la commande case est plus appropriée
que la commande if.

case $variable in
modele1) commande1
...
Il ne faut surtout pas ;;
modele2) commande2
oublier les caractères «;;»
...
car cela engendrera une ;;
erreur !! modele3 | modele4 | modele5 ) commande3
...
;;
esac
Branchement à choix multiples
 La structure « case…esac » :
Exemple: « command.sh » avec une variable paramètre

#!/bin/bash
case $1 in
start)
echo "Starting the service"
;;
stop)
echo "Stopping the service"
;;
restart)
echo "Restarting the service"
;;
*)
echo "Unknown action"
;;
esac
La boucle sur liste de valeurs
 La boucle « for…do...done » :
La boucle « for… do…done » va boucler autant de fois qu'il existe de valeurs dans la
liste. À chaque tour, la variable « $var » prendra séquentiellement comme contenu la
valeur suivante de la liste.

for var in valeur


do
commande
done

 Boucle sur nombres:

#!/bin/bash
for var in 1 2 3 4 5
do
echo "Number is $var"
done
La boucle sur liste de valeurs
 La boucle « for…do...done » :

 Boucle sur intervalle:


#!/bin/bash
for var in {10..15}
do
echo "Number is $var"
done

 Boucle sur intervalle avec incrémentation:


#!/bin/bash
for var in {0..10..2}
do
echo "Number is $var"
done
La boucle sur liste de valeurs
 La boucle « for…do...done » :

 Boucle sur chaines de caractères:


#!/bin/bash
for month in Jan Feb Mar Apr May Jun
do
echo "Month is $month"
done

 Boucle infinie:

#!/bin/bash
for (( ; ; ))
do
echo "Boucle infinie [Appuyez sur CTRL+C pour stopper]"
done
La boucle sur liste de valeurs
 La boucle « for…do...done » :
 Rupture d’une boucle par break:
#!/bin/bash
for var in {20..30}
do
if [[ "$var" == '27' ]]; then
break
fi
echo "Number is: $var"
done

 Rupture d’une boucle et continuation par continue:


#!/bin/bash
for var in {10..15}
do
if [[ "$var" == '13' ]]; then
continue
fi
echo "Number is: $var"
done
La boucle sur liste de valeurs
 La boucle « for…do...done » :

La boucle for possède une deuxième syntaxe :

for ((e1;e2;e3))
do instruction(s)
done

Dans laquelle, e1, e2 et e3 sont des expressions arithmétiques. Une telle boucle
commence par exécuter l'expression e1, puis tant que l'expression e2 est différente de
zéro le bloc d'instructions est exécuté et l'expression e3 évaluée. Exemple:

for ((i=0 ; 10 - $i ; i++))


do echo $i
done

TP: Écrivez un script qui compte à rebours de 5 à 0, avec une pause d’une seconde à
chaque affichage. (en rouge)
La boucle sur conditions
 La boucle « while…do...done » et « until…do...done » :

La boucle « while do…done » exécute une


séquence de commandes tant que la while condition
do
dernière commande de la « liste de
commandes
commandes » est « vrai » (statut égal à zéro). done
La boucle « until do…done » exécute une until condition
do
séquence de commandes tant que la
commandes
dernière commande de la « liste de done
commandes » est « faux » (statut différent de
zéro).
La boucle sur conditions
 La boucle « while…do...done » :

 La boucle while:
#!/bin/bash
num=5
while [ $num -ge 0 ]
do
echo $num
((num--))
done

 La boucle while infinie:


#!/bin/bash
while true
do
echo "Boucle infinie [Appuyez sur CTRL+C pour stopper]"
sleep 0.5
done

TP: Écrire un script qui affiche la date en permanence, chaque écriture écrasant la
précédente.
La boucle sur conditions
 La boucle « while…do...done » :

 La boucle while avec break:

#!/bin/bash
num=5
while [ $num -ge 0 ]
do
echo $num
((num--))
if [[ "$num" == '3' ]]; then
echo "Sortie de la boucle par break"
break
fi
done
La boucle sur conditions
 La boucle « while…do...done » :

 La boucle while avec continue:

#!/bin/bash
num=6
while [ $num -ge 1 ]
do
((num--))
if [[ "$num" == '3' ]]; then
echo "etape ignoree par continue"
continue
fi
echo $num
done
La boucle sur conditions
 La boucle « until…do...done » :

 La boucle until:
#!/bin/bash
num=5
until [ $num -le 1 ]
do
echo $num
((num--))
done

 La boucle until infinie:


#!/bin/bash
until false
do
echo "Boucle infinie [Appuyez sur CTRL+C pour stopper]"
sleep 0.5
done
Exercice 5

1- Faites un programme qui permet de calculer et d'afficher la factorielle d'un


nombre donné en paramètre:
n ! = 1 × 2 × ... × (n−1) × n par convention 0 ! = 1

2- Changez le script de façon à donner le nombre par demande de saisie en cas


d’absence de paramètres.
3- Ajoutez dans le script le calcul qui élève le nombre (en paramètre ou saisi) à sa
propre puissance:
n n avec 0 0 = 1

Donnez les versions du script utilisant les boucles for, while et until.
Exercice 6

1- Ecrivez un programme qui permet d’afficher un triangle isocèle formé d'étoiles de


N lignes (N est fourni au clavier) exemple:

Nombre de lignes : 8
*
***
*****
*******
*********
***********
*************
***************

Vous aimerez peut-être aussi