Jak przechowywać wyniki wielu zapytań SQL w zmiennych powłoki w Bash?

0

Muszę przechowywać w tablicy wyniki pobrane z bazy danych. Jak dotąd to jest to, czego próbuję bez powodzenia.

 Myarray=$(echo "SELECT A, B, C FROM table_a" | mysql database -u $user -p$password)

Moje rozumienie poleceń bash nie jest zbyt dobre, jak widać. Dziękuję Ci.

Fimo
źródło
To, co masz, wygląda na dobry początek. Co rozumiesz przez „brak sukcesu”? Co się stanie, kiedy to zrobisz?
G-Man
Mam wiele błędów, takich jak „mysql Ver 14.14 Distrib 5.5.40, dla debian-linux-gnu (x86_64) przy użyciu readline 6.3 Copyright (c) 2000, 2014, Oracle i / lub jej spółek stowarzyszonych. Wszelkie prawa zastrzeżone. Oracle jest zastrzeżonym znakiem towarowym firmy Oracle Corporation i / lub jej spółek zależnych. Inne nazwy mogą być znakami towarowymi ich właścicieli. Sposób użycia: mysql [OPCJE] [baza danych] - ?, --help Wyświetl tę pomoc i zakończ. -I, --help Synonim dla -? --automatyczne ponowne włączanie Włącz automatyczne uzupełnianie. Nie trzeba używać „powtórzenia”, aby uzyskać uzupełnienie tabeli i pola
Fimo
Czy zatem echo "SELECT A, B, C FROM table_a" | mysql database -u $user -p$passwordwyniki, które chcesz uchwycić? Jeśli tak się nie stanie, musisz najpierw uruchomić tę funkcję, a następnie martwić się o zastąpienie polecenia.
G-Man

Odpowiedzi:

2

To działa:

#!/bin/bash
results=($(mysql --user root -pwelcome ts -Bse "SELECT type, network_id, subnet_msk FROM remote_subnet;"))

cnt=${#results[@]}
for (( i=0 ; i<cnt ; i++ ))
do
    echo "Record No. $i: ${results[$i]}"
    fieldA=${results[0]};
    fieldB=${results[1]};
    fieldC=${results[2]};
done
Fimo
źródło
cnt = $ {# wyników [@]} podaje liczbę znaków w zwróconym wyjściu, a nie liczbę wierszy.
rzemieślnik
1

Dla mnie działało:

results=($(executeQuery "SELECT fieldA, fieldB FROM tableName;")) count=${#results[@]} echo $count for (( i=2 ; i<count ; i++ )) do fieldA=${results[$i]}; echo $id i=$((i+1)) fieldB=${results[$i]}; echo $fieldB done

Zenobia Panvelwalla
źródło
„executeQuery” to funkcja, która wykona moje zapytanie SQL w MySQL
Zenobia Panvelwalla
mysql -h $ dbHostName -u $ dbUserName -p $ dbPassword -D $ dbName -N -e „$ inputSQL”. => „-N” pozwala na uruchomienie pętli for od 0, a nie 2.
Zenobia Panvelwalla
0
#! bin/bash
query="select * from test;"

myarray=$(mysql -h hostname -u user -ppass database << eof
$query
eof)

echo $myarray
Jherran
źródło
1
Czy możesz wyjaśnić, co robi ten kod i jak rozwiązuje problem PO?
bwDraco
Testowałeś to? Czy na pewno myarray = $ powinno mieć „$”? Czy przyjmujesz jakieś założenia dotyczące formatu danych zwracanych z zapytania? Bash obsługuje tylko tablice jednowymiarowe? Jak sobie radzisz z wierszami i kolumnami? To wydaje się zbyt łatwe.
Marianna,
Robi to, o co pierwotnie prosił, zapisuje wynik zapytania w zmiennej bash. Nie dotyczyło to ani wierszy, ani kolumn.
jherran