Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[SOLVED] [BASH] Script schlägt immer wieder fehl
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum
View previous topic :: View next topic  
Author Message
bbgermany
Veteran
Veteran


Joined: 21 Feb 2005
Posts: 1799
Location: Oranienburg/Germany

PostPosted: Thu Nov 14, 2019 1:58 pm    Post subject: [SOLVED] [BASH] Script schlägt immer wieder fehl Reply with quote

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
_________________
1st: i5-7400, 16GB, 2TB
2nd: i5-4570, 16GB, 620GB
3rd: i5-4570, 32GB, 14.5TB
4th: i5-3210M, 8GB, 512GB
5th: i5-3210M, 8GB, 120GB


Last edited by bbgermany on Mon Nov 18, 2019 6:53 am; edited 1 time in total
Back to top
View user's profile Send private message
firefly
Advocate
Advocate


Joined: 31 Oct 2002
Posts: 4571

PostPosted: Thu Nov 14, 2019 2:56 pm    Post subject: Reply with quote

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
View user's profile Send private message
mike155
Advocate
Advocate


Joined: 17 Sep 2010
Posts: 2356
Location: Frankfurt, Germany

PostPosted: Thu Nov 14, 2019 3:56 pm    Post subject: Reply with quote

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
View user's profile Send private message
toralf
Developer
Developer


Joined: 01 Feb 2004
Posts: 3805
Location: Hamburg

PostPosted: Fri Nov 15, 2019 3:51 pm    Post subject: Re: [BASH] Script schlägt immer wieder fehl Reply with quote

bbgermany wrote:
Es hängt immer in der Schleife, wo das Script die Werte CHARGE_SUM und CHARGE_LVL kombinieren soll.
Mit
Code:
nl -ba <script>
kannst Du m.E. sehr viel besser die Forenteilnehmer entscheiden lassen, wo der Fehler auftritt.
Back to top
View user's profile Send private message
bbgermany
Veteran
Veteran


Joined: 21 Feb 2005
Posts: 1799
Location: Oranienburg/Germany

PostPosted: Mon Nov 18, 2019 6:53 am    Post subject: Reply with quote

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:

Code:

Zahl Zahl Zahl ...


konnte ich das direkt in ein Array umwandeln.

Danke euch nochmal.

MfG. Stefan
_________________
1st: i5-7400, 16GB, 2TB
2nd: i5-4570, 16GB, 620GB
3rd: i5-4570, 32GB, 14.5TB
4th: i5-3210M, 8GB, 512GB
5th: i5-3210M, 8GB, 120GB
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum All times are GMT
Page 1 of 1

 
Jump to:  
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