PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mehrzeilige ausgabe von mysql zeilenweise verarbeiten



Rogdab
28-10-2008, 13:49
Hallo,
ich habe ein mysql query was mir mehrere Zeilen ausgibt, in
diesen Zeile gibt es auch Leerzeichen, darum habe ich im select ein concat welches die zeile in Anführungstriche packt.



"check_monitorcheck!80!'ALL OK - Revision'!" "check_monitorcheck!8011!'ServerOK'!" "check_monitorcheck!8111!'ALL OK'!"


wenn ich eine schleife baue werden trotztdem die Leerstellen ausgewertet


echo GETCMD $GET_CMD
BLA=($GET_CMD)
count=${#BLA[@]}
echo BLA: ${BLA }
echo $count

for (( i=0;i<$count;i++))
do
echo "---------------------"
echo CHK_I ${BLA[${i}]}



7
---------------------
CHK_I "check_monitorcheck!80!'ALL
---------------------
CHK_I OK
---------------------
CHK_I -
---------------------
CHK_I Revision'!"
---------------------



wie muss ich hier vorgehen?
In einer testdatei mit manuellem array funktioniert das mit den Anführungszeichen


danke

würmchen
28-10-2008, 17:30
Hm, gibt es in der Shell nicht oft Probleme mit einfachen und doppelten Anführungszeichen? Vielleicht liegt es daran.

Ansonsten, was willst Du genau mit der Ausgabe machen? Ich benutze oft AWK für das Verarbeiten von MySQL Ausgaben oder anderen Ausgaben auf der Konsole.

jan61
29-10-2008, 22:58
Moin,

das Problem bei Deiner Variante ist nicht die Schleife, sondern das Befüllen des Arrays $BLA - schon da werden (wie Du an der Ausgabe von $count siehst) die Leerzeichen zu Trennern der einzelnen Array-Elemente. Wenn Du zwingend ein Array brauchst, dann mach es am besten so:

declare -a BLA # BLA als Array deklarieren
OLD_IFS="$IFS" # ursprünglichen IFS (Input Field Separator) merken
IFS='
' # IFS auf Linefeed setzen
count=0 # Array-Element-Zaehler
for zeile in $(mysql_Abfrage); do # in $zeile steht jetzt die ganze Zeile
BLA[$count]="$zeile" # zuweisen an naechstes Array-Element
count=$(($count+1)) # Array-Indexzaehler inkrementieren
done
# IFS wiederherstellen
IFS="$OLD_IFS"
# Jetzt kannst Du mit Deiner Schleife starten
# ...
Wenn Du einfach nur die Zeilen auswerten willst, dann kannst Du Dir auch gleich das Füllen des Array sparen und innerhalb der oben gezeigten Schleife arbeiten.

Jan