带有mysql查询的bash中的条件语句

时间:2013-06-20 02:22:29

标签: mysql bash variables

我试图编写一个将执行mysql查询的bash脚本,如果结果数为1,则执行某些操作。我不能让它工作。

#!/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

我不知道为什么,但我认为它可能与变量$ file的类型有关。任何想法?

3 个答案:

答案 0 :(得分:1)

要防止在脚本中公开数据库凭据,可以将它们存储在主目录中的本地.my.cnf文件中。 此技术将允许您的脚本无需修改即可在任何服务器上运行。

路径:/home/youruser/.my.cnf 含量:

[client]
user="root"
password="root"
host="localhost"

[mysql]
database="MyTable" 

因此,Renato代码可以通过以下方式重写:

#!/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

答案 1 :(得分:0)

我猜这实际上不是count(*) 1而是count(*)\n1或其他东西。 echo $file会将IFS中的所有字符转换为空格,但==会区分这些空格字符。如果是这种情况,echo "$file"会给您不同的结果。 (注意引号。)

答案 2 :(得分: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

我给count字段一个更好的名字,使用'cut'将mysql输出分成两个字段,并将第二个字段的内容放入$ file。然后你可以测试$ file为“1”。希望它可以帮助你..