Script shell

Bonjour,
voila j'ecrit un script shell qui a pour but d aller rechercher une variable et de renvoyer en fonctions de celle-ci un message.
Le probleme est que lors de l'execution de celui-ci, monshell repond:
end of file unexpected (expecting "fi").
Voila mon script:

#!/bin/sh
####################################################################
#### By Franck Marrel
#### updated: 28/09/09
#### scripts afin de savoir si l'onduleur est sur battery ou secteur
####################################################################

STATE_OK=2
STATE_CRITICAL=1

battery='snmpget -v1 -c public '$arg' -c public 1.3.6.1.4.1.705.1.7.3.0'
if [ "$battery" = "$STATE_OK" ]
then
echo "Onduleur sur secteur"
exit $STATE_OK
else if [ "$battery" = "$STATE_CRITICAL" ]
then
echo "Onduleur sur battery"
exit $STATE_CRITICAL
else
echo "Pas de données reçues de l'hôte"
exit 0
fi

d'ou vient mon probleme?
Merci de bien vouloir m'aider.
Configuration: Windows XP
Safari 532.0

12 réponses

  1. Contributeur
    je trouve étrange ta comparaison, enfin les guillemets surtout.
    [ "$battery" = "$STATE_CRITICAL" ]
    ou[ $battery = $STATE_CRITICAL ]
    Mais les guillements qui entourent la condition, c'est étrange. Test :
    [ "$battery" -eq "$STATE_CRITICAL" ]
    1. Modérateur
      Ca ne vient pas de la boucle ça, mais du retour de ta commande.
      Est-ce qu'en fonction des différents paramètres elle renvoie autre chose que "2".
      En fait elle renvoie quoi cette commande ?
      1. oui ca va beaucoup mieux mais maintenant je m'apercoit que ma boucles if ne fonctionne pas.
        J'ai toujours 2 en retour.
        #!/bin/sh
        ####################################################################
        #### By Franck Marrel
        #### updated: 28/09/09
        #### scripts afin de savoir si l'onduleur est sur battery ou secteur
        ####################################################################

        STATE_OK=1
        STATE_CRITICAL=2

        battery=`snmpget -v1 -c public "$1" 1.3.6.1.4.1.705.1.7.3.0|cut -f 4 -d ":"`
        echo battery = $battery //2
        if [ "$battery = $STATE_OK" ]
        then
        echo "Onduleur sur secteur"
        exit $STATE_OK
        elif [ "$battery = $STATE_CRITICAL" ]
        then
        echo "Onduleur sur battery"
        exit $STATE_CRITICAL
        else
        echo "Pas de données reçues de l'hôte"
        exit 0
        fi

        comment cela se fait?
        1. salut,

          Cette variable $arg et passe en paramétre a mon script.
          meme en mettant les double quote, j'ai une erreur car le script ne trouve pas l'objet dans la mib alors que celui-ci existe bien.
          pour executer mon script je fait bien pourtant:

          ./script 192.168.X.X

          Et avant j'ai effectuer un chmod 777 script.sh
          1. Modérateur
            Cette variable $arg et passe en paramétre a mon script.
            Alors essaie avec "$1", ça devrait aller mieux :

            battery=$(snmpget -v1 -c public "$1" 1.3.6.1.4.1.705.1.7.3.0) 
            ;-))
        2. Modérateur
          Salut,

          Et elle sort d'où cette variable ? ($arg)

          En plus elle doit être entre des quotes doubles sous peine de ne pas être interprétée ;-((
          battery=$(snmpget -v1 -c public "$arg" 1.3.6.1.4.1.705.1.7.3.0) 

          1. normalement il ny a pas de probléme pour executer une commande comme cela, mais la ca ne fonctionne pas.
            1. Contributeur
              je ne sais pas si tu peux enchainer deux commandes ainsi.
              1. je fais cela:
                battery=$(snmpget -v1 -c public `$arg` 1.3.6.1.4.1.705.1.7.3.0)

                et j'ai maintenant un probléme dans la commande, mais je ne c pas d'ou?
                1. Contributeur
                  si tu mets elif, un seul fi, sinon deux. En fait nos deux réponses sont justes ;-)
                  pour une commande, 2 choix : $(commande) ou `commande`. ATTENTION, il s'agit de ` (alt+ctrl+"7") et non de ' ("4") comme caractère.
                  1. Merci en changeant else if par elif ca fonctionne, mais du coup doij' mettre 2 fi a la fin?
                    et ma variable battery ne prend pas ma commande. Car il ne prend pas l'argument. comment cela se fait?
                    battery=$(snmpget -v1 -c public '$arg' 1.3.6.1.4.1.705.1.7.3.0)
                    merci