Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 big_smile

Avec case et shift smile

#!/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 roll

#!/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