Partage
  • Partager sur Facebook
  • Partager sur Twitter

Script shell - boucle

    22 février 2017 à 14:35:23

    Hello tout le monde !

    Actuellement j'ai un petit soucis, suite à la création d'un script pour récupérer et comparer mes valeurs, j'ai ce message :

    ./check_test.sh: ligne33: Erreur de syntaxe près du symbole inattendu « i=0 » 
    ./check_test.sh: ligne33: `for [[ i=0; 10-$i ; i++ ]]'

     mon idée : partir de 0, testé jusqu’à mes 10 valeurs et incrémenter à chaque fois pour arriver à i=10

    Voici mon code :

    #### valeur pour up to date du vDISK PRODUCTION ####
    
    if [[ ($4 = status) && ($6 == 1) ]] ; then #arg -D n°datacore & le = signifie "attribuer"
    
    valeur=`$PLUGIN_PATH/check_snmp -H $2 -C X -o 1.3.6.1.4.1.7652.1.1.1.6.32.69.52.50.50.56.68.51.66.51.69.69.54.56.68.65.65.69.69.55.57.50.68.52.55.53.55.68.52.53.57.69.70 | grep to | cut -d "-" -f 2 | cut -d '"' -f 2 | cut -c -2`
    valeur2=`$PLUGIN_PATH/check_snmp -H $2 -C X -o 1.3.6.1.4.1.7652.1.1.1.6.32.56.67.65.55.51.51.67.54.67.54.55.55.54.52.65.52.56.55.52.67.50.52.56.50.56.54.53.52.69.54.55.70 | grep to | cut -d "-" -f 2 | cut -d '"' -f 2 | cut -c -2`
    valeur3=`$PLUGIN_PATH/check_snmp -H $2 -C X -o 1.3.6.1.4.1.7652.1.1.1.6.32.68.66.69.56.65.53.54.70.66.49.70.54.57.69.52.65.68.50.69.52.67.53.52.68.67.51.51.48.70.49.57.48 | grep to | cut -d "-" -f 2 | cut -d '"' -f 2 | cut -c -2`
    valeur4=`$PLUGIN_PATH/check_snmp -H $2 -C X -o 1.3.6.1.4.1.7652.1.1.1.6.32.54.55.66.67.52.51.53.67.69.57.50.55.57.57.57.67.55.56.66.48.54.65.57.67.51.65.66.57.54.70.69.54 | grep to | cut -d "-" -f 2 | cut -d '"' -f 2 | cut -c -2`
    valeur5=`$PLUGIN_PATH/check_snmp -H $2 -C X -o 1.3.6.1.4.1.7652.1.1.1.6.32.51.56.56.66.67.68.68.51.53.69.65.57.54.50.69.53.55.69.48.65.52.69.53.68.57.54.50.53.56.48.55.49 | grep to | cut -d "-" -f 2 | cut -d '"' -f 2 | cut -c -2`
    valeur6=`$PLUGIN_PATH/check_snmp -H $2 -C X -o 1.3.6.1.4.1.7652.1.1.1.6.32.70.51.55.54.48.56.67.69.55.54.50.53.53.50.65.69.69.55.67.69.70.53.67.52.49.68.49.51.55.57.50.49 | grep to | cut -d "-" -f 2 | cut -d '"' -f 2 | cut -c -2`
    valeur7=`$PLUGIN_PATH/check_snmp -H $2 -C X -o 1.3.6.1.4.1.7652.1.1.1.6.32.52.65.70.69.68.53.53.68.48.50.53.55.49.55.54.68.57.49.49.53.70.57.51.65.51.57.69.69.65.52.57.55 | grep to | cut -d "-" -f 2 | cut -d '"' -f 2 | cut -c -2`
    valeur8=`$PLUGIN_PATH/check_snmp -H $2 -C X -o 1.3.6.1.4.1.7652.1.1.1.6.32.68.53.51.48.50.66.52.51.69.69.50.57.52.54.67.50.50.66.67.66.54.57.49.53.50.48.66.65.66.69.67.57 | grep to | cut -d "-" -f 2 | cut -d '"' -f 2 | cut -c -2`
    valeur9=`$PLUGIN_PATH/check_snmp -H $2 -C X -o 1.3.6.1.4.1.7652.1.1.1.6.32.66.53.69.52.65.57.49.70.69.54.53.51.69.51.66.65.65.66.70.48.57.70.51.53.51.65.67.51.50.57.56.69 | grep to | cut -d "-" -f 2 | cut -d '"' -f 2 | cut -c -2`
    valeur10=`$PLUGIN_PATH/check_snmp -H $2 -C X -o 1.3.6.1.4.1.7652.1.1.1.6.32.52.67.53.52.69.50.68.65.68.69.66.56.66.67.48.49.56.54.50.55.67.56.56.69.51.67.69.51.49.68.70.56 | grep to | cut -d "-" -f 2 | cut -d '"' -f 2 | cut -c -2`
    
    rslt_affiche="PRODUCTION_01 est $valeur & PRODUCTION_02 est $valeur2 & PRODUCTION_03 est $valeur3 & PRODUCTION_04 est $valeur4 & PRODUCTION_05 est $valeur5 & PRODUCTION_06 est $valeur6 & PRODUCTION_07 est $valeur7 & PRODUCTION_08 est $valeur8 & PRODUCTION_09 est $valeur9 & PRODUCTION_10 est $valeur10"
    fi
    
    #Valeurs dans le tableau
    
    tab=('$valeur' '$valeur2' '$valeur3' '$valeur4' '$valeur5' '$valeur6' '$valeur7' '$valeur8' '$valeur9' '$valeur10')
    
    #On parcourt le tableau + test des variables
    
    for [[ i=0; 10-$i ; i++ ]]
    do
        if[[${tab[i]} == "Up"]] ; then
        STATE = 0   
       else
        STATE = 2
        fi
    done



    Une idée du problème ?

    Merci,

    -
    Edité par Hujino 22 février 2017 à 14:40:51

    • Partager sur Facebook
    • Partager sur Twitter
      22 février 2017 à 15:18:12

      salut,

      ce ne sont pas des crochets, mais des parenthèses.

      mais ça ne va pas, normalement c'est : (( <valeur_départ> ; <valeur_fin> ; <incrémentation> )).

      pourquoi ne pas itérer directement sur les éléments du tableau : for i in "${tab[@]}"

      en allant plus loin, pourquoi ne pas faire la boucle dans le premier if :

      tab=(
          '69.52.50.50.56.68.51.66.51.69.69.54.56.68.65.65.69.69.55.57.50.68.52.55.53.55.68.52.53.57.69.70'
          '56.67.65.55.51.51.67.54.67.54.55.55.54.52.65.52.56.55.52.67.50.52.56.50.56.54.53.52.69.54.55.70'
          '68.66.69.56.65.53.54.70.66.49.70.54.57.69.52.65.68.50.69.52.67.53.52.68.67.51.51.48.70.49.57.48'
      )
      
      if [[ $4 = status && $6 -eq 1 ]]
      then
          for i in "${!tab[@]}"
          do
              ar[$n]=( "$($PLUGIN_PATH/check_snmp -H $2 -C X -o 1.3.6.1.4.1.7652.1.1.1.6.32."${tab[i]}" | grep to | cut -d '-' -f 2 | cut -d '"' -f 2 | cut -c -2)" ) # il va falloir remédier à tous ces cut
              test "${ar[n]}" = "Up" && State=0 || State=2
              ((n++))
          done
          echo "PRODUCTION_01 est $ar & PRODUCTION_02 est ${ar[1]} & PRODUCTION_03 est ..."
      fi

      ton script est très brouillon, je ne suis pas certain de l'avoir bien compris.

      ton if posera aussi problème : il faut des espaces autour des double-crochets.

      -
      Edité par dantonq 22 février 2017 à 15:30:40

      • Partager sur Facebook
      • Partager sur Twitter

      Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

        22 février 2017 à 15:50:32

        dantonq a écrit:

        salut,

        ce ne sont pas des crochets, mais des parenthèses.

        mais ça ne va pas, normalement c'est : (( <valeur_départ> ; <valeur_fin> ; <incrémentation> )).

        pourquoi ne pas itérer directement sur les éléments du tableau : for i in "${tab[@]}"

        en allant plus loin, pourquoi ne pas faire la boucle dans le premier if :

        tab=(
            '69.52.50.50.56.68.51.66.51.69.69.54.56.68.65.65.69.69.55.57.50.68.52.55.53.55.68.52.53.57.69.70'
            '56.67.65.55.51.51.67.54.67.54.55.55.54.52.65.52.56.55.52.67.50.52.56.50.56.54.53.52.69.54.55.70'
            '68.66.69.56.65.53.54.70.66.49.70.54.57.69.52.65.68.50.69.52.67.53.52.68.67.51.51.48.70.49.57.48'
        )
        
        if [[ $4 = status && $6 -eq 1 ]]
        then
            for i in "${!tab[@]}"
            do
                ar[$n]=( "$($PLUGIN_PATH/check_snmp -H $2 -C X -o 1.3.6.1.4.1.7652.1.1.1.6.32."${tab[i]}" | grep to | cut -d '-' -f 2 | cut -d '"' -f 2 | cut -c -2)" ) # il va falloir remédier à tous ces cut
                test "${ar[n]}" = "Up" && State=0 || State=2
                ((n++))
            done
            echo "PRODUCTION_01 est $ar & PRODUCTION_02 est ${ar[1]} & PRODUCTION_03 est ..."
        fi

        ton script est très brouillon, je ne suis pas certain de l'avoir bien compris.

        ton if posera aussi problème : il faut des espaces autour des double-crochets.

        -
        Edité par dantonq il y a 18 minutes

        Hello,

        Je vais testé cela, désolé je débute dans les scripts :/

        Voici mon nouveau script :

        #! /bin/sh
        
           STATE=2
           PLUGIN_PATH='/srv/eyesofnetwork/nagios/plugins'
           COMMAND_PATH='/bin'
        
           ####################################### Resultats #########################################
        
           #### valeur pour up to date du vDISK PRODUCTION ####
        
           tab=(
           '.32.69.52.50.50.56.68.51.66.51.69.69.54.56.68.65.65.69.69.55.57.50.68.52.55.53.55.68.52.53.57.69.70'
           '.32.56.67.65.55.51.51.67.54.67.54.55.55.54.52.65.52.56.55.52.67.50.52.56.50.56.54.53.52.69.54.55.70'
           '.32.68.66.69.56.65.53.54.70.66.49.70.54.57.69.52.65.68.50.69.52.67.53.52.68.67.51.51.48.70.49.57.48'
           )
           
           if [[ $4 = status && $6 -eq 1 || $6 -eq 2 ]]
           then
           for ((n=0; n < 3; n++))
           do
           ar+=( "$($PLUGIN_PATH/check_snmp -H $2 -C X -o 1.3.6.1.4.1.7652.1.1.1.6"${tab[@]}" | grep to | cut -d '-' -f 2 | cut -d '"' -f 2 | cut -c -2)" )
           test "${ar[$n]}" = "Up" && State=0 || State=2
           done
           rslt_affiche="PRODUCTION_01 est $ar PRODUCTION_02 est ${ar[1]} PRODUCTION_03 est ${ar[2]}"
           fi
        
           if [[ ($4 == status) ]] ; then #affichage sur le nagios
           $PLUGIN_PATH/check_dummy $STATE "$rslt_affiche"
           fi
           exit $STATE

        erreur :

        CRITIQUE: PRODUCTION_01 est Up PRODUCTION_02 est Up PRODUCTION_03 est Up

        Normalement, si tous mes prod sont up = OK

        Si un de mes prod est down alors critique



        -
        Edité par Hujino 23 février 2017 à 12:04:24

        • Partager sur Facebook
        • Partager sur Twitter
          24 février 2017 à 14:52:19

          `STATE' n'est jamais modifié, `State', lui, oui.

          mais par quelle magie `STATE=2' s'est-il transformé en `CRITIQUE:' ?

          • Partager sur Facebook
          • Partager sur Twitter

          Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

          Script shell - boucle

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown