A voir également:
- Problème syntaxe script shell
- Script vidéo youtube - Guide
- Classic shell windows 11 - Télécharger - Personnalisation
- Microsoft activation script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Script cmd - Guide
17 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
15 avril 2010 à 11:33
15 avril 2010 à 11:33
Re,
Je vois quelque chose qui me semble bizarre ici (voir en gras)
Je vois quelque chose qui me semble bizarre ici (voir en gras)
# INI File parser cfg.parser () { IFS=$'\n' && ini=( $(<$1) ) ini=( ${ini[*]//;*/} ) ini=( ${ini[*]/#[/\}$'\n'cfg.section.} ) ini=( ${ini[*]/%]/ \(} ) ini=( ${ini[*]/=/=\( } ) ini=( ${ini[*]/%/ \)} ) ini=( ${ini[*]/%\( \)/\(\) \{} ) ini=( ${ini[*]/%\} \)/\}} ) ini[0]='' ini[${#ini[*]} + 1]='}' eval "$(echo "${ini[*]}")" }
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
15 avril 2010 à 11:37
15 avril 2010 à 11:37
Salut,
Il ne me semble pas, c'est la fin de la 1ère (l'autre du milieu étant échappée) ;-\
Il ne me semble pas, c'est la fin de la 1ère (l'autre du milieu étant échappée) ;-\
ini=( ${ini[*]/#[/\}$'\n'cfg.section.} )
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
15 avril 2010 à 11:42
15 avril 2010 à 11:42
Re,
@Jipicy
Tu as raison, j'ai mal vu ;-)
@Jipicy
Tu as raison, j'ai mal vu ;-)
Cette partie sert à lire le fichier ini qui contient les OID. Ces derniers correspondent à des identifiants du copieur en question. Les trois OID sont:
la cartouche cyan, son niveau total, son niveau actuel.
Je suis loin d'être un pro en shell je dirai même que je suis novice dans ce domaine.
Au vu des erreurs, n'as tu vraiment aucune idée du pb??
Merci
la cartouche cyan, son niveau total, son niveau actuel.
Je suis loin d'être un pro en shell je dirai même que je suis novice dans ce domaine.
Au vu des erreurs, n'as tu vraiment aucune idée du pb??
Merci
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
15 avril 2010 à 11:48
15 avril 2010 à 11:48
Non elle ne sert pas à lire le fichier, mais à en changer la forme, du moins parser certains caractères pour les changer ou les supprimer.
Par contre il faudrait savoir ce que chaque ligne est sensée faire exactement parce que c'est assez pénible à décoder (même si certaines coulent de source), et il serait plus facile de connaitre le résultat attendu de ce fichier en sortie...
Par contre il faudrait savoir ce que chaque ligne est sensée faire exactement parce que c'est assez pénible à décoder (même si certaines coulent de source), et il serait plus facile de connaitre le résultat attendu de ce fichier en sortie...
Tu penses qu'il y a une accolade en trop lami20j?
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
15 avril 2010 à 11:40
15 avril 2010 à 11:40
Non, j'ai mal vu, jipicy a raison.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
15 avril 2010 à 11:41
15 avril 2010 à 11:41
Re,
C'est normal d'utiliser le . dans le nom de procédures?!!
Pourquoi pas utiliser cfg_parser plutôt ?
C'est normal d'utiliser le . dans le nom de procédures?!!
Pourquoi pas utiliser cfg_parser plutôt ?
ça ne change rien que ce soit _ ou . les erreurs sont les mêmes.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
15 avril 2010 à 11:47
15 avril 2010 à 11:47
Ben, moi, avec ton script la seule erreur que j'ai eu c'est
Déjà tu peux commencer par modifier les noms des procédures.
Ensuite lance le script et colle ici les erreurs
~ $ sh script.sh script.sh: line 132: 'cfg.parser': not a valid identifier
Déjà tu peux commencer par modifier les noms des procédures.
Ensuite lance le script et colle ici les erreurs
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
15 avril 2010 à 11:52
15 avril 2010 à 11:52
J'ai la même erreur ;-)
dubcek
Messages postés
18767
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
5 mars 2025
5 628
15 avril 2010 à 12:01
15 avril 2010 à 12:01
et avec bash script.sh ?
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
15 avril 2010 à 12:14
15 avril 2010 à 12:14
Effectivement de cette façon plus d'erreur dans l'interprétation de la fonction :
jp@MDK:~/tmpfs ssh$ cat foo.sh #! /bin/sh #set -xv FILE="ini.file" # INI File parser cfg.parser () { IFS=$'\n' && ini=( $(<$1) ) ini=( ${ini[*]//;*/} ) ini=( ${ini[*]/#[/\}$'\n'cfg.section.} ) ini=( ${ini[*]/%]/ \(} ) ini=( ${ini[*]/=/=\( } ) ini=( ${ini[*]/%/ \)} ) ini=( ${ini[*]/%\( \)/\(\) \{} ) ini=( ${ini[*]/%\} \)/\}} ) ini[0]='' ini[${#ini[*]} + 1]='}' eval "$(echo "${ini[*]}")" } cfg.parser $FILE jp@MDK:~/tmpfs ssh$ cat ini.file [sharpmx2301n] name=.1.3.6.1.2.1.43.12.1.1.4.1.1 total=.1.3.6.1.2.1.43.11.1.1.8.1.1 status=.1.3.6.1.2.1.43.11.1.1.9.1.1 jp@MDK:~/tmpfs ssh$ bash foo.sh jp@MDK:~/tmpfs ssh$ RIEN ;-(( jp@MDK:~/tmpfs ssh$ bash foo.sh # En mode verbeux FILE="ini.file" + FILE=ini.file # INI File parser cfg.parser () { IFS=$'\n' && ini=( $(<$1) ) ini=( ${ini[*]//;*/} ) ini=( ${ini[*]/#[/\}$'\n'cfg.section.} ) ini=( ${ini[*]/%]/ \(} ) ini=( ${ini[*]/=/=\( } ) ini=( ${ini[*]/%/ \)} ) ini=( ${ini[*]/%\( \)/\(\) \{} ) ini=( ${ini[*]/%\} \)/\}} ) ini[0]='' ini[${#ini[*]} + 1]='}' eval "$(echo "${ini[*]}")" } cfg.parser $FILE + cfg.parser ini.file + IFS=' ' + ini=($(<$1)) <$1 + ini=(${ini[*]//;*/}) + ini=(${ini[*]/#[/\}' 'cfg.section.}) + ini=(${ini[*]/%]/ \(}) + ini=(${ini[*]/=/=\( }) + ini=(${ini[*]/%/ \)}) + ini=(${ini[*]/%\( \)/\(\) \{}) + ini=(${ini[*]/%\} \)/\}}) + ini[0]= + ini[${#ini[*]} + 1]='}' echo "${ini[*]}" ++ echo ' cfg.section.sharpmx2301n () { name=( .1.3.6.1.2.1.43.12.1.1.4.1.1 ) total=( .1.3.6.1.2.1.43.11.1.1.8.1.1 ) status=( .1.3.6.1.2.1.43.11.1.1.9.1.1 ) }' + eval ' cfg.section.sharpmx2301n () { name=( .1.3.6.1.2.1.43.12.1.1.4.1.1 ) total=( .1.3.6.1.2.1.43.11.1.1.8.1.1 ) status=( .1.3.6.1.2.1.43.11.1.1.9.1.1 ) }' cfg.section.sharpmx2301n () { name=( .1.3.6.1.2.1.43.12.1.1.4.1.1 ) total=( .1.3.6.1.2.1.43.11.1.1.8.1.1 ) status=( .1.3.6.1.2.1.43.11.1.1.9.1.1 ) } jp@MDK:~/tmpfs ssh$
Je suis sûr que c'est pas grand chose mais franchement j'ai beau retourner tout ça dans tous les sens, je vois pas...
D'autres idées??
D'autres idées??
si ça peut aider:
cfg.parser () {
IFS=$'\n' && ini=( $(<$1) ) # convert to line-array
ini=( ${ini[*]//;*/} ) # remove comments
ini=( ${ini[*]/#[/\}$'\n'cfg.section.} )# set section prefix
ini=( ${ini[*]/%]/ \(} ) # convert text2function (1)
ini=( ${ini[*]/=/=\( } ) # convert item to array
ini=( ${ini[*]/%/ \)} ) # close array parenthesis
ini=( ${ini[*]/%\( \)/\(\) \{} ) # convert text2function (2)
ini=( ${ini[*]/%\} \)/\}} ) # remove extra parenthesis
ini[0]='' # remove first element
ini[${#ini[*]} + 1]='}' # add the last brace
eval "$(echo "${ini[*]}")" # eval the result
cfg.parser () {
IFS=$'\n' && ini=( $(<$1) ) # convert to line-array
ini=( ${ini[*]//;*/} ) # remove comments
ini=( ${ini[*]/#[/\}$'\n'cfg.section.} )# set section prefix
ini=( ${ini[*]/%]/ \(} ) # convert text2function (1)
ini=( ${ini[*]/=/=\( } ) # convert item to array
ini=( ${ini[*]/%/ \)} ) # close array parenthesis
ini=( ${ini[*]/%\( \)/\(\) \{} ) # convert text2function (2)
ini=( ${ini[*]/%\} \)/\}} ) # remove extra parenthesis
ini[0]='' # remove first element
ini[${#ini[*]} + 1]='}' # add the last brace
eval "$(echo "${ini[*]}")" # eval the result
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
Modifié par jipicy le 15/04/2010 à 12:08
Modifié par jipicy le 15/04/2010 à 12:08
Mouais ;-(
Faudrait surtout avoir la tronche du fichier une fois parsé ;-\
Chez moi cette ligne "ini=( ${ini[*]/#[/\}$'\n'cfg.section.} )# set section prefix " me renvoie ça :
Je ne pense pas que ce soit le résultat escompté, surtout quand on on sait que plus loin :
ini[0]='' # remove first element
Edit : Désolé impossible de mettre en page, un élément interfère avec le code source de la page ;-((
Edit2 : J'y suis arrivé ;-))
Faudrait surtout avoir la tronche du fichier une fois parsé ;-\
Chez moi cette ligne "ini=( ${ini[*]/#[/\}$'\n'cfg.section.} )# set section prefix " me renvoie ça :
jp@MDK:~/tmpfs ssh$ echo ${ini[@]} [sharpmx2301n] name=.1.3.6.1.2.1.43.12.1.1.4.1.1 total=.1.3.6.1.2.1.43.11.1.1.8.1.1 status=.1.3.6.1.2.1.43.11.1.1.9.1.1 jp@MDK:~/tmpfs ssh$ echo ${ini[*]/#<a href='/\\}$'\n'cfg.section.} } cfg.section.\sharpmx2301n] name=.1.3.6.1.2.1.43.12.1.1.4.1.1 total=.1.3.6.1.2.1.43.11.1.1.8.1.1 status=.1.3.6.1.2.1.43.11.1.1.9.1.1 jp@MDK:~/tmpfs ssh$
Je ne pense pas que ce soit le résultat escompté, surtout quand on on sait que plus loin :
ini[0]='' # remove first element
Edit : Désolé impossible de mettre en page, un élément interfère avec le code source de la page ;-((
Edit2 : J'y suis arrivé ;-))
Je veux bien changer le nom des proc mais je mets quoi à la place?
Je fais une pause, reviens à 14h.
Si vous avez du nv d'ici là...
Merci
Je fais une pause, reviens à 14h.
Si vous avez du nv d'ici là...
Merci
dubcek
Messages postés
18767
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
5 mars 2025
5 628
Modifié par dubcek le 15/04/2010 à 14:18
Modifié par dubcek le 15/04/2010 à 14:18
'
CONSUMMABLE_USED_POURCENT='$CMD_EXPR 100 \- $CONSUMMABLE_POURCENT'
ne serait-ce pas
CONSUMMABLE_USED_POURCENT=$($CMD_EXPR 100 \- $CONSUMMABLE_POURCENT)
qu'il faut utiliser ?
n'y a-t-il pas confusion entre
à moins que ce soit l'affichage de CCM ?
CONSUMMABLE_USED_POURCENT='$CMD_EXPR 100 \- $CONSUMMABLE_POURCENT'
ne serait-ce pas
CONSUMMABLE_USED_POURCENT=$($CMD_EXPR 100 \- $CONSUMMABLE_POURCENT)
qu'il faut utiliser ?
n'y a-t-il pas confusion entre
' et ' back quote
à moins que ce soit l'affichage de CCM ?
Si, c'est bien le résultat que je cherche à avoir jipicy.
En fait j'ai oublié de préciser que le but de ce plugin c'est de pouvoir récupérer le nom de la cartouche son niveau total et actuel sous NAGIOS.
Ce script est en fait un plugin nagios check_snmp_printer_consummables.
S'il s'exécute correctement je devrais avoir sous nagios un statut OK avec les infos du toner.
En fait j'ai oublié de préciser que le but de ce plugin c'est de pouvoir récupérer le nom de la cartouche son niveau total et actuel sous NAGIOS.
Ce script est en fait un plugin nagios check_snmp_printer_consummables.
S'il s'exécute correctement je devrais avoir sous nagios un statut OK avec les infos du toner.
J'ai trouvé la solution au problème pour le OP. Son script est bien à part cette ligne:
ini[${#ini[*]} + 1]='}'
devient
ini[$ {#ini[*]} + 1]='}' (il y a une espace entre le $ et le { )
redémarrer Nagios et le plugin devra afficher les % des cartouches utilisées.
ini[${#ini[*]} + 1]='}'
devient
ini[$ {#ini[*]} + 1]='}' (il y a une espace entre le $ et le { )
redémarrer Nagios et le plugin devra afficher les % des cartouches utilisées.
Utilisateur anonyme
23 sept. 2011 à 00:12
23 sept. 2011 à 00:12
c'est très bizarre, car ${#ini[*]} retourne le nombre d'éléments du tableau ini, alors que $ {#ini[*]} ne veut rien dire, et devrait retourner une erreur.
Ben, pour moi ça a marché avec l'espace, sinon mon Nagios affichait Unknow et Unknow pour les % des cartouches utilisées et j'avais aussi des erreurs de syntaxe à la ligne 131, 133 et 137 dans le fichier check_snmp_printer_consummables (qui est tout le "plugin processing" et "file ini parse"). En mettant une espace entre le $ et le {, j'ai éliminé 6-7 erreurs à la fois à cet endroit.
j'ai encore une petite erreur de rien du tout à cette ligne, mais au moins, les % des cartouches utilisées s'affiche dans Nagios au lieu de Unknow. Et mes 3 OIDs sont corrects aussi pour l'imprimantes dans le fichier printer.ini
j'ai encore une petite erreur de rien du tout à cette ligne, mais au moins, les % des cartouches utilisées s'affiche dans Nagios au lieu de Unknow. Et mes 3 OIDs sont corrects aussi pour l'imprimantes dans le fichier printer.ini
p-ê, mais ça ne marche pas pour moi sinon. J'ai le status Unknown-Unknown sinon. Je ne suis pas le seul à avoir ce problème, regarde le post de polox. Il y a une erreur de syntaxe dans la partie file ini parse.
Juste fait la commande ./check_snmp_printer_consummables avec les 4-5 paramètres et infos avec l'adresse IP de ton imprimantes que tu veux monitorer en terminal et tu vas voir l'erreur que ça va faire sur les lignes 131, 133 et 137
Juste fait la commande ./check_snmp_printer_consummables avec les 4-5 paramètres et infos avec l'adresse IP de ton imprimantes que tu veux monitorer en terminal et tu vas voir l'erreur que ça va faire sur les lignes 131, 133 et 137
Utilisateur anonyme
Modifié par qqchquicommenceparQ le 24/09/2011 à 01:27
Modifié par qqchquicommenceparQ le 24/09/2011 à 01:27
ça
et là
ini[${#ini[*]} + 1]='}'peut être remplacé par
ini+=( } )c'est à dire, ajouter une accolade en tant que dernier élément du tableau ini.
et là
eval "$(echo "${ini[*]}")"le echo n'est pas nécessaire.
eval "${ini[@]}"est suffisant.
15 avril 2010 à 11:26
Difficile de débuguer un script (assez complexe) qu'on n'a pas développé soit même ;-((
Commence par rajouter "set -xv" après le shebang, et voir déjà si la verbosité te montre des choses qui t'auraient échappé, non ?
Qu'est sensée faire exactement cette partie :