How to make datas our friends

「エンジニアは発信していくことが責務である」という言葉に感化されて始めた勉強したことを書き留めていく備忘録的なやつ。

ShellScriptでMySQLの実行結果を変数にぶち込む

概要

ShellScriptをかきかきしていたときに、MySQLの実行結果(今回は数字)をShellの変数に代入して使用したいタイミングがあり、どうやって実現したのか備忘録。

▼こうゆうことをやりたい。

# MySQLを実行して
mysql -uroot -e "SELECT SUM(hoge) FROM fuga.table;"
# この変数に実行結果を入れたい!!
RESULT = MySQL実行結果

解決方法

# MySQLを実行
MYSQLRES=`mysql -uroot -e "SELECT CONCAT('RESULT=', SUM(hoge)) AS 'id0=0' FROM fuga.table;"`
# evalで変数に代入
eval `echo $MYSQLRES`

1)まずはMySQLの実行結果を変数 MYSQLRES に代入

MYSQLRES=`mysql -uroot -e "SELECT CONCAT('RESULT=', SUM(hoge)) AS 'id0=0' FROM fuga.table;"`

このときCONCATで"RESULT=代入したい数字"にするのが味噌。
このクエリの実行結果はこんな感じになっているはず。(数字は適当)

id0=0
RESULT=10

2)クエリの実行結果をevalで実行する

eval `echo $MYSQLRES`

先程のクエリの実行結果を代入した変数 MYSQLRESecho して eval でまとめて実行すると変数 id0RESULT にそれぞれ数字が代入されます。

id0 はぶっちゃけなんでもいいです、エイリアスで実行不能な文字列をいれると eval したときにエラーになるので、実行できればなんでもいいです笑

これでスクリプト内で変数として自由に利用できます。

> echo $RESULT
> 10

こんな方法もある

RESULT=`mysql -uroot -e "SELECT SUM(hoge) FROM fuga.table;" -B | tail -n 1`

普通にこっちの方がスマート。
ちなみにこれは会社の仲間が考えたやつ。

負けた感がすごい。