Classe de mémorisation 1
1. Exercice n°1 : Ecrire un script qui demande un nom en paramètre de ligne de
commande et qui teste si le nom passé est Bruno ou pas? ... nom2="Marcel". if [
$nom1 = $nom2 ]. then. echo "Salut les jumeaux !" fi. A vous de jouer. Corrigé. #!/
bin/bash. if [ $1 = "Bruno" ]. then. echo "Salut Bruno !" else. echo "J'te connais ...
Part of the document
Exercice n°1 : Ecrire un script qui demande un nom en paramètre de ligne de commande et
qui teste si le nom passé est Bruno ou pas... |[pic] |[pic] | Un petit exemple pour vous aider :
#!/bin/bash
nom1="Bruno"
nom2="Marcel"
if [ $nom1 = $nom2 ]
then
echo "Salut les jumeaux !"
fi A vous de jouer.
Corrigé
#!/bin/bash
if [ $1 = "Bruno" ]
then
echo "Salut Bruno !"
else
echo "J'te connais pas, ouste !"
fi Exercice n°2 : Ecrire un script shell qui demande un nombre et qui dit si ce nombre est
pair ou impair. |[pic] |[pic] | Un petit exemple de code qui lit le contenu saisi au clavier :
#!/bin/bash
first_num=0
second_num=0
echo -n "Enter the first number --> "
read first_num
echo -n "Enter the second number -> "
read second_num echo "first number + second number ="+$((first_num + second_num))
echo "first number - second number ="+$((first_num - second_num))
echo "first number * second number ="+$((first_num * second_num))
echo "first number / second number ="+$((first_num / second_num)) A vous de jouer. Corrigé
|#!/bin/bash |
|number=0 |
|echo -n "Saisir un nombre > " |
|read number |
| |
|echo "Le nombre saisi est $number" |
|if [ $((number % 2)) -eq 0 ]; then |
|echo "Le nombre est pair" |
|else |
|echo "Le nombre est impair" |
|fi |
Exercice n°3 : Ecrire un script shell qui demande une réponse uniquement par oui ou non. |[pic] |[pic] | Un petit exemple de l'utilisation de while :
#!/bin/bash
x=1
while [ $x -le 5 ]
do
echo "Welcome $x times"
x=$(( $x + 1 ))
done
Corrigé
#!/bin/bash
question="Réponse (oui/non) ?: "
reponse="rien"
# ne pas oublier l'espace apres while puis les crochets [ ]
while [ $reponse != "oui" -a $reponse != "non" ]
do
echo $question
read reponse
done
echo "Enfin, vous avez compris....." Exercice n°4 Ecrire un script shell qui demande la saisie de 3 chaines de caractères
puis les compare. |[pic] |[pic] |
|[pic] | |
| |[pic] | Un petit exemple de l'utilisation de if.....then..... elif :
#!/bin/bash
a=10
b=20
if [ $a == $b ] then
echo "a is equal to b"
elif [ $a -gt $b ] then
echo "a is greater than b"
elif [ $a -lt $b ] then
echo "a is less than b"
else
echo "None of the condition met"
fi Corrigé
#! /bin/bash
if [ $# -eq 0 ] # pas de paramètre, on lit les chaînes sur stdin
then
echo "chaine 1 ? \c"
read ch1
echo "chaine 2 ? \c"
read ch2
echo"chaine 3 ? \c"
read ch3
elif [ $# -ne 3 ] #nombre de paramètres différent de 3 : erreur.
then
echo nombre de paramètres incorrect >&2
exit 5
else # les chaînes sont présentes sous la forme de paramètres, on les
affecte aux variables ch1, ch2, ch3
ch1=$1; ch2=$2; ch3=$3
fi
# ici, nous avons trois chaînes : ch1, ch2, ch3 , sont-elles identiques ?
if [ $ch1 = $ch2 -a $ch2 = $ch3 ] # ou encore if [ $ch1 = $ch2 ]
&& [ $ch2 = $ch3 ]
then
echo les trois chaînes sont identiques
exit 0
elif [ $ch1 = $ch2 ]
then
echo les deux premières sont identiques
exit 1
elif [ $ch1 = $ch3 ]
then
echo la première et la dernière sont identiques
exit 2
elif [ $ch2 = $ch3 ] # ou encore if test $ch2 = $ch3
then
echo les deux dernières sont identiques
exit 3
else #elles sont donc toutes différentes
echo les trois chaînes sont différentes
exit 4
fi Exercice n°5 : On se propose d'écrire un script shell qui nous donne le jour de la
semaine.
[pic]
#!/bin/bash
NOW=$(date +"%m-%d-%Y")
FILE="backup.$NOW.tar.gz" Voici la liste des formats de date :
|%FORMAT |Description |
|String | |
|%% |a literal % |
|%a |locale's abbreviated weekday name (e.g., Sun)|
|%A |locale's full weekday name (e.g., Sunday) |
|%b |locale's abbreviated month name (e.g., Jan) |
|%B |locale's full month name (e.g., January) |
|%c |locale's date and time (e.g., Thu Mar 3 |
| |23:05:25 2005) |
|%C |century; like %Y, except omit last two digits|
| |(e.g., 21) |
|%d |day of month (e.g, 01) |
|%D |date; same as %m/%d/%y |
|%e |day of month, space padded; same as %_d |
|%F |full date; same as %Y-%m-%d |
|%g |last two digits of year of ISO week number |
| |(see %G) |
|%G |year of ISO week number (see %V); normally |
| |useful only with %V |
|%h |same as %b |
|%H |hour (00..23) |
|%I |hour (01..12) |
|%j |day of year (001..366) |
|%k |hour ( 0..23) |
|%l |hour ( 1..12) |
|%m |month (01..12) |
|%M |minute (00..59) |
|%n |a newline |
|%N |nanoseconds (000000000..999999999) |
|%p |locale's equivalent of either AM or PM; blank|
| |if not known |
|%P |like %p, but lower case |
|%r |locale's 12-hour clock time (e.g., 11:11:04 |
| |PM) |
|%R |24-hour hour and minute; same as %H:%M |
|%s |seconds since 1970-01-01 00:00:00 UTC |
|%S |second (00..60) |
|%t |a tab |
|%T |time; same as %H:%M:%S |
|%u |day of week (1..7); 1 is Monday |
|%U |week number of year, with Sunday as first day|
| |of week (00..53) |
|%V |ISO week number, with Monday as first day of |
| |week (01..53) |
|%w |day of week (0..6); 0 is Sunday |
|%W |week number of year, with Monday as first day|
| |of week (00..53) |
|%x |locale's date representation (e.g., 12/31/99)|
|%X |locale's time representation (e.g., 23:13:48)|
|%y |last two digits of year (00..99) |
|%Y |year |
|%z |+hhmm numeric timezone (e.g., -0400) |
|%:z |+hh:mm numeric timezone (e.g., -04:00) |
|%::z |+hh:mm:ss numeric time zone (e.g., -04:00:00)|
|%:::z |numeric time zone with : to necessary |
| |precision (e.g., -04, +05:30) |
|%Z |alphabetic time zone abbreviation (e.g., EDT)|
Voici un exemple d'utilisation d'un switch case :
#!/bin/bash echo "Enter a number between 1 and 10. "
read NUM case $NUM in
1) echo "one" ;;
2) echo "two" ;;
3) echo "three" ;;
4) echo "four" ;;
5) echo "five" ;;
6) echo "six" ;;
7) echo "seven" ;;
8) echo "eight" ;;
9) echo "nine" ;;
10) echo "ten" ;;
*) echo "INVALID NUMBER!" ;;
esac Corrigé version switch case
#! /bin/bash
# Affichage du jour de la semaine en lettres
if [ $# -lt 1 ]
then
$d=$(date +%w) # %w afin d'avoir le jour de la semaine 0......6
phrase="Aujourd'hui c'est"
else
$d=$1
phrase="Le jour donné correspond à"
fi
case $d in
0 ) jour=Dimanche ;;
1 ) jour=Lundi ;;
2 ) jour=Mardi ;;
3 ) jour=Mercredi ;;
4 ) jour=Jeudi ;;
5 ) jour=Vendredi ;;
6 ) jour=Samedi ;;
7 ) jour=Dimanche ;;
esac
echo
$phrase $jour Corrigé version if...then.....elif....fi
#! /bin/bash
# Affichage du jour de la semaine en lettres
if [ $# -lt 1 ]
then
d=$(date +%w)
phrase="Aujourd'hui c'est"
else
d=$1
phrase="Le jour donné correspond à"
fi
if [ $d -eq 0 ]; then jour=Dimanche
elif [ $d -eq 1 ]; then jour=Lundi
elif [ $d -eq 2 ]; then jour=Mardi
elif [ $d -eq 3 ]; then jour=Mercredi
elif [ $d -eq 4 ]; then jour=Jeudi
elif [ $d -eq 5 ]; then jour=Vendredi
elif [ $d -eq 6 ]; then jour=Samedi
elif [ $d -eq 7 ]; then jour=Dimanche
else jour = indéterminé
fi
echo
$phrase $jour Exercice n°6 : Créer un script dans lequel deux nombres opérandes et un signe opérateur (+-
*/) devront être donnés en paramètres, ou saisis. Le script doit réaliser
l'opération souhaitée. Exemple :
[pic]