Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2324 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Comment sortir complètement de cette boucle ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment sortir complètement de cette boucle ?

n°1369585
Vince31088​4
Posté le 27-11-2014 à 12:00:25  profilanswer
 

Bonjour,
 
J'ai un soucis avec l'un de mes scripts shell.
L'extrait du code correspond a un script qui va lire un fichier de paramètre formatté, et effectue un contrôle des valeurs sur une colonne.
 
Voici le bout de code qui m'ennuye :
 

Code :
  1. ###
  2. #
  3. # Controle fichier CFG existe et valeur de champ criticite
  4. #
  5. ###
  6. if [ ! -f ${cfgfile} ] ; then
  7.         func_err "Le fichier CFG "${cfgfile}" n'existe pas"
  8. else
  9.         func_info_log "Fichier CFG trouve : "${cfgfile}
  10.         cat ${cfgfile} | grep -v "#" | while read line
  11.         do
  12.                 level=`echo ${line} | awk -F: '{print $2}'`
  13.                 case ${level} in
  14.                 E)
  15.                 ;;
  16.                 W)
  17.                 ;;
  18.                 I)
  19.                 ;;
  20.                 *)
  21.                 func_info_log "Valeur de criticite ${level} invalide dans ${cfgfile}"
  22.                 func_err "Doit etre E (Erreur), W (Avertissement) ou I (Ignorer)"
  23.                 esac
  24.         done
  25.         func_info_log "Les criticites sont valides"
  26. fi
  27. # func_err "ESSAI POUR TESTER SORTIE DU SCRIPT"


 
 
Ci dessous la fonction 'func_err'
 

Code :
  1. func_err () {
  2.         err=$1
  3.         echo "ERR   : "${err}   >> ${logfile}
  4.         mail_flag=ERR
  5.         func_mail
  6.         exit 1
  7. }


 
Cette fonction func_err est utilisé dans X scripts et me fait un exit du script en cas d'erreur. Le script s'arrête donc totalement.
 
Dans l'exemple du dessus, la fonction est invoquée lorsque mon contrôle trouve des valeurs autres que 'E','W' et 'I'.
Par contre, le script ne se termine pas. Je sors de la boucle, et malheureusement le script continue :(
 
Help  :D


Message édité par Vince310884 le 27-11-2014 à 13:10:57
mood
Publicité
Posté le 27-11-2014 à 12:00:25  profilanswer
 

n°1369628
Vince31088​4
Posté le 27-11-2014 à 16:29:43  profilanswer
 


Une solution en passant par un fichier temporaire :

Code :
  1. ###
  2. #
  3. # Controle fichier CFG existe et valeur de champ criticite
  4. #
  5. ###
  6. if [ ! -f ${cfgfile} ] ; then
  7.         func_err "Le fichier CFG "${cfgfile}" n'existe pas"
  8. else
  9.         func_info_log "Fichier CFG trouve : "${cfgfile}
  10.         cat ${cfgfile} | grep -v "#" | while read line
  11.         do
  12.                 level=`echo ${line} | awk -F: '{print $2}'`
  13.                 case ${level} in
  14.                 E)
  15.                 echo 0 > ${tmpfile} ;;
  16.                 W)
  17.                 echo 0 > ${tmpfile} ;;
  18.                 I)
  19.                 echo 0 > ${tmpfile} ;;
  20.                 *)
  21.                 echo 1 > ${tmpfile}
  22.                 break ;;
  23.                 esac
  24.         done
  25.         exit_code=`cat ${tmpfile}`
  26.         if [ $exit_code -ne 0 ] ; then
  27.                 rm -f ${tmpfile}
  28.                 func_info_log "Valeur de criticite invalide dans ${cfgfile}"
  29.                 func_err "Doit etre E (Erreur), W (Avertissement) ou I (Ignorer)"
  30.         else
  31.                 rm -f ${tmpfile}
  32.                 func_info_log "Les criticites sont valides"
  33.         fi
  34. fi

n°1369654
Profil sup​primé
Posté le 27-11-2014 à 19:36:43  answer
 

salut,
 
l'emploi d'un fichier temporaire n'a pas de sens.
si ça aide au fonctionnement de la sortie du script (ce dont je doute, vu que, moi, je n'ai pas de problème à le faire fonctionner sans :/), la valeur du code de retour peut être stockée dans une variable.
 
à part ça, ça n'aidera pas, mais plutôt que de tester que le fichier n'existe pas, tester s'il existe et inverser les cas d'exécution.


Message édité par Profil supprimé le 27-11-2014 à 19:37:01
n°1369657
Vince31088​4
Posté le 27-11-2014 à 22:11:54  profilanswer
 

Le soucis c'est que les variable déclarés dans la boucle ne sont accessible que dans ladite boucle. J'arrive pas a recupérer mon code retour hors de la boucle. Tes propositions sont les bienvenues

n°1369661
Profil sup​primé
Posté le 27-11-2014 à 23:37:29  answer
 

Code :
  1. grep 'motif' fichier | { while read line; do echo "$line"; var=set; done; echo "$var";}

si c'est du code sh.
si c'est du bash, alors utilise une Substitution de process.


Message édité par Profil supprimé le 27-11-2014 à 23:38:35
n°1369777
Tuxerman12
Posté le 29-11-2014 à 10:53:54  profilanswer
 

Tu retapes en dur le code de func_err sans le exit 1 pour ton case *). Ecrire dans un fichier juste pour ça serait bcp trop coûteux.


Message édité par Tuxerman12 le 29-11-2014 à 10:55:46
n°1369800
l4nkou
Dr House Fan
Posté le 29-11-2014 à 22:47:00  profilanswer
 

ton case *) n'est pas fermé par ;;


---------------
Les avis, c'est comme les anus, tout le monde en a un.
n°1369804
Profil sup​primé
Posté le 29-11-2014 à 23:43:35  answer
 

la fermeture par `;;' du dernier motif d'un `case' est facultative.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Comment sortir complètement de cette boucle ?

 

Sujets relatifs
boucle shell a 2 variable☑[bash] Boucle for sur un fichier unique OU contenu d'un dossier ?
quels jeux vidéos avec démonstration en boucle ?[Résolu] Linux : impossibilité de sortir du mode veille
[BASH] Problème de traitement sur boucle FOR[Résolu][ksh] Modifier les arguments d'une boucle for
[Freenas]ou equivalent. On peut en sortir quoi sans trop suer?[Bash] Boucle While qui ne sort pas
problème, kdm en boucle [Résolu] 
Plus de sujets relatifs à : Comment sortir complètement de cette boucle ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR