View previous topic :: View next topic |
Author |
Message |
bbgermany Veteran
Joined: 21 Feb 2005 Posts: 1844 Location: Oranienburg/Germany
|
Posted: Thu Nov 14, 2019 1:58 pm Post subject: [SOLVED] [BASH] Script schlägt immer wieder fehl |
|
|
Hallo Leute,
ich verstehe es nicht, aber vielleicht kann mir jemand dabei helfen. Es geht um folgendes: Ich frage via SSH eine HPE 3Par ab um mir ein paar Werte geben zu lassen. Unter anderem auch die Batterieladestände. Wenn ich die Abfrage starte sind in der Abfragedatei auch die richtigen Werte:
Code: |
Power Supply ID,0
Assembly Serial Number,XXXXXXXXXXXXXX
Charge Level(%),100
Power Supply ID,1
Assembly Serial Number,YYYYYYYYYYYYYYY
Charge Level(%),100
|
Leider sagt mir das Script seit neustem, den folgenden Fehler:
Code: |
./check_3par: line 170: 100 + : syntax error: operand expected (error token is "+ ")
|
Ich habe jetzt Google schon wegen dem Fehler bemüht, aber lt. Ergebnisliste habe ich alles richtig. Hier mal noch den Bereich aus dem Script. Vielleicht fällt ja jemandem auf, was ich übersehe:
Code: |
# check batteries load level
if [ $COMMAND == "check_bat" ]; then
$CONNECTCMD showbattery -d -csvtable | grep "Supply ID\|Serial\|Charge Level" > $TMPDIR/3par_$COMMAND.$INSERV.out
if [ `cat $TMPDIR/3par_$COMMAND.$INSERV.out | wc -l` -lt 3 ]; then
echo "No Battery"
rm -f $TMPDIR/3par_$COMMAND.$INSERV.out
else
CHARGELVL=`cat ${TMPDIR}/3par_${COMMAND}.${INSERV}.out | grep Charge | cut -d, -f2`
IFS=' ' read -r -a CHARGE_LVL <<< $CHARGELVL
BATCOUNT=`cat ${TMPDIR}/3par_${COMMAND}.${INSERV}.out | grep ID | cut -d, -f2`
BATS=`wc -w <<< \"${BATCOUNT}\"`
for a in $BATCOUNT; do
CHARGE_SUM=$((${CHARGE_SUM} + ${CHARGE_LVL[${a}]}));
done
CHARGE_SUM=$((${CHARGE_SUM}/`wc -w <<< \"${BATCOUNT}\"`))
if [ $CHARGE_SUM -eq 100 ]; then
status=0
statustxt=OK
elif [ $CHARGE_SUM -lt 95 ]; then
status=2
statustxt=CRITICAL
elif [ $CHARGE_SUM -le 99 ]; then
status=1
statustxt=WARNING
fi
fi
echo "$status ${INSERV}_Info_Bat Battery=$CHARGE_SUM;99;95;100;0 $statustxt - $BATS Batteries loaded to: $CHARGE_SUM %"
#rm $TMPDIR/3par_$COMMAND.$INSERV.out
fi
|
Es hängt immer in der Schleife, wo das Script die Werte CHARGE_SUM und CHARGE_LVL kombinieren soll. Vielleicht hat ja einer ne Idee.
Danke schon mal im Voraus.
MfG. Stefan _________________ Desktop: Ryzen 5 5600G, 32GB, 2TB, RX7600
Notebook: Dell XPS 13 9370, 16GB, 1TB
Server #1: Ryzen 5 Pro 4650G, 64GB, 16.5TB
Server #2: Ryzen 4800H, 32GB, 22TB
Last edited by bbgermany on Mon Nov 18, 2019 6:53 am; edited 1 time in total |
|
Back to top |
|
|
firefly Watchman
Joined: 31 Oct 2002 Posts: 5211
|
Posted: Thu Nov 14, 2019 2:56 pm Post subject: |
|
|
Das ergbnis des ausdrucks "${CHARGE_LVL[${a}]}" ist vermutlich einfach leer.
Gib doch mal die einzelnen Werte vor der Addition aus _________________ Ein Ring, sie zu knechten, sie alle zu finden,
Ins Dunkel zu treiben und ewig zu binden
Im Lande Mordor, wo die Schatten drohn. |
|
Back to top |
|
|
mike155 Advocate
Joined: 17 Sep 2010 Posts: 4438 Location: Frankfurt, Germany
|
Posted: Thu Nov 14, 2019 3:56 pm Post subject: |
|
|
Nach jedem Aufruf von externen Programmen aus bash (und auch aus anderen Programmiersprachen) sollte immer das Ergebnis geprüft werden. Ich sehe keine einzige Überprüfung. |
|
Back to top |
|
|
toralf Developer
Joined: 01 Feb 2004 Posts: 3925 Location: Hamburg
|
Posted: Fri Nov 15, 2019 3:51 pm Post subject: Re: [BASH] Script schlägt immer wieder fehl |
|
|
bbgermany wrote: | Es hängt immer in der Schleife, wo das Script die Werte CHARGE_SUM und CHARGE_LVL kombinieren soll. | Mit kannst Du m.E. sehr viel besser die Forenteilnehmer entscheiden lassen, wo der Fehler auftritt. |
|
Back to top |
|
|
bbgermany Veteran
Joined: 21 Feb 2005 Posts: 1844 Location: Oranienburg/Germany
|
Posted: Mon Nov 18, 2019 6:53 am Post subject: |
|
|
Hi,
vielen Dank für eure Hilfe. Ich konnte dadurch das Problem ein wenig mehr isolieren. Es lag daran, dass die folgende Zeile das Array irgendwie nicht richtig erstellt hat, in dem die Werte für Ladung der Batterien gespeichert werden soll:
Code: |
IFS=' ' read -r -a CHARGE_LVL <<< $CHARGELVL
|
Da die Inhalt des Strings immer aus folgendermaßen aussieht:
konnte ich das direkt in ein Array umwandeln.
Danke euch nochmal.
MfG. Stefan _________________ Desktop: Ryzen 5 5600G, 32GB, 2TB, RX7600
Notebook: Dell XPS 13 9370, 16GB, 1TB
Server #1: Ryzen 5 Pro 4650G, 64GB, 16.5TB
Server #2: Ryzen 4800H, 32GB, 22TB |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|