Forum Programmation.shell erreur if elif

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
-2
31
jan.
2013

voici mon code

 if ($nbport == 52 );
                        then
                        awk -F " " '{if($1 != 49 && $1!=  50 && $1!= 51 && $1!=52 )print $1, $2} '  |\ ;
                elif ($nbport == 26);
                        then
                        awk -F " " '{if($1!= 25 && $1!= 26 )print $1, $2} '  |\ ;
                fi

Lors de l'éxecution j'obtient:
harvest.bash: line 58: 52: command not found
harvest.bash: line 61: 52: command not found

je ne comprend pas d'ou vient le probleme, si quelqu'un peu m'aider.

  • # Quel shell ?

    Posté par  . Évalué à 1.

    Salut,

    C'est quoi ton shell, csh ?

    C'est quoi le "pipe" en fin de commande "awk" ?

    Et puis ton script en entier numéroté n'aurait pas été de trop ;-(

  • # escuse moi

    Posté par  . Évalué à 1. Dernière modification le 31/01/13 à 10:40.

    je pensai que ça suffirai :

        heure=$(date +"%T")
        echo $swip
        echo $nom
        echo $nbport
        echo $machine
    
                #Recuperation des addresse mac dans un fichier au format decimal et hexa
                #creation du fichier mac1016.dat contenant la relation mac hex / mac deci
                snmpwalk -v 2c -c public -OX -Cc $swip 1.3.6.1.2.1.17.4.3.1.1 | \
                cut -c29- | \
                awk -F " " '{ print $1,$4"-"$5"-"$6"-"$7"-"$8"-"$9 }' | \
                sort -k 1,1 > /scriptsOID/mac1016.dat
    
                #recuperation du portbridge et creation de bridge.dat
                snmpwalk -v 2c  -c public -Of -Cc $swip .1.3.6.1.2.1.17.4.3.1.2 |\
                cut  -c44- | \
                awk -F " " '{ print $1,$4 }' | \
                sort -k 1,1 > /scriptsOID/bridge.dat
    
                #recuperation du portID et creation du fichier portid.dat
                snmpwalk -v 2c  -c public -Of  $swip .1.3.6.1.2.1.17.1.4.1.2 | \
                cut  -c45- | \
                awk -F " " '{ print $4,$1 }' | \
                sort -k 1,1 > /scriptsOID/portid.dat
    
                #recuperation du port et creation de port.dat
                snmpwalk -v 2c  -c public -Of  $swip .1.3.6.1.2.1.31.1.1.1.1 | \
                cut -c78- | \
                awk -F " " '{ print $1,$4 }' | \
                sort -k 1,1 > /scriptsOID/port.dat
    
                #jointure entre les fichier .dat pour former un fichier unique servant de base de donnee
                        #jointure de mac1016.dat et port bridge.dat pour former mac16bridge.dat
                        join -1 1 -2 1 mac1016.dat bridge.dat | \
                        awk -F " " '{ print $3, $2} ' | \
                        sort -k 1,1 > mac.sort
    
                        #jointure de portid.dat et port.dat pour former portname.dat
                        join -1 1 -2 1 portid.dat port.dat | \
                        cut -d ' ' -f 2,3 | \
    
                        #supression des lignes ayant pour portID lien trunk .
                        if ($nbport == 52 );
                                then
                                awk -F " " '{if($1 != 49 && $1!=  50 && $1!= 51 && $1!=52 )print $1, $2} '  |\ ;
                        elif ($nbport == 26);
                                then
                                awk -F " " '{if($1!= 25 && $1!= 26 )print $1, $2} '  |\ ;
                        fi
                        sort -k 1,1 | \
                        sed 's/$/'" ${nom}(IP= ${swip} ) ${machine} ${jour} ${heure}"'/g' > portname.sort
    
                        #jointure de mac16bridge.dat et portname.dat pour former le fichier final BD.dat
                        join -1 1 -2 1 mac.sort portname.sort >>BD.dat
                        sort -u -k 2 BD.dat > BD.sort
    
                        # inversement de lordre des entree afin de suprimer la plus ancienne ligne de celle qui on la meme mac address
                        tac BD.sort | awk 'BEGIN { r="" } { while ($3 == r) { next } ; r = $3 ; print }' | tac >bd.sort
        done < harvest.cfg
    
    
    • [^] # Re: escuse moi

      Posté par  . Évalué à 0.

      On a toujours pas le nom du shell ? ;-(

      Et puis ça :

      awk -F " " '{if($1 != 49 && $1!=  50 && $1!= 51 && $1!=52 )print $1, $2} '  |\ ;
      
      

      C'est censé faire quoi ? Surtout le " |\ ; "

    • [^] # Re: escuse moi

      Posté par  . Évalué à 2. Dernière modification le 31/01/13 à 10:47.

      je me suis permis de coloriser ton script en mettant 3 ` puis sh en ouverture
      et 3 ` en fermeture

      sans avoir testé, je pense que le ; en bout de ligne dans tes if fait s'arreter la chaine de traitement.

      en gros tu lui dis
      tu prend des trucs, tu les traites, et tu les pipe à
      si j'ai 52 ports, alors awk et imprimes 1 et 2 et pipe FIN (;)
      si j'ai 26 ports alors awk et imprimes 1 et 2 et pipe FIN (;)

      et ensuite tu as un sort -k 1,1 qui pipe sur un sed
      seulement le sort n'a rien à trier puisque le pipe c'est terminé.

      une solution elegante serait de faire le test du nombre de port dans le awk
      tu ne fait alors plus qu'un seul pipe, awk faisant les conditions et les reponses.

      • [^] # Re: escuse moi

        Posté par  . Évalué à 1.

        Salut,

        Il faut aussi noter que ces 2 lignes awk se terminent par "|\ ;". Le blanc après l'antislash (à moins que ce ne soit une erreur de transcription) fait que la sortie de awk va être pipée sur l'entrée d'une hypothétique commande " " (1 espace) qui n'existe pas.

        Une solution rapide serait de supprimer le pipe et tout ce qui suit sur ces deux lignes et de rajouter "| \" (comme sur les autres lignes) juste après le "fi", avant le sort (le bloc "if…fi" est un bloc d'instructions qui peut être considéré comme unitaire).

        Je n'ai pas non plus testé et ne peut garantir qu'il n'y a pas un autre soucis ailleurs…

  • # merci

    Posté par  . Évalué à 1.

    Merci beaucoup !

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.