2013-06-20 37 views
0

即时通讯编辑尝试编写一个bash脚本,将执行一个MySQL查询,如果结果数为1,则执行一些操作。我不能让它工作。bash中的条件语句与mysql查询

#!/bin/sh 
file=`mysql -uroot -proot -e "select count(*) from MyTable.files where strFilename='file.txt'"` 
if [[ $file == "count(*) 1" ]]; 
then 
    echo $file 
else 
    echo $file 
    echo "no" 
fi 

我验证了查询的效果。我一直得到这个返回

count(*) 1 
no 

即时通讯不知道为什么,但我认为它可能与变量$文件的类型有关。有任何想法吗?

回答

0

我改写了你的脚本,现在的工作:

#!/bin/sh 
file=`mysql -uroot -proot -e "select count(*) as count from MyTable.files where strFilename='file.txt'" | cut -d \t -f 2` 
if [ $file == "1" ]; 
then 
    echo $file 
else 
    echo $file 
    echo "no" 
fi 

我给一个更好的名字来计数字段,使用“切割”分裂mysql的输出分为两个区域。并将第二个字段的内容放入$ file中。然后你可以测试$ file为“1”。希望它可以帮助你..

+0

这是完美的,谢谢! – user2328273

0

我猜这不是count(*) 1而是count(*)\n1什么的。 echo $file会将IFS中的所有字符转换为空格,但==将区分这些空格字符。如果是这种情况,echo "$file"会给你一个不同的结果。 (注意引号)。

+0

我提到的输出正是:

[client] user="root" password="root" host="localhost" [mysql] database="MyTable" 

所以,雷纳托代码可以通过以下改写它是如何出现的。也许你可以澄清一点,我不太明白你的意思。 – user2328273

+0

@ user2328273:您正在使用'echo $ file'。 'echo $ file'不同于'echo“$ file”'。尝试添加引号,看看是否在“回显”出来时看到换行符或制表符而不是空格。 – icktoofay

1

为了防止在脚本中暴露数据库凭据,可以将它们存储在位于主目录中的本地.my.cnf文件中。 这项技术将允许您的脚本无需修改即可在任何服务器上运行。


路径:/home/youruser/.my.cnf 内容:

#!/bin/sh 
file=`mysql -e "select count(*) as count from files where strFilename='file.txt'" | cut -d \t -f 2` 
if [ $file == "1" ]; 
then 
    echo $file 
else 
    echo $file 
    echo "no" 
fi