Script shell

Fermé
freeman43 Messages postés 110 Date d'inscription mardi 9 janvier 2007 Statut Membre Dernière intervention 10 décembre 2009 - 28 sept. 2009 à 14:08
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 28 sept. 2009 à 16:49
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.
A voir également:

12 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
28 sept. 2009 à 14:10
essai elif à la place de else if.
0
Utilisateur anonyme
28 sept. 2009 à 14:11
il manque un fi à la fin. Tu as 2 if et un seul fi :o)
0
freeman43 Messages postés 110 Date d'inscription mardi 9 janvier 2007 Statut Membre Dernière intervention 10 décembre 2009 16
28 sept. 2009 à 14:20
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
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
28 sept. 2009 à 14:36
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.
0

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

Posez votre question
freeman43 Messages postés 110 Date d'inscription mardi 9 janvier 2007 Statut Membre Dernière intervention 10 décembre 2009 16
28 sept. 2009 à 14:43
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?
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
28 sept. 2009 à 14:50
je ne sais pas si tu peux enchainer deux commandes ainsi.
0
freeman43 Messages postés 110 Date d'inscription mardi 9 janvier 2007 Statut Membre Dernière intervention 10 décembre 2009 16
28 sept. 2009 à 14:55
normalement il ny a pas de probléme pour executer une commande comme cela, mais la ca ne fonctionne pas.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
28 sept. 2009 à 15:39
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) 

0
freeman43 Messages postés 110 Date d'inscription mardi 9 janvier 2007 Statut Membre Dernière intervention 10 décembre 2009 16
28 sept. 2009 à 15:55
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
28 sept. 2009 à 16:05
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) 
;-))
0
freeman43 Messages postés 110 Date d'inscription mardi 9 janvier 2007 Statut Membre Dernière intervention 10 décembre 2009 16
28 sept. 2009 à 16:11
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?
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
28 sept. 2009 à 16:27
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 ?
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
28 sept. 2009 à 16:49
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" ]
0