2011-03-13 66 views
1

我有表,我需要從shell腳本訪問它們並執行以下操作。如何在shell中使用mysql字段

> USERNAME="usr" PASSWORD="pwd" 
> DBNAME="mydb" 
> 
> mysql -u$USERNAME -p$PASSWORD $DBNAME<<EOF 
> selectfield1,field2,field3,field4 from table; 
> EOF 

給我的records.But我需要爲處理與正常的Linux命令 -

例如每個字段;

> mysql -u$USERNAME -p$PASSWORD $DBNAME<<EOF 
> select field1,field2,field3,field4 from table; 
> EOF 
> scp [email protected]: [email protected]:/tmp && rm -rf field2 

類似的東西 - 基本的東西是使用數據庫記錄在本地機器上調用linux命令。

+0

能否請您給我們確切mysql的輸出?我沒有在這裏安裝它自己嘗試。 – bmk 2011-03-13 17:36:41

+0

嗨,請在下面找到我的答案,這些字段是名稱,電子郵件,密碼和標誌 – 2011-03-14 12:11:36

回答

1

一種方法是使用此結構(嘗試一下,語法有點怪):

cat << EOF | while read a b c ; do echo "a:$a b:$b c:$c" ; done 
one two three 
EOF 

[編輯顯然與實際的SQL的東西代替catone two three]您需要確保mysql不會打印除結果之外的任何內容(無標誌/版權通知/版本信息頭等) - 我相信這裏有命令行開關。

如果返回的數據中有空格,或者如果它被除了空白以外的東西分隔,您也會遇到問題。對於那些,你通常可以設置$IFS以避免在你的列中發生的事情(可能是|),並讓你的查詢在兩個字段之間輸出該字符。

1

感謝您的回答和建議 - 但我發現下面的方法更容易。 使用這種方法安全嗎?

variable=`mysql -u$USERNAME -p$PASSWORD $DBNAME <<EOF 
select name,pass,email,flag from UserRemap where flag="Y" ; 
EOF` 

echo $variable 

name=`echo $variable | cut -d' ' -f5` 

pass=`echo $variable | cut -d' ' -f6` 

mail=`echo $variable | cut -d' ' -f7` 
+0

的工作,與上面所述相同的限制 - 如果返回的字段包含空格的問題。 – Mat 2011-03-15 11:03:27

+0

感謝您的澄清。 – 2011-03-17 19:31:24

相關問題