#1 Le 20/02/2008, à 14:42
- timou
Bash comment bouclerle programme avec Case-Esac?
comment faire une doucle par une instruction de branchement Cas "cse-asac" pour demander àl'utilisateur si l'on veut faire une nouvelle opération.??? je pense pour qel marcher il faut entrer les argument par la commande "read"
c-a-d echo "entez vos arguments"
read argument
$reponse
le problème que avec cette methode j'arrive pas à faire la boucle for ??
#! /bin/bash
# teste.sh
echo " Vous avez lancé le shell-Script ( $0 ) "
echo " Vous avez saisie en ligne de commande $# Argument(s) "
echo " Les Arguments Sont: $@"
numArgument=1
for arg in "$@"; do
if [ -f "$arg" ]
then
echo "fichier existe"
else echo "pas ficher"
fi
let $[numArgument+=1]
done
Hors ligne
#2 Le 20/02/2008, à 14:59
- iuchiban
Re : Bash comment bouclerle programme avec Case-Esac?
en gros tu fais un truc dans le genre :
option=""
sortir=false
# Tant que tu veux pas sortir
while [ !sortir ]
do
# effacer l'ecran et afficher le menu
clear
echo "Entrer votre choix"
echo "1 : première option"
echo "2 : deuxieme option"
echo "3 : quitter"
# saisir le choix
read option
case $option in
1)
[exec 1];;
2)
[exec 2];;
# si on veut sortir, on positionne la variable de sortie a vrai
# voire tu fais un exit 0 sinon, mais dans ce cas pas de message de sortie
3)
sortir=true;;
*)
echo "Pas le bon choix";;
esac
done
echo "meri d'avoir utilise ce logiciel"
C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.
Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.
Hors ligne
#3 Le 20/02/2008, à 15:17
- gilbert
Re : Bash comment bouclerle programme avec Case-Esac?
attention, éviter les while true, while false... pas bon..
faire qqch du genre, en reprenant la proposition de iuchiban :
#!/usr/bin/env bash
menu () {
# effacer l'écran et afficher le menu
clear
echo "Liste des options disponibles"
echo "1 : première option"
echo "2 : deuxième option"
echo "3 : quitter"
}
# saisir le choix et traiter en fonction avec case
menu
while read -p "Votre choix : " CHOIX; do
case $CHOIX in
1)
[exec 1];;
2)
[exec 2];;
3)
break ;;
*)
echo "Pas le bon choix" && sleep 2;;
esac
menu
done
echo "merci d'avoir utilise ce logiciel aurevoir et à la prochaine :-D"
Dernière modification par gilbert (Le 20/02/2008, à 15:20)
Simplement moi-même..
Hors ligne
#4 Le 20/02/2008, à 15:28
- timou
Re : Bash comment bouclerle programme avec Case-Esac?
Merci pour l'aide
mais 1 question
si l'argument est passé par la ligne de commande c-a-d
$./teste.sh + l 'argument pour le teste .là je ne pe pas fiare la boucle parceque je doi executer le script une autre fois .
l'argument doit passer par la focntion 'read' mais si je tape plusieur argument comment les faire boucler dans la boucle for "comment les
les récupérer
merci
Hors ligne
#5 Le 20/02/2008, à 15:44
- gilbert
Re : Bash comment bouclerle programme avec Case-Esac?
salut, je viens enfin de comprendre ta vraie question
Avec case et shift
#!/usr/bin/env bash
while [ ! -z $1 ]; do
case $1 in
cas1) # Traiter le cas 1
;;
cas2) # Traiter le cas 2
;;
# etc...
casN) # Traiter le cas N
;;
*) echo "Cas non traité" >&2 ;;
esac
shift
done
echo "Traitement des arguments fini"
Simplement moi-même..
Hors ligne
#6 Le 20/02/2008, à 16:12
- timou
Re : Bash comment bouclerle programme avec Case-Esac?
se que je veux vraiment faire c
executer le script ./teste.sh
il me donne
bonjour entrez vos argument pour identification
l'itulisateur entre des argument ex toto tata titi
echo vous avez entrez 3 arg qui sont
les teste des argument
si arg1 existe ou pas et si c un repertoire ou non ou un user ou non ..
si arg2 // // // // //
si arg3 // // // // //
boucle cas vousvoulez sortire ou saisire d'autre argument pour identification
O ou N
oui retourne à bonjour....
non sortire
merci
#! /bin/bash
# teste.sh
echo " Vous avez lancé le shell-Script ( $0 ) "
echo" entrez vous arguments"
read $reponse
echo " Vous avez saisie en ligne de commande $# Argument(s) "(( camarche pas avec read))
echo " Les Arguments Sont: $@"((( ca marche pas ave read))
numArgument=1
for arg in "$@"; do
if [ -f "$arg" ]
then
echo "fichier existe"
else echo "pas ficher"
fi
let $[numArgument+=1]
done
Hors ligne
#7 Le 20/02/2008, à 16:35
- gilbert
Re : Bash comment bouclerle programme avec Case-Esac?
Ton français n'est pas des plus clair
#!/usr/bin/env bash
#test.sh
echo " Vous avez lancé le shell-Script ( $0 ) "
echo " Entrez vos arguments :"
read reponse
let compteur=0
echo -n " Les arguments sont : "
for WORD in $reponse; do
echo -n "$WORD "
arg[$compteur]=$WORD
let compteur++
done
echo
echo " Vous avez saisi en ligne de commande $compteur Argument(s) "
for (( i=0; i<$compteur; i++));do
if [ -f ${arg[$i]} ]; then
echo " fichier existe"
else
echo " pas ficher"
fi
done
EDIT : c'est normal que dans ton exemple $# et $@ ne fonctionnent pas. Avec read tu stoques tout ce que tu as écris dans une variable, le résultat est une chaine de caractère, ce ne sont pas des arguments.. les arguments sont les mots que l'on met après une commande (qui peut être un programme, un script, une fonction, etc), mais en aucun cas une chaine de caractère lue par read.
Dernière modification par gilbert (Le 20/02/2008, à 16:40)
Simplement moi-même..
Hors ligne
#8 Le 20/02/2008, à 16:48
- timou
Re : Bash comment bouclerle programme avec Case-Esac?
Merci je comprends maintenant pourquoi $# et $@ ne fonctionnent pas avec read
Merci mon AMI:D:/
Hors ligne
#9 Le 20/02/2008, à 19:04
- timou
Re : Bash comment bouclerle programme avec Case-Esac?
bonjour
1) j'ai fais une boucle avec Cas masi le 1 case ne fonctionne pas . pour quoi??
2) comment aficher l'argument analyser c-a-d arg n'existe pas
arg existe.
3)coment faire pour chercher l'argument dans tous les répertoire? parce que il teste que les fichier sur mon dossier il cherche pas dans les repertoire.
#! /bin/bash
#teste.sh
retour=X
while [ "$retour" = "X" ]; do
echo " Vous avez lancé le shell-Script ( $0 ) "
echo " Entrez vos arguments pour Identification :"
read reponse
let compteur=0
echo -n " Vous avez entre Les arguments suivants : "
for MOT in $reponse; do
echo -n "$MOT "
arg[$compteur]=$MOT
let compteur++
done
echo
echo " Le Nombre d'arguments que vous avez saisie est $compteur "
for (( i=0; i<$compteur; i++));do
if [ -f ${arg[$i]} ]; then
echo " Le fichier existe"
else
echo " Le fichier n'existe pas "
fi
echo
done
echo "Tous les Arguments que vous avez saisie ont étè Identifiers"
echo "Vous Voulez saisire d'autre Argument pour Identification ?"
read reponse1
case "$reponse1" in
* )
echo "Erreur : entrez [O]ui ou [N]on ."
;;
o* | O* )
echo " vous avez choisie [$reponse1]ui pour saisire d'autres Argument Merci "
;;
n*|N* )
echo "merci d'avoir utilise ce logiciel Aurevoir et à la prochaine fois Utilisateur $USER"
retour=1
;;
esac
echo ""
done
exit $retour
Hors ligne
#10 Le 20/02/2008, à 19:31
- timou
Re : Bash comment bouclerle programme avec Case-Esac?
et le nombre d'argument =o c-a-d pas de saisie je pense qu'il faut une boucle aussi??
Hors ligne
#11 Le 20/02/2008, à 20:31
- gilbert
Re : Bash comment bouclerle programme avec Case-Esac?
salut, pour la dernière partie, voici comment attendre un oui ou un non :
while read -p "[O]ui/[N]on : " reponse1; do
case $reponse1 in
o*|O* )
echo "Vous avez choisi [$reponse1] pour saisir d'autres arguments. Merci."
break;;
n*|N* )
echo "Merci d'avoir utilisé ce logiciel. Au revoir et à la prochaine fois $USER"
retour=1
break;;
* )
echo "Erreur : entrez [O]ui ou [N]on.";;
esac
done
exit $retour
le cas *) du case se met en dernier, sinon tu rentreras toujours dedans vu que toutes les occurences remplissent ses conditions.
Simplement moi-même..
Hors ligne
#12 Le 20/02/2008, à 22:48
- timou
Re : Bash comment bouclerle programme avec Case-Esac?
merci
et si je veux tester si l'argument et un user ou un groupe je fais quoi
if[- ]
Hors ligne
#13 Le 21/02/2008, à 14:51
- timou
Re : Bash comment bouclerle programme avec Case-Esac?
bonjour
je veux savoir si c'est possible d'ajouter une fonction qui chercher l'argument avant de le tester? parce que je pense le programme ne peupas tester des argumment (mot) qui sont dans des répertoire donc il faut avnt lui donner le chemain ex /home/moi/répertoir/fichier_à_tester
merci
Hors ligne
#14 Le 22/02/2008, à 01:59
- timou
Re : Bash comment bouclerle programme avec Case-Esac?
ok merci
qui pe m'expliq
liste="$liste $mot,"
list ""
Hors ligne