« Graver en ligne de commande » : différence entre les versions
Aller à la navigation
Aller à la recherche
m (change <code bash> en <pre>) |
m (change <pre> en ajout d'un espace en début de ligne) |
||
Ligne 5 : | Ligne 5 : | ||
Surtout ne pas hésiter à améliorer le script, il est sur le wiki rien que pour ça. | Surtout ne pas hésiter à améliorer le script, il est sur le wiki rien que pour ça. | ||
#!/bin/sh | |||
#!/bin/sh | #-----------------------------------------------# | ||
#-----------------------------------------------# | # Script pour graver en console plus facilement # | ||
# Script pour graver en console plus facilement # | # nécessite genisoimage, wodim, # | ||
# nécessite genisoimage, wodim, # | # éventuellement oggdec, sox, lame, flac... # | ||
# éventuellement oggdec, sox, lame, flac... # | # pour les conversions de fichiers audio # | ||
# pour les conversions de fichiers audio # | #-----------------------------------------------# | ||
#-----------------------------------------------# | |||
#------------------ Reste à Faire : -----------------------------# | |||
#------------------ Reste à Faire : -----------------------------# | # Préciser les dépendances # | ||
# Préciser les dépendances # | # Ajouter une fonction pour vérifier que les dépendances sont là # | ||
# Ajouter une fonction pour vérifier que les dépendances sont là # | # Revoir la gravure de fichiers audio # | ||
# Revoir la gravure de fichiers audio # | # Une meilleure vérification des données # | ||
# Une meilleure vérification des données # | #----------------------------------------------------------------# | ||
#----------------------------------------------------------------# | |||
set -eu | |||
set -eu | |||
LISTE=/tmp/liste | |||
LISTE=/tmp/liste | LISTEAGRAVER=/tmp/liste_graver | ||
LISTEAGRAVER=/tmp/liste_graver | TMPDIR=/tmp/gravure | ||
TMPDIR=/tmp/gravure | GRAVURE='1' | ||
GRAVURE='1' | |||
ERR_INTEGR=101 | |||
ERR_INTEGR=101 | |||
choix_fichier_ () { | |||
choix_fichier_ () { | local FICHIER='' | ||
# Fonction qui va choisir le fichier | |||
# Fonction qui va choisir le fichier | # on quitte lorsque l'on rentre la valeur 0 | ||
# on quitte lorsque l'on rentre la valeur 0 | # On enregistre une liste des fichiers, le choix fait est reporté | ||
# On enregistre une liste des fichiers, le choix fait est reporté | # dans la LISTEAGRAVER | ||
# dans la LISTEAGRAVER | case "$1" in | ||
'iso' ) | |||
;; | |||
'donnees' ) | |||
echo 'Choisir la liste des fichiers à ajouter :' | |||
while [ "$FICHIER" != 0 ]; do | |||
ls -ApX | nl -n ln | tee "$LISTE" | |||
echo '------------------------------------------' | |||
echo "0 \t J'ai fini! \n" | |||
read CHOIX | |||
if [ "$CHOIX" = 0 ]; then | |||
break | |||
else | |||
FICHIER=$(echo "$PWD/$(sed -n ${CHOIX}p $LISTE | awk -F"\t" '{print $2}')") | |||
# Le nom du fichier est enregistré dans /tmp/liste_graver | |||
#S'il s'agit d'un répertoire, on propose de l'ajouter à la liste, ou d'aller dedans | |||
case "$FICHIER" in | |||
*/ | .. ) echo "1) Changer de répertoire : $FICHIER" | |||
echo '2) Ajouter ce répertoire pour le graver' | |||
read R | |||
case $R in | |||
1 ) cd "$FICHIER" ;; | |||
2 ) echo "$FICHIER" >> "$LISTEAGRAVER" ;; | |||
esac | |||
;; | |||
*) echo "$FICHIER" >> "$LISTEAGRAVER" ;; | |||
esac | |||
fi | |||
done | |||
;; | |||
esac | |||
} | |||
} | |||
edite_ () { | |||
edite_ () { | local C=1 | ||
while [ "$C" != 0 ]; do | |||
echo "Voici la liste des fichiers à graver : \n" | |||
cat "$LISTEAGRAVER" | |||
echo "\n \n" | |||
echo "1)\t Ajouter des fichiers " | |||
echo "2)\t Enlever des fichiers" | |||
echo "0)\t J'ai fini! " | |||
read C | |||
case $C in | |||
1 ) choix_fichier_ ;; | |||
0 ) break ;; | |||
2 ) echo 'Que supprimer?' | |||
nl -n ln "$LISTEAGRAVER" | |||
read SUPPR | |||
if [ "$SUPPR" -le $(wc -l < "$LISTEAGRAVER") ] && [ "$SUPPR" != "" ] ; then | |||
sed ${SUPPR}d "$LISTEAGRAVER" > /tmp/listetmp | |||
mv /tmp/listetmp $LISTEAGRAVER | |||
else | |||
echo "*** Erreur, ce numéro n'est pas disponible ***" | |||
echo '*** Entrez un choix valide ***' | |||
fi | |||
;; | |||
* ) echo 'Veuillez entrer un choix valide' ;; | |||
esac | |||
done | |||
} | |||
} | |||
# controle de l'image | |||
# controle de l'image | # Retourne 0 si le CD gravé est conforme à l'image ISO, | ||
# Retourne 0 si le CD gravé est conforme à l'image ISO, | # 1 sinon. | ||
# 1 sinon. | verif_integrite_ () { | ||
verif_integrite_ () { | local MD5_ISO=$(md5sum "$1" | awk '{print $1}') | ||
echo "md5sum de l'iso : $MD5_ISO" >&2 | |||
local MD5_CD=$(md5sum /dev/scd0 | awk '{print $1}') | |||
echo "md5sum du cd gravé: $MD5_CD" >&2 | |||
# Donne à la fonction sa valeur de retour | |||
[ "$MD5_ISO" -eq "$MD5_CD" ] | |||
} | |||
} | |||
grave_iso_ () { | |||
grave_iso_ () { | echo "Choisissez l'image iso à graver" | ||
choix_fichier_ 'iso' | |||
if [ -n "$(cat $LISTEAGRAVER)" ]; then | |||
echo "on va graver $(cat $LISTEAGRAVER)" | |||
echo "L'image à graver fait: \t $(du -h $(cat $LISTEAGRAVER) | awk '{print $1}')" | |||
echo 'Assurez-vous que votre cd/dvd est assez grand' | |||
echo 'On y va? (O/N)' | |||
read CHOIX | |||
case $CHOIX in | |||
O | o ) | |||
wodim -v dev=/dev/scd0 -data "$(cat $LISTEAGRAVER)" | |||
if ! verif_integrite_ "$(cat $LISTEAGRAVER)"; then | |||
echo "Erreur: echec lors de la vérification d'intégrité" >&2 | |||
exit $ERR_INTEGR | |||
fi | |||
;; | |||
N | n ) echo "annulation de la gravure" | |||
;; | |||
esac | |||
fi | fi | ||
} | } | ||
efface_disque_ () { | grave_donnees_ () { | ||
choix_fichier_ 'donnees' | |||
echo 'on édite la liste qui est à graver :' | |||
edite_ | |||
echo 'Quel est le nom du volume ?' | |||
read NOMVOLUME | |||
if [ -n "$(cat $LISTEAGRAVER)" ]; then | |||
###on lance la gravure | |||
echo "Creation de l'image à graver" | |||
genisoimage -R -r -J --hide-rr-moved -V "$NOMVOLUME" -o /tmp/$NOMVOLUME.iso $(cat $LISTEAGRAVER) | |||
if [ ! -f /tmp/$NOMVOLUME.iso ]; then | |||
echo "Erreur lors de la création de l'image" | |||
exit 666 | |||
fi | |||
#on affiche un avertissement sur la taille du fichier à graver | |||
echo "L'image à graver fait: \t $(du -h /tmp/$NOMVOLUME.iso | awk '{print $1}')" | |||
echo "Assurez-vous que votre cd/dvd est assez grand" | |||
echo "On y va? (O/N)" | |||
read CHOIX | |||
case $CHOIX in | |||
O | o ) | |||
wodim -v dev=/dev/scd0 -data /tmp/$NOMVOLUME.iso | |||
if ! verif_integrite_ /tmp/$NOMVOLUME.iso; then | |||
echo "Erreur: echec lors de la vérification d'intégrité" >&2 | |||
exit $ERR_INTEGR | |||
} | fi | ||
;; | |||
echo ' |//' | N | n ) echo "annulation de la gravure" | ||
echo ' (o o)' | ;; | ||
echo '+-------------oOO----(_)---------------------+' | esac | ||
echo '| | fi | ||
echo '| | } | ||
echo '| | |||
echo '| | grave_audio_ () { | ||
echo '| | mkdir -p $TMPDIR | ||
echo '--------------------oOO----------------------+' | [ -d $TMPDIR ] | ||
echo ' |__|__|' | if [ $? = 0 ]; then | ||
echo ' || ||' | choix_fichier_ | ||
echo ' ooO Ooo' | edite_ | ||
echo " \n \n \n " | echo "\n \n On va maintenant convertir les fichiers pour les graver" | ||
cd $TMPDIR | |||
while [ "$GRAVURE" != 0 ]; do | cp "$(cat $LISTEAGRAVER )" $TMPDIR | ||
echo "conversion des mp3 en wav" | |||
for i in *.[Mm][Pp]3; do | |||
lame --verbose --decode "$i" "${i%.mp3}.wav"; | |||
done | |||
echo "conversion des ogg en wav" | |||
oggdec *.ogg | |||
echo "conversion des flac en wav" | |||
flac --decode *.flac | |||
case $GRAVURE in | echo "normalisation" | ||
normalize-audio --mix *.wav | |||
for i in *.wav ; do | |||
echo "Traitement de ${i}" | |||
sox "$i" "${i/%.wav/.cdr}" | |||
done | |||
#on affiche un avertissement sur la taille du fichier à graver | |||
echo "Les données à graver font: \t $(du -sh $TMPDIR | awk '{print $1}')" | |||
echo 'Assurez-vous que votre cd est assez grand' | |||
+------------------.oooO--(_)--Oooo.------------------+ | echo 'On y va? (O/N)' | ||
| | | read CHOIX | ||
| À BIENTÔT | | case $CHOIX in | ||
| .oooO | | O | o ) | ||
| ( ) Oooo. | | echo " \tOn va maintenant graver!!! \n \n " | ||
+---------------------\ (----( )--------------------+ | sleep 2 | ||
wodim -v -dev=/dev/scd0 -pad -dao -audio *.cdr | |||
;; | |||
' | N | n ) echo 'annulation de la gravure' | ||
;; | |||
esac | |||
fi | |||
esac | } | ||
done | |||
efface_disque_ () { | |||
local EFFACEMENT=1 | |||
exit 0 | while [ "$EFFACEMENT" != 0 ]; do | ||
echo "Comment souhaitez-vous effacer le disque?" | |||
echo "1 \t Effacement complet" | |||
echo "2 \t Effacement rapide " | |||
echo "0 \t Annuler " | |||
read EFFACEMENT | |||
case $EFFACEMENT in | |||
2 ) | |||
echo "C'est parti pour un effacement rapide :" | |||
sleep 1 | |||
wodim blank=fast | |||
break | |||
;; | |||
1 ) | |||
echo "C'est parti pour un effacement complet :" | |||
sleep 1 | |||
wodim blank=all | |||
break | |||
;; | |||
* ) echo 'Veuillez entrer un choix valide' ;; | |||
esac | |||
done | |||
} | |||
echo ' |//' | |||
echo ' (o o)' | |||
echo '+-------------oOO----(_)---------------------+' | |||
echo '|19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)[[Utilisateur:MicP|MicP]] ([[Discussion utilisateur:MicP|discussion]]) 19 mai 2016 à 04:30 (CEST)|' | |||
echo '|19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)~ ¤ BONJOUR ! ¤ 19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)[[Utilisateur:MicP|MicP]] ([[Discussion utilisateur:MicP|discussion]])|' | |||
echo '|19 mai 2016 à 04:30 (CEST) ¤ Ce Script va vous permettre ¤ 19 mai 2016 à 04:30 (CEST)~|' | |||
echo '|19 mai 2016 à 04:30 (CEST)[[Utilisateur:MicP|MicP]] ([[Discussion utilisateur:MicP|discussion]]) 19 mai 2016 à 04:30 (CEST) ¤ de graver facilement ¤ 19 mai 2016 à 04:30 (CEST)[[Utilisateur:MicP|MicP]] ([[Discussion utilisateur:MicP|discussion]]) 19 mai 2016 à 04:30 (CEST)|' | |||
echo '|19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)[[Utilisateur:MicP|MicP]] ([[Discussion utilisateur:MicP|discussion]]) 19 mai 2016 à 04:30 (CEST) ¤ vos données ¤ 19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)[[Utilisateur:MicP|MicP]] ([[Discussion utilisateur:MicP|discussion]])|' | |||
echo '--------------------oOO----------------------+' | |||
echo ' |__|__|' | |||
echo ' || ||' | |||
echo ' ooO Ooo' | |||
echo " \n \n \n " | |||
while [ "$GRAVURE" != 0 ]; do | |||
echo "Que souhaitez-vous faire? (Entrez le numéro de votre choix) \n \n" | |||
echo "1 \t Un disque de données " | |||
#echo "2 \t Un disque audio " | |||
echo "2 \t Graver une image iso " | |||
echo "3 \t Effacer le disque " | |||
echo "0 \t Quitter " | |||
read GRAVURE | |||
case $GRAVURE in | |||
1 ) grave_donnees_ ;; | |||
#2 ) grave_audio_ ;; | |||
2 ) grave_iso_ ;; | |||
3 ) efface_disque_ ;; | |||
0 ) | |||
echo ' | |||
''~'' | |||
( o o ) | |||
+------------------.oooO--(_)--Oooo.------------------+ | |||
| | | |||
| À BIENTÔT | | |||
| .oooO | | |||
| ( ) Oooo. | | |||
+---------------------\ (----( )--------------------+ | |||
\_) ) / | |||
(_/ | |||
' | |||
exit 2 | |||
;; | |||
* ) echo 'Veuillez entrer un choix valide' ;; | |||
esac | |||
done | |||
exit 0 | |||
[[Category:Scripts]] | [[Category:Scripts]] |
Version du 19 mai 2016 à 02:30
Ce script doit permettre de graver en ligne de commande des disques de données, des images iso, et si possible de créer des cd audio (Cette dernière fonction n'est pas prête pour l'instant).
Attention, le script est en cours d'élaboration (les tests positifs ont été réalisé en bash).
Surtout ne pas hésiter à améliorer le script, il est sur le wiki rien que pour ça.
#!/bin/sh #-----------------------------------------------# # Script pour graver en console plus facilement # # nécessite genisoimage, wodim, # # éventuellement oggdec, sox, lame, flac... # # pour les conversions de fichiers audio # #-----------------------------------------------# #------------------ Reste à Faire : -----------------------------# # Préciser les dépendances # # Ajouter une fonction pour vérifier que les dépendances sont là # # Revoir la gravure de fichiers audio # # Une meilleure vérification des données # #----------------------------------------------------------------# set -eu LISTE=/tmp/liste LISTEAGRAVER=/tmp/liste_graver TMPDIR=/tmp/gravure GRAVURE='1' ERR_INTEGR=101 choix_fichier_ () { local FICHIER= # Fonction qui va choisir le fichier # on quitte lorsque l'on rentre la valeur 0 # On enregistre une liste des fichiers, le choix fait est reporté # dans la LISTEAGRAVER case "$1" in 'iso' ) ;; 'donnees' ) echo 'Choisir la liste des fichiers à ajouter :' while [ "$FICHIER" != 0 ]; do ls -ApX | nl -n ln | tee "$LISTE" echo '------------------------------------------' echo "0 \t J'ai fini! \n" read CHOIX if [ "$CHOIX" = 0 ]; then break else FICHIER=$(echo "$PWD/$(sed -n ${CHOIX}p $LISTE | awk -F"\t" '{print $2}')") # Le nom du fichier est enregistré dans /tmp/liste_graver #S'il s'agit d'un répertoire, on propose de l'ajouter à la liste, ou d'aller dedans case "$FICHIER" in */ | .. ) echo "1) Changer de répertoire : $FICHIER" echo '2) Ajouter ce répertoire pour le graver' read R case $R in 1 ) cd "$FICHIER" ;; 2 ) echo "$FICHIER" >> "$LISTEAGRAVER" ;; esac ;; *) echo "$FICHIER" >> "$LISTEAGRAVER" ;; esac fi done ;; esac } edite_ () { local C=1 while [ "$C" != 0 ]; do echo "Voici la liste des fichiers à graver : \n" cat "$LISTEAGRAVER" echo "\n \n" echo "1)\t Ajouter des fichiers " echo "2)\t Enlever des fichiers" echo "0)\t J'ai fini! " read C case $C in 1 ) choix_fichier_ ;; 0 ) break ;; 2 ) echo 'Que supprimer?' nl -n ln "$LISTEAGRAVER" read SUPPR if [ "$SUPPR" -le $(wc -l < "$LISTEAGRAVER") ] && [ "$SUPPR" != "" ] ; then sed ${SUPPR}d "$LISTEAGRAVER" > /tmp/listetmp mv /tmp/listetmp $LISTEAGRAVER else echo "*** Erreur, ce numéro n'est pas disponible ***" echo '*** Entrez un choix valide ***' fi ;; * ) echo 'Veuillez entrer un choix valide' ;; esac done } # controle de l'image # Retourne 0 si le CD gravé est conforme à l'image ISO, # 1 sinon. verif_integrite_ () { local MD5_ISO=$(md5sum "$1" | awk '{print $1}') echo "md5sum de l'iso : $MD5_ISO" >&2 local MD5_CD=$(md5sum /dev/scd0 | awk '{print $1}') echo "md5sum du cd gravé: $MD5_CD" >&2 # Donne à la fonction sa valeur de retour [ "$MD5_ISO" -eq "$MD5_CD" ] } grave_iso_ () { echo "Choisissez l'image iso à graver" choix_fichier_ 'iso' if [ -n "$(cat $LISTEAGRAVER)" ]; then echo "on va graver $(cat $LISTEAGRAVER)" echo "L'image à graver fait: \t $(du -h $(cat $LISTEAGRAVER) | awk '{print $1}')" echo 'Assurez-vous que votre cd/dvd est assez grand' echo 'On y va? (O/N)' read CHOIX case $CHOIX in O | o ) wodim -v dev=/dev/scd0 -data "$(cat $LISTEAGRAVER)" if ! verif_integrite_ "$(cat $LISTEAGRAVER)"; then echo "Erreur: echec lors de la vérification d'intégrité" >&2 exit $ERR_INTEGR fi ;; N | n ) echo "annulation de la gravure" ;; esac fi } grave_donnees_ () { choix_fichier_ 'donnees' echo 'on édite la liste qui est à graver :' edite_ echo 'Quel est le nom du volume ?' read NOMVOLUME if [ -n "$(cat $LISTEAGRAVER)" ]; then ###on lance la gravure echo "Creation de l'image à graver" genisoimage -R -r -J --hide-rr-moved -V "$NOMVOLUME" -o /tmp/$NOMVOLUME.iso $(cat $LISTEAGRAVER) if [ ! -f /tmp/$NOMVOLUME.iso ]; then echo "Erreur lors de la création de l'image" exit 666 fi #on affiche un avertissement sur la taille du fichier à graver echo "L'image à graver fait: \t $(du -h /tmp/$NOMVOLUME.iso | awk '{print $1}')" echo "Assurez-vous que votre cd/dvd est assez grand" echo "On y va? (O/N)" read CHOIX case $CHOIX in O | o ) wodim -v dev=/dev/scd0 -data /tmp/$NOMVOLUME.iso if ! verif_integrite_ /tmp/$NOMVOLUME.iso; then echo "Erreur: echec lors de la vérification d'intégrité" >&2 exit $ERR_INTEGR fi ;; N | n ) echo "annulation de la gravure" ;; esac fi } grave_audio_ () { mkdir -p $TMPDIR [ -d $TMPDIR ] if [ $? = 0 ]; then choix_fichier_ edite_ echo "\n \n On va maintenant convertir les fichiers pour les graver" cd $TMPDIR cp "$(cat $LISTEAGRAVER )" $TMPDIR echo "conversion des mp3 en wav" for i in *.[Mm][Pp]3; do lame --verbose --decode "$i" "${i%.mp3}.wav"; done echo "conversion des ogg en wav" oggdec *.ogg echo "conversion des flac en wav" flac --decode *.flac echo "normalisation" normalize-audio --mix *.wav for i in *.wav ; do echo "Traitement de ${i}" sox "$i" "${i/%.wav/.cdr}" done #on affiche un avertissement sur la taille du fichier à graver echo "Les données à graver font: \t $(du -sh $TMPDIR | awk '{print $1}')" echo 'Assurez-vous que votre cd est assez grand' echo 'On y va? (O/N)' read CHOIX case $CHOIX in O | o ) echo " \tOn va maintenant graver!!! \n \n " sleep 2 wodim -v -dev=/dev/scd0 -pad -dao -audio *.cdr ;; N | n ) echo 'annulation de la gravure' ;; esac fi } efface_disque_ () { local EFFACEMENT=1 while [ "$EFFACEMENT" != 0 ]; do echo "Comment souhaitez-vous effacer le disque?" echo "1 \t Effacement complet" echo "2 \t Effacement rapide " echo "0 \t Annuler " read EFFACEMENT case $EFFACEMENT in 2 ) echo "C'est parti pour un effacement rapide :" sleep 1 wodim blank=fast break ;; 1 ) echo "C'est parti pour un effacement complet :" sleep 1 wodim blank=all break ;; * ) echo 'Veuillez entrer un choix valide' ;; esac done } echo ' |//' echo ' (o o)' echo '+-------------oOO----(_)---------------------+' echo '|19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)MicP (discussion) 19 mai 2016 à 04:30 (CEST)|' echo '|19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)~ ¤ BONJOUR ! ¤ 19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)MicP (discussion)|' echo '|19 mai 2016 à 04:30 (CEST) ¤ Ce Script va vous permettre ¤ 19 mai 2016 à 04:30 (CEST)~|' echo '|19 mai 2016 à 04:30 (CEST)MicP (discussion) 19 mai 2016 à 04:30 (CEST) ¤ de graver facilement ¤ 19 mai 2016 à 04:30 (CEST)MicP (discussion) 19 mai 2016 à 04:30 (CEST)|' echo '|19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)MicP (discussion) 19 mai 2016 à 04:30 (CEST) ¤ vos données ¤ 19 mai 2016 à 04:30 (CEST)19 mai 2016 à 04:30 (CEST)MicP (discussion)|' echo '--------------------oOO----------------------+' echo ' |__|__|' echo ' || ||' echo ' ooO Ooo' echo " \n \n \n " while [ "$GRAVURE" != 0 ]; do echo "Que souhaitez-vous faire? (Entrez le numéro de votre choix) \n \n" echo "1 \t Un disque de données " #echo "2 \t Un disque audio " echo "2 \t Graver une image iso " echo "3 \t Effacer le disque " echo "0 \t Quitter " read GRAVURE case $GRAVURE in 1 ) grave_donnees_ ;; #2 ) grave_audio_ ;; 2 ) grave_iso_ ;; 3 ) efface_disque_ ;; 0 ) echo ' ~ ( o o ) +------------------.oooO--(_)--Oooo.------------------+ | | | À BIENTÔT | | .oooO | | ( ) Oooo. | +---------------------\ (----( )--------------------+ \_) ) / (_/ ' exit 2 ;; * ) echo 'Veuillez entrer un choix valide' ;; esac done exit 0