@chown による回答に +1 を付けますが、別の方法があります:bash スクリプトが MySQL インスタンスでローカルで実行されていて、datadir へのパスがわかっている場合は、テストできます:
if [ -d /var/lib/mysql/databasename ] ; then
# Do Stuff ...
fi
これは、スクリプトを実行しているシェル ユーザーが、MySQL の datadir の内容を読み取るためのファイル システム レベルの権限を持っていることも前提としています。これはよくあることですが、確実ではありません。
mysqlshow "test" > /dev/null 2>&1 && echo "Database exists."
mysqlshow コマンドの終了ステータスに応じて、次のエコーが実行されます。
スクリプト例 (--user
について Bill Karwin に感謝) と --password
コメント!):
#!/bin/bash
## --user=XXXXXX --password=XXXXXX *may* not be necessary if run as root or you have unsecured DBs but
## using them makes this script a lot more portable. Thanks @billkarwin
RESULT=`mysqlshow --user=XXXXXX --password=XXXXXX myDatabase| grep -v Wildcard | grep -o myDatabase`
if [ "$RESULT" == "myDatabase" ]; then
echo YES
fi
プロンプトでコマンドを実行すると、次のようになります:
[[email protected] ~]# mysqlshow myDatabase
Wildcard: myDatabase
+------------------+
| Databases |
+------------------+
| myDatabase |
+------------------+
DB が存在しない場合、出力は次のようになります:
[[email protected] ~]# mysqlshow myDatabase
Wildcard: myDatabase
+-----------+
| Databases |
+-----------+
+-----------+
次に、出力を解析し、存在するかどうかに基づいて必要なことを行います!