Problème syntaxe script shell
polox
-
Daniel -
Daniel -
Bonjour à tous,
J'ai un problème lors de l'exécution de mon script. Il me génère des erreurs et je n'arrive pas à régler le pb.
Néanmoins, il semble que cela provienne du ini file parser.
Je vous laisse mon script, le fichier ini (qui est parcouru) et enfin les erreurs trouvées.
Merci pour votre aide.
script:
#!/bin/bash
# check_snmp_printer_consummables
# Description : Check the consummables of the printer
# Version : 1.5
# Licence : GPLv2
# Commands
CMD_BASENAME="/usr/bin/basename"
CMD_SNMPGET="/usr/bin/snmpget"
CMD_SNMPWALK="/usr/bin/snmpwalk"
CMD_GREP="/bin/grep"
CMD_AWK="/usr/bin/awk"
CMD_EXPR="/usr/bin/expr"
# INI file providing OID for consummables (name, state and total)
FILE_OID="/usr/local/nagios/libexec/printers.ini"
# Script name
SCRIPTNAME='$CMD_BASENAME $0'
# Version
VERSION="1.5"
# Plugin return codes
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
# Default OID
OID_NAME=".1.3.6.1.2.1.43.12.1.1.4.1.1"
OID_TOTAL=".1.3.6.1.2.1.43.11.1.1.8.1.1"
OID_STATUS=".1.3.6.1.2.1.43.11.1.1.9.1.1"
# Default variables
DESCRIPTION="Unknown"
STATE=$STATE_UNKNOWN
CONSUMMABLE_USED_POURCENT="Unknown"
# Default options
COMMUNITY="public"
HOSTNAME="192.168.0.225"
MODEL="sharpmx2301n"
CONSUMMABLE="cyan"
WARNING=0
CRITICAL=0
# Option processing
print_usage() {
echo "Usage: ./check_snmp_printer_consummables -H 192.168.0.225 -C public -m sharpmx2301n -o cyan -w 85 -c 90"
echo " $SCRIPTNAME -H ADDRESS"
echo " $SCRIPTNAME -C STRING"
echo " $SCRIPTNAME -w INTEGER"
echo " $SCRIPTNAME -c INTEGER"
echo " $SCRIPTNAME -h"
echo " $SCRIPTNAME -V"
}
print_version() {
echo $SCRIPTNAME version $VERSION
echo ""
echo "The nagios plugins come with ABSOLUTELY NO WARRANTY."
echo "You may redistribute copies of the plugins under the terms of the GNU General Public License v2."
}
print_help() {
print_version
echo ""
print_usage
echo ""
echo "Check the consummable of the printer"
echo ""
echo "-H ADDRESS"
echo " Name or IP address of host (default: 192.168.0.225)"
echo "-C STRING"
echo " Community name for the host's SNMP agent (default: public)"
echo "-m STRING"
echo " Printer model (default: sharpmx2301n)"
echo "-o STRING"
echo " Consummable (black, cyan, magenta, yellow, drum) (default: cyan)"
echo "-w INTEGER"
echo " Warning level for consummable in percent (default: 0)"
echo "-c INTEGER"
echo " Critical level for consummable in percent (default: 0)"
echo "-h"
echo " Print this help screen"
echo "-V"
echo " Print version and license information"
echo ""
echo ""
echo "This plugin uses the 'snmpget' command and 'snmpwalk' command included with the NET-SNMP package."
echo "This plugin support performance data output."
echo "If the percentage of the warning level and the critical level are 0, then the script returns a state OK."
}
while getopts H:C:m:o:w:c:hV OPT
do
case $OPT in
H) HOSTNAME="$OPTARG" ;;
C) COMMUNITY="$OPTARG" ;;
m) MODEL="$OPTARG" ;;
o) CONSUMMABLE="$OPTARG" ;;
w) WARNING=$OPTARG ;;
c) CRITICAL=$OPTARG ;;
h)
print_help
exit $STATE_UNKNOWN
;;
V)
print_version
exit $STATE_UNKNOWN
;;
esac
done
# Plugin processing
# 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[*]}")"
}
if [ -e ${FILE_OID} ]; then
cfg.parser $FILE_OID
cfg.section.${MODEL}
OID_NAME=$name
OID_TOTAL=$total
OID_STATUS=$status
fi
CONSUMMABLE_NAME=$CONSUMMABLE
if [ $CONSUMMABLE = "cyan" ]; then
CONSUMMABLE_NAME="cyan\|cartouche\|toner"
fi
CONSUMMABLE_ID='$CMD_SNMPWALK -t 2 -r 2 -v 1 -c $COMMUNITY $HOSTNAME $OID_NAME | $CMD_GREP -i "${CONSUMMABLE_NAME}" | $CMD_AWK '{ print $1 }' | $CMD_AWK -F "." '{print $NF}''
if [ -n "$CONSUMMABLE_ID" ]; then
CONSUMMABLE_TOTAL='$CMD_SNMPGET -t 2 -r 2 -v 1 -c $COMMUNITY -Ovq $HOSTNAME ${OID_TOTAL}.${CONSUMMABLE_ID}'
CONSUMMABLE_STATUS='$CMD_SNMPGET -t 2 -r 2 -v 1 -c $COMMUNITY -Ovq $HOSTNAME ${OID_STATUS}.${CONSUMMABLE_ID}'
if [ -n "$CONSUMMABLE_TOTAL" ] && [ -n "$CONSUMMABLE_STATUS" ]; then
CONSUMMABLE_POURCENT='$CMD_EXPR \( $CONSUMMABLE_STATUS \* 100 \) / \( $CONSUMMABLE_TOTAL \)'
CONSUMMABLE_USED_POURCENT='$CMD_EXPR 100 \- $CONSUMMABLE_POURCENT'
if [ $WARNING != 0 ] || [ $CRITICAL != 0 ]; then
if [ $CONSUMMABLE_USED_POURCENT -gt $CRITICAL ] && [ $CRITICAL != 0 ]; then
STATE=$STATE_CRITICAL
elif [ $CONSUMMABLE_USED_POURCENT -gt $WARNING ] && [ $WARNING != 0 ]; then
STATE=$STATE_WARNING
else
STATE=$STATE_OK
fi
else
STATE=$STATE_OK
fi
case "$CONSUMMABLE" in
black)
CONSUMMABLE_NAME="of the black cartridge"
;;
cyan)
CONSUMMABLE_NAME="of the cyan cartridge"
;;
magenta)
CONSUMMABLE_NAME="of the magenta cartridge"
;;
magenta)
CONSUMMABLE_NAME="of the magenta cartridge"
;;
yellow)
CONSUMMABLE_NAME="of the yellow cartridge"
;;
drum)
CONSUMMABLE_NAME="of the printing device"
;;
*)
CONSUMMABLE_NAME="of the consummable"
esac
DESCRIPTION="Utilisation $CONSUMMABLE_NAME : ${CONSUMMABLE_USED_POURCENT}% | cons_used=${CONSUMMABLE_USED_POURCENT};$WARNING;$CRITICAL;0"
else
DESCRIPTION="Printer is waiting"
fi
fi
echo $DESCRIPTION
exit $STATE
fichier 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
erreurs
./check_snmp_printer_consummables: eval: line 133: Erreur de syntaxe près du symbole inattendu « ) »
)'heck_snmp_printer_consummables: eval: line 133: 'cfg.section.sharpmx2301n]
./check_snmp_printer_consummables: line 137: cfg.section.sharpmx2301n : commande introuvable
Timeout: No Response from 192.168.0.225
Unknown
J'ai un problème lors de l'exécution de mon script. Il me génère des erreurs et je n'arrive pas à régler le pb.
Néanmoins, il semble que cela provienne du ini file parser.
Je vous laisse mon script, le fichier ini (qui est parcouru) et enfin les erreurs trouvées.
Merci pour votre aide.
script:
#!/bin/bash
# check_snmp_printer_consummables
# Description : Check the consummables of the printer
# Version : 1.5
# Licence : GPLv2
# Commands
CMD_BASENAME="/usr/bin/basename"
CMD_SNMPGET="/usr/bin/snmpget"
CMD_SNMPWALK="/usr/bin/snmpwalk"
CMD_GREP="/bin/grep"
CMD_AWK="/usr/bin/awk"
CMD_EXPR="/usr/bin/expr"
# INI file providing OID for consummables (name, state and total)
FILE_OID="/usr/local/nagios/libexec/printers.ini"
# Script name
SCRIPTNAME='$CMD_BASENAME $0'
# Version
VERSION="1.5"
# Plugin return codes
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
# Default OID
OID_NAME=".1.3.6.1.2.1.43.12.1.1.4.1.1"
OID_TOTAL=".1.3.6.1.2.1.43.11.1.1.8.1.1"
OID_STATUS=".1.3.6.1.2.1.43.11.1.1.9.1.1"
# Default variables
DESCRIPTION="Unknown"
STATE=$STATE_UNKNOWN
CONSUMMABLE_USED_POURCENT="Unknown"
# Default options
COMMUNITY="public"
HOSTNAME="192.168.0.225"
MODEL="sharpmx2301n"
CONSUMMABLE="cyan"
WARNING=0
CRITICAL=0
# Option processing
print_usage() {
echo "Usage: ./check_snmp_printer_consummables -H 192.168.0.225 -C public -m sharpmx2301n -o cyan -w 85 -c 90"
echo " $SCRIPTNAME -H ADDRESS"
echo " $SCRIPTNAME -C STRING"
echo " $SCRIPTNAME -w INTEGER"
echo " $SCRIPTNAME -c INTEGER"
echo " $SCRIPTNAME -h"
echo " $SCRIPTNAME -V"
}
print_version() {
echo $SCRIPTNAME version $VERSION
echo ""
echo "The nagios plugins come with ABSOLUTELY NO WARRANTY."
echo "You may redistribute copies of the plugins under the terms of the GNU General Public License v2."
}
print_help() {
print_version
echo ""
print_usage
echo ""
echo "Check the consummable of the printer"
echo ""
echo "-H ADDRESS"
echo " Name or IP address of host (default: 192.168.0.225)"
echo "-C STRING"
echo " Community name for the host's SNMP agent (default: public)"
echo "-m STRING"
echo " Printer model (default: sharpmx2301n)"
echo "-o STRING"
echo " Consummable (black, cyan, magenta, yellow, drum) (default: cyan)"
echo "-w INTEGER"
echo " Warning level for consummable in percent (default: 0)"
echo "-c INTEGER"
echo " Critical level for consummable in percent (default: 0)"
echo "-h"
echo " Print this help screen"
echo "-V"
echo " Print version and license information"
echo ""
echo ""
echo "This plugin uses the 'snmpget' command and 'snmpwalk' command included with the NET-SNMP package."
echo "This plugin support performance data output."
echo "If the percentage of the warning level and the critical level are 0, then the script returns a state OK."
}
while getopts H:C:m:o:w:c:hV OPT
do
case $OPT in
H) HOSTNAME="$OPTARG" ;;
C) COMMUNITY="$OPTARG" ;;
m) MODEL="$OPTARG" ;;
o) CONSUMMABLE="$OPTARG" ;;
w) WARNING=$OPTARG ;;
c) CRITICAL=$OPTARG ;;
h)
print_help
exit $STATE_UNKNOWN
;;
V)
print_version
exit $STATE_UNKNOWN
;;
esac
done
# Plugin processing
# 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[*]}")"
}
if [ -e ${FILE_OID} ]; then
cfg.parser $FILE_OID
cfg.section.${MODEL}
OID_NAME=$name
OID_TOTAL=$total
OID_STATUS=$status
fi
CONSUMMABLE_NAME=$CONSUMMABLE
if [ $CONSUMMABLE = "cyan" ]; then
CONSUMMABLE_NAME="cyan\|cartouche\|toner"
fi
CONSUMMABLE_ID='$CMD_SNMPWALK -t 2 -r 2 -v 1 -c $COMMUNITY $HOSTNAME $OID_NAME | $CMD_GREP -i "${CONSUMMABLE_NAME}" | $CMD_AWK '{ print $1 }' | $CMD_AWK -F "." '{print $NF}''
if [ -n "$CONSUMMABLE_ID" ]; then
CONSUMMABLE_TOTAL='$CMD_SNMPGET -t 2 -r 2 -v 1 -c $COMMUNITY -Ovq $HOSTNAME ${OID_TOTAL}.${CONSUMMABLE_ID}'
CONSUMMABLE_STATUS='$CMD_SNMPGET -t 2 -r 2 -v 1 -c $COMMUNITY -Ovq $HOSTNAME ${OID_STATUS}.${CONSUMMABLE_ID}'
if [ -n "$CONSUMMABLE_TOTAL" ] && [ -n "$CONSUMMABLE_STATUS" ]; then
CONSUMMABLE_POURCENT='$CMD_EXPR \( $CONSUMMABLE_STATUS \* 100 \) / \( $CONSUMMABLE_TOTAL \)'
CONSUMMABLE_USED_POURCENT='$CMD_EXPR 100 \- $CONSUMMABLE_POURCENT'
if [ $WARNING != 0 ] || [ $CRITICAL != 0 ]; then
if [ $CONSUMMABLE_USED_POURCENT -gt $CRITICAL ] && [ $CRITICAL != 0 ]; then
STATE=$STATE_CRITICAL
elif [ $CONSUMMABLE_USED_POURCENT -gt $WARNING ] && [ $WARNING != 0 ]; then
STATE=$STATE_WARNING
else
STATE=$STATE_OK
fi
else
STATE=$STATE_OK
fi
case "$CONSUMMABLE" in
black)
CONSUMMABLE_NAME="of the black cartridge"
;;
cyan)
CONSUMMABLE_NAME="of the cyan cartridge"
;;
magenta)
CONSUMMABLE_NAME="of the magenta cartridge"
;;
magenta)
CONSUMMABLE_NAME="of the magenta cartridge"
;;
yellow)
CONSUMMABLE_NAME="of the yellow cartridge"
;;
drum)
CONSUMMABLE_NAME="of the printing device"
;;
*)
CONSUMMABLE_NAME="of the consummable"
esac
DESCRIPTION="Utilisation $CONSUMMABLE_NAME : ${CONSUMMABLE_USED_POURCENT}% | cons_used=${CONSUMMABLE_USED_POURCENT};$WARNING;$CRITICAL;0"
else
DESCRIPTION="Printer is waiting"
fi
fi
echo $DESCRIPTION
exit $STATE
fichier 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
erreurs
./check_snmp_printer_consummables: eval: line 133: Erreur de syntaxe près du symbole inattendu « ) »
)'heck_snmp_printer_consummables: eval: line 133: 'cfg.section.sharpmx2301n]
./check_snmp_printer_consummables: line 137: cfg.section.sharpmx2301n : commande introuvable
Timeout: No Response from 192.168.0.225
Unknown
A voir également:
- Problème syntaxe script shell
- Classic shell - Télécharger - Personnalisation
- Script vidéo youtube - Guide
- Ghost script - Télécharger - Polices de caractères
- Mas script - Accueil - Windows
- Script cmd - Guide
17 réponses
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[*]}")"
}
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
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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 ?
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
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
'
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.
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
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 :
# 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[*]}")" }