我试图编写一个将执行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的类型有关。任何想法?
答案 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”。希望它可以帮助你..