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.


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

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


„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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.