nepixl
Goto Top

Bash: SQL Query (Wenn count 1 dann .)

Hallo Gentlemen,

derzeit verzweifel ich etwas an einem simplen Bashscript.
Scheinbar kann ichs der Bash-Zicke nicht richtig servieren, auch nach mehreren Tutorials und Versuchen leider nicht. (Bash muss weiblich sein!)

Im Grunde soll das Script eine SQL (Count(*)) Abfrage abfeuern, wenn diese == 1 entspricht, gehe den DANN Fall, ansonsten natürlich den SONST.

Hier mal ein Schnippsel:

 if [ $(mysql -N -s -h $dbip -P $port -u $user -p$pass -D $dbname -e "SELECT count(*) from $asdf where $asdfID=\"$asdfGuid\";") -eq 1 ]; then  
                echo "**DANN **FALL"  
              else
		((zählewashoch ++))
                echo "**SONST **FALL"  
        fi

Aber egal wie ich es angehe, ich lande immer im SONST Fall.
Wenn ich die Abfrage händisch abschieße, bekomme ich als Resultat eine 1.
Demnach sollte der DANN Fall eintreten.
Vermutlich liegt der Fehler beim
 -eq 1
jedoch habe ich hier einige Variationen probiert, vergebens.

Probiert wurde:
==
equal
-eq "1"  
-eq '1'  
...

Bitte nicht steinigen, Bash und ich lernen uns gerade erst so richtig kennen. ;)

Vielen Dank für einen Denkanstoß face-smile

Gruß pixl

Edita: Typos

Content-Key: 417075

Url: https://administrator.de/contentid/417075

Printed on: April 20, 2024 at 05:04 o'clock

Member: SlainteMhath
Solution SlainteMhath Feb 13, 2019 at 15:18:02 (UTC)
Goto Top
Moin,

ich würde das mal als String vergleich versuchen (eq vergleicht Zahlen). Etwa so

if [ "$(...)" = "1" ];  then...  

lg,
Slainte
Member: nepixl
nepixl Feb 13, 2019 updated at 15:27:26 (UTC)
Goto Top
Hi @SlainteMhath,

Danke für deinen Ansatz aber das hatte ich auch schon probiert. face-sad

(eq vergleicht Zahlen)
Das Ergebnis sollte eine Zahl sein. Sprich
1
Dachte ich? (Jener gesuchte Datensatz ist immer nur einmal oder eben nicht(Count = 0) vorhanden)

LG
pixl
Member: SlainteMhath
Solution SlainteMhath Feb 13, 2019 at 15:28:59 (UTC)
Goto Top
Naja, eigentlich kommt da über STDOUT ein String zurück, Integers gibt's nur als Errorlevel. Und ob die Bash eine Typenkonvertierung durchführt weis ich nicht face-smile
Member: nepixl
nepixl Feb 13, 2019 at 16:15:26 (UTC)
Goto Top
Naja, eigentlich kommt da über STDOUT ein String zurück, Integers gibt's nur als Errorlevel. Und ob die Bash eine Typenkonvertierung durchführt weis ich nicht

Scheint so als würdest Du wissen was Du schreibst, daher gehe ich von einem Layer 8 Problem aus und versuche es nochmal. face-smile
Member: SeaStorm
Solution SeaStorm Feb 14, 2019 at 07:46:11 (UTC)
Goto Top
hi

if [ "$(...)" == "1" ];  
sollte ja eigentlich funktionieren. Achte bitte auch darauf, das der zurückgegebene werte nur und NUR "1" ist, und nicht " 1", also mit Leerzeichen oÄ irgendwo
Member: SlainteMhath
Solution SlainteMhath Feb 14, 2019 at 09:32:40 (UTC)
Goto Top
nur und NUR "1" ist, und nicht " 1"
hier sollte ein
... | sed -s 's/ //'  
nach dem mysql.... helfen face-smile
Mitglied: 138810
Solution 138810 Feb 14, 2019 updated at 15:43:37 (UTC)
Goto Top
Zitat von @SlainteMhath:
Und ob die Bash eine Typenkonvertierung durchführt weis ich nicht face-smile
Da empfehle ich
http://tldp.org/LDP/abs/html/comparison-ops.html

[[ "0" -eq 1 ]] && echo TRUE || echo FALSE  
[[ "1" -eq 1 ]] && echo TRUE || echo FALSE  
[[ "10" -eq "10" ]] && echo TRUE || echo FALSE  
Member: nepixl
nepixl Feb 15, 2019 updated at 06:27:53 (UTC)
Goto Top
Hallo Gentlemen,

vielen Dank für Eure Ansätze und Mühen mir aus dem Problem zu helfen.

Musste einen Bash-Pro an den (kompletten) Code lassen.
Jener hat anschließend festgestellt, dass die do Schleife davor etwas ungünstig war, ebenso hatte ich ein unnötiges CAT mit drin ..
Because the internet runs on cats, extra cats sneak in to bash scripts from time to time

Mit anderen Worten: es war ein Error 40 Problem. (Da sieht man wieder, dass es sinnvoll ist, den ganzen Code zu posten) fürs nächste Mal

Vielen Dank für euren Support!
Habt einen entspannten Freitag.
Gruß pixl

Edita:
... | sed -s 's/ //'
In meinem Fall war es dann (vor der if Schleife):
while IFS=";" read name url asdfGuid  
do
 asdfGuid=$(sed -e 's,\n,,' -e 's,\r,,' <<< "$asdfGuid")