Script shell \ if else elif fin sinon fin si

Fermé
tmedtcom Messages postés 48 Date d'inscription dimanche 24 mai 2009 Statut Membre Dernière intervention 14 février 2013 - 26 mai 2009 à 19:37
tmedtcom Messages postés 48 Date d'inscription dimanche 24 mai 2009 Statut Membre Dernière intervention 14 février 2013 - 26 mai 2009 à 23:05
Bonjour,
salut a tous et a toutes.
j'ai besoin de l'aide pour un script shell juste pour la stricture d'une suite de
si (....) alors ..... si non si (....) alors................

il y a une partie du svripte qui fait remplie les case du tableau chaque case contient ine chaine de caractère
et voiçi la forme général du script:
j=$(($i - 1))
# j est le nombre de case du tableau
#p1;p2;.....;p7 sont des paramètres de sortie je les fait initiatisation
p1=""
p2=""
p3=""
p4=""
p5=""
p6=""
p7=""
for k in `seq 0 $j`
do
   if [ ${tab[$k]} = "-A" ]
   then
      for l in `seq 1 $j`
      do
      #traitement du chaine INPUT OUTPUT FORWARD
      if [а ${tab[$l]} = "INPUT" ] && [ $p1 = ""] ]
      then
      p1="entrée au machine"
            elif [ ${tab[$l]} = "OUTPUT" ] && [ $p1 = ""] ]
            then
            p1="sortie du machine"
                  elif [ [ ${tab[$l]} = "FORWARD"а ] && [ $p1 = ""] ]
                  then
                  p1="passé a travers la machine"
                  fin si non
            fin si non
      fin si 
      #accept drop reject
      if [ [ ${tab[$l]} = "ACCEPT" ] && [ $p2 = ""а] ]
      then
      p2="accepté"
         elif [ [ ${tab[$l]} = "REJECT" ] && [ $p2 = ""а] ]
         then
         p2="rejeté"
                elif [ [ ${tab[$l]} = "DROP" ] &&[ $p2 = ""а] ]
                then
                p2="dropé"
                fin si non
         fin si non
      fin si
      #protocol
      if [ [ ${tab[$l]} = "-p" ] && [ $p3 = ""а] ]
      then
      p3="${tab[$l+1]}"
            elif [ $p3="" ]
            then
            p3="quelque soit"
            fin si non
      fin si
      #@ip-source
      if [ [ ${tab[$l]} = "-s" ] && [ $p4= ""а] ]
      then
      p4="${tab[$l+1]}"
            elif [ $p4="" ]
            then
            p4="quelque soit"
            fin si non
      fin si
      #@ip-destination
      if [ [ ${tab[$l]} = "-d" ] && [ $p5 = ""а] ]
      then
      p5="${tab[$l+1]}"
            elif [ $p5="" ]
            then
            p5="quelque soit"
            fin si non
      fin si
      #port-source
      if [ [ ${tab[$l]} = "--sport" ] && [ $p6= ""а] ]
      then
      p6="${tab[$l+1]}"
            elif [ $p6="" ]
            then
            p6="quelque soit"
            fin si non
      #port-destination
       if [ [ ${tab[$l]} = "--dport" ] && [ $p7 = ""а] ]
       then
       p7="${tab[$l+1]}"
             elif [ $p7="" ]
             then
             p7="quelque soit port destination"
             fin si non
       fin si
done  # cette done est pour le fin du boucle for
echo -e "\n### --sens$p1 --desision:$p2 --prot:$p3 --@ip_s:$p4 --@ip_d:$p5 --sport:$p6 --dport:$p7 ###" fin si   # cette fin si est pour la condition avant le boucle for
done   # cette done est pour la fin du 1ere boucle for

- premièrement je ne sait pas comment fermer l'instruction if et elif c'est a dir remplacer fin si non et fin si par le syntaxe necessaire.
- deuxièment je pentse que les faute son dans les lignes du condition if
==> j'espère que je trouve dans cette forum le réponce et merci d'avance
A voir également:

