データベースから取得した結果を保持する変数が必要です。これまでのところ、これは基本的に私が試みているもので、成功していません。
myvariable=$(mysql database -u $user -p $password | SELECT A, B, C FROM table_a)
ご覧のとおり、bashコマンドの私の理解はあまり良くありません。
MySQLコマンドラインインターフェースについてはあまり知りませんが、バッシングのヘルプだけが必要であると仮定して、次のようにコマンドを入れ替えてみてください。
myvariable=$(echo "SELECT A, B, C FROM table_a" | mysql database -u $user -p$password)
文字列をMySQLにエコーします。または、もっと派手になり、新しいbash機能(ここの文字列)を使用することもできます
myvariable=$(mysql database -u $user -p$password<<<"SELECT A, B, C FROM table_a")
エコーを伴わずに、同じこと(最新の十分なbashバージョンを使用していると仮定)になります。
-p $ passwordはタイプミスではありませんが、MySQLはコマンドラインからパスワードを入力することを想定していることに注意してください(オプションと値の間にスペースはありません)。
Myvariableには、すべての列ヘッダー、ASCIIアートフレームなど、MySQLが標準出力で出力するすべて(通常はエラーメッセージを除くすべて)が含まれていることに注意してください。
編集:
既に述べたように、-e
パラメータをMySQLに追加します。間違いなくそのために行きます。
より直接的な方法は次のとおりです。
myvar=$(mysql mydatabase -u $user -p$password -se "SELECT a, b, c FROM table_a")
データを1行ずつBash配列に読み込むには、次のようにします。
while read -a row
do
echo "..${row[0]}..${row[1]}..${row[2]}.."
done < <(echo "SELECT A, B, C FROM table_a" | mysql database -u $user -p $password)
または個々の変数に:
while read a b c
do
echo "..${a}..${b}..${c}.."
done < <(echo "SELECT A, B, C FROM table_a" | mysql database -u $user -p $password)
あなたはパイプを反対方向に持っているので、次のようにクエリをエコーする必要があります:
myvariable=$(echo "SELECT A, B, C FROM table_a" | mysql db -u $user -p $password)
別の選択肢は、このようにmysqlクライアントのみを使用することです
myvariable=$(mysql db -u $user -p $password -se "SELECT A, B, C FROM table_a")
(-s
はASCIIアートを回避するために必要です)
現在、BASHはこのタイプのシナリオ、特に文字列の処理やSQL結果の分割などを処理するのに最適な言語ではありません。 Perlで非常に簡単なものを得るには、多くの作業を行う必要があります。PythonまたはPHP。
たとえば、A、B、Cをそれぞれ独自の変数で取得するにはどうしますか?確かに実行可能ですが、パイプとエコー(非常に基本的なシェルのこと)を理解していない場合、それは簡単な作業ではありません。可能な限り、より適した言語を使用します。
Bashで単一の値を使用する場合:
companyid=$(mysql --user=$Username --password=$Password --database=$Database -s --execute="select CompanyID from mytable limit 1;"|cut -f1)
echo "$companyid"
myvariable=$(mysql database -u $user -p$password | SELECT A, B, C FROM table_a)
-p
の後の空白なし。些細ですが、機能しません。
特定のデータベース名と、クエリを実行するホストがある場合は、以下のクエリに従います。
outputofquery=$(mysql -u"$dbusername" -p"$dbpassword" -h"$dbhostname" -e "SELECT A, B, C FROM table_a;" $dbname)
したがって、mysqlクエリを実行するには、Linuxにmysqlクライアントをインストールする必要があります
テーブル名またはデータベースにスペースや「-」などのサポートされていない文字が含まれている場合の別の例
db='data-base'
db_d=''
db_d+='`'
db_d+=$db
db_d+='`'
myvariable=`mysql --user=$user --password=$password -e "SELECT A, B, C FROM $db_d.table_a;"`
myvariable=$(mysql -u user -p'password' -s -N <<QUERY_INPUT
use databaseName;
SELECT fieldName FROM tablename WHERE filedName='fieldValue';
QUERY_INPUT
)
echo "myvariable=$myvariable"