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-ID: 417075

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

Ausgedruckt am: 21.11.2024 um 22:11 Uhr

SlainteMhath
Lösung SlainteMhath 13.02.2019 um 16:18:02 Uhr
Goto Top
Moin,

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

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

lg,
Slainte
nepixl
nepixl 13.02.2019 aktualisiert um 16:27:26 Uhr
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
SlainteMhath
Lösung SlainteMhath 13.02.2019 um 16:28:59 Uhr
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
nepixl
nepixl 13.02.2019 um 17:15:26 Uhr
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
SeaStorm
Lösung SeaStorm 14.02.2019 um 08:46:11 Uhr
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
SlainteMhath
Lösung SlainteMhath 14.02.2019 um 10:32:40 Uhr
Goto Top
nur und NUR "1" ist, und nicht " 1"
hier sollte ein
... | sed -s 's/ //'  
nach dem mysql.... helfen face-smile
138810
Lösung 138810 14.02.2019 aktualisiert um 16:43:37 Uhr
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  
nepixl
nepixl 15.02.2019 aktualisiert um 07:27:53 Uhr
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")