2009-08-28 6 views
3

私は、これらの行から特定のフィールドにアクセスできる動的な行数を返すシェルスクリプト/ cronジョブでMySQLコマンドを実行したいとします。私は、これらのフィールドのエントリに追加のコマンドを実行することでループしたいと思います。シェルスクリプトでMySQLセルを取得

私の二つの質問は、以下のとおりです。

  1. 私はシェルスクリプト変数に行のセット(各行の理想的なだけで、単一セル)を返すにはどうしますか?

  2. 必要な情報を返すPHPスクリプトを作成し、これをシェルスクリプト変数に保存できますか?もしそうなら、シェルからPHPスクリプトを実行して情報を返す方法はありますか?

答えて

4
echo 'select some_column from some_table' | mysql -uusername -ppassword some_db | tail -n+2 

いくつかの重要な事柄:

  1. -pとパスワードの間にスペースが存在することはできません。存在する場合は、パスワードを入力しなかったものとみなし、対話形式で入力するよう促します。いくつかのOSでは、他のユーザーが他のユーザーが実行しているコマンドに対して完全なコマンドラインを見ることができるようになっているので、-ppasswordはセキュリティリスクです。ログインできるユーザーがすべて信頼できるマシン、またはFreeBSDのようなこの種の詮索を防ぐOSでのみこれを実行します。

  2. "tail"呼び出しは、最初の出力行(列名)を無視します。結果は第2行から始まり、したがって+2となります。

  3. "count rows(*)from some_table"という以外は、 "count rows"ビットは似ています。

0

あなたはのようなクエリを発行し、mysqlクライアントを経由して、あなたの結果を得ることを期待ツールを使用することができます。 Expect

これは、シェルスクリプトではありませんが、あなたはシェルスクリプトから呼び出すことができ、構文は非常にシンプルであり、ネット上にはexpectを使うための例がたくさんあります。

1

シェルスクリプトの代わりにPHPを使用できますか?あなたのcronjobにシェルスクリプトの代わりに/path/to/php mycron.phpを実行するだけです。ここに注意を払うために

1

あなたあなたはbashでそれをすべて保つために必要がある場合にも、このような何かを行うことができます:

mysql -b -e "SELECT one_column FROM tables" | { 
    read 
    while [ ! -z "$REPLY" ] 
    do 
    # do something useful with the $REPLY variable here 
    read 
    done 
} 

(それを行うには、より効率的な方法があることを特定)

別のオプション、xargs:

mysql -b -e "SELECT one_column FROM tables" | xargs usefulcommand 

有用なコマンドは組み込みシフト関数を使用してコマンドラインのすべてを処理しますargume nts。