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. 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
    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. 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
          je ne sais pas si tu peux enchainer deux commandes ainsi.
          1. normalement il ny a pas de probléme pour executer une commande comme cela, mais la ca ne fonctionne pas.
            1. 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. 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. 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. 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. 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" ]