2012-03-04 23 views
47

MySQLクエリ結果の値だけをbashスクリプトで取得したいと考えています。bashのMySQLクエリ結果からフィールドを取り出す方法

mysql -uroot -ppwd -e "SELECT id FROM nagios.host WHERE name='$host'" 

リターン:私は私のbashスクリプトに返された値を取得するにはどうすればよい

+----+ 
| id | 
+----+ 
| 0 | 
+----+ 

たとえば、次のコマンドを実行していますか? the manualから

> id=`mysql -uroot -ppwd -s -N -e "SELECT id FROM nagios.host WHERE name='$host'"` 
> echo $id 
0 

答えて

88

使用-s-N

--silent、

Silent mode. Produce less output. This option can be given multiple 
    times to produce less and less output. 

    This option results in nontabular output format and escaping of 
    special characters. Escaping may be disabled by using raw mode; see 
    the description for the --raw option. 

--skip-列名、-N

を-s
Do not write column names in results. 

EDIT

-ssとしても機能し、覚えやすいように見えます。

+0

、複数の列は、タブ区切りされます。 –

+2

出力としてエラーが発生しないようにするには、stderrをリダイレクトしてください。 'id = \' mysql -uroot -ppwd -ss -e "SELECT id FROM nagios.host WHERE name = '$ host'" 2>/dev/null \ '' –

+0

複数の列を取得する方法は? – Deckard

1

試行:

mysql -B --column-names=0 -uroot -ppwd -e "SELECT id FROM nagios.host WHERE name='$host'" 

-Bヘッダーが無効になり、列セパレータと

--column-名= 0としてタブを使用して結果を印刷します。

1

私は解決策を試しましたが、常に空の応答を受けました。私の場合は

解決した

#!/bin/sh 

FIELDVALUE=$(mysql -ss -N -e "SELECT field FROM db.table where fieldwhere = '$2'") 

echo $FIELDVALUE 
4

さらにコンパクト:

@のコーギーの答えと同様に
id=$(mysql -uroot -ppwd -se "SELECT id FROM nagios.host WHERE name=$host"); 
echo $id;