8 réponses

tmedtcom Messages postés 48 Date d'inscription dimanche 24 mai 2009 Statut Membre Dernière intervention 14 février 2013 13
26 mai 2009 à 22:23
salut encore, et ce que je peut faire comme ça:
if <condition>
then
<traitement>
elif <condition>
then
<traitement>
elif <condition>
then
<traitement>
etc.

# pas de {else} ici
<traitement>
fi

c'est a dir sans faire de else est ce que ça marche????
et merci
4
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
26 mai 2009 à 20:14
Salut,

Je n'ai pas regardé ton script en détail, mais la syntaxe des "if...then" est normalement de la forme :
if <condition>
then
<traitement>
elif <condition>
then
<traitement>
elif <condition>
then
<traitement>
etc.

else
<traitement>
fi
4
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
26 mai 2009 à 22:28
Oui ;-))
2
tmedtcom Messages postés 48 Date d'inscription dimanche 24 mai 2009 Statut Membre Dernière intervention 14 février 2013 13
26 mai 2009 à 20:23
OK merci beaucoup, tu est vraiment génial!!!
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tmedtcom Messages postés 48 Date d'inscription dimanche 24 mai 2009 Statut Membre Dernière intervention 14 février 2013 13
26 mai 2009 à 22:37
merci encore et encore
1
tmedtcom Messages postés 48 Date d'inscription dimanche 24 mai 2009 Statut Membre Dernière intervention 14 février 2013 13
26 mai 2009 à 22:49
Désolé mon pote, mais ça marche pas je ne sait pas ou est le problème exactement???
voila le message en exécution aprés correction parfaite du if then elif fi
je tape mon commande dans le terminal
./tmed.sh
il affiche des erreurs:
./tmed.sh: line 38: [: too many arguments
./tmed.sh: line 43: [: too many arguments
./tmed.sh: line 46: [: too many arguments
./tmed.sh: line 49: [: too many arguments
./tmed.sh: line 54: [: too many arguments
./tmed.sh: line 57: [: quelque: unary operator expected
./tmed.sh: line 62: [: too many arguments
./tmed.sh: line 65: [: quelque: unary operator expected
./tmed.sh: line 71: [: too many arguments
./tmed.sh: line 74: [: quelque: unary operator expected
./tmed.sh: line 80: [: too many arguments
./tmed.sh: line 83: [: quelque: unary operator expected
./tmed.sh: line 88: [: too many arguments
./tmed.sh: line 91: [: too many arguments
./tmed.sh: line 38: [: too many arguments
./tmed.sh: line 43: [: too many arguments
./tmed.sh: line 46: [: too many arguments

??????
1
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
26 mai 2009 à 22:54
A mon avis le problème est ailleurs et comme nous n'avons pas (encore) de don de voyance, difficile de voir d'où vient le problème ;-\

Par contre essaie ça :
#! /bin/sh

#set -xv

echo "Entrez un nombre : "
read nbre
if [ "$nbre" = 1 ]
then echo 1
elif [ "$nbre" = 2 ]
then echo 2
elif [ "$nbre" = 3 ]
then echo 3
fi
et dis-moi si ça marche ou pas ? ;-))
0
tmedtcom Messages postés 48 Date d'inscription dimanche 24 mai 2009 Statut Membre Dernière intervention 14 février 2013 13
26 mai 2009 à 23:05
mon pote le problème est exactement dans les lignes du conditions
c a dir
comme dans cette ligne:
elif [ $p6 = "" ]
il affiche comme erreur:
./tmed.sh: line 81: [: =: unary operator expected

et pour cette type de ligne
if [ [ ${tab[$l]} = "--dport" ] && [ $p7 = ""] ]
il affiche comme erreur:
./tmed.sh: line 86: [: too many arguments
0