Database JUNKY

MySQL,MariaDBを中心としたブログです

MySQL SQLの検索結果をshellの変数に格納する方法

色々な書き方がありますが、私は以下のように書いてます。というほど書いてないので、必要な時にすっかり忘れるのが現実ですが。。

例えばこんなケースで書いてみます。

とあるテーブルの検索結果が0(ゼロ)件以外だったら、後続の処理を実行する

bash (shell)

#!/bin/bash

_MYSQL="mysql -umyuser -pmypasswd -N"
_SQL="SELECT COUNT(Id) AS cnt FROM table_1;"

_RES=$(${_MYSQL} -e "${_SQL}")

if [ ${_RES} -eq 0 ]; then
  echo "_RES=${_RES} EXIT 1"
  exit 1
fi

echo "_RES=${_RES} EXIT 0"

exit 0

どうでしょう!簡単でしょ?

一点、補足がある部分は、mysql 実行時の()ですね。 ()の中で実行したコマンドは別プロセスで実行されるって意味になります。

つまり、

_RES=$(${_MYSQL} -e "${_SQL}")

の部分は、mysqlコマンドを別プロセスで実行し、実行結果を_RES変数に入れている感じになるんですね。

でも、一行、一カラムしか返さないレコード限定になるかなー?って思います。

無理にやればできないこともないですが、そこまで、bashにこだわる必要がゼロなので、例えば件数をみて、後続を実行するかしないかなんて時のチェックに有効だと思います。(それ以外の用途があまり見つからないです)

f:id:hit10231023:20180309104332j:plain