2011-03-13 44 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

相关问题