1

我正在尝试编写一个 bash 脚本来执行 mysql 查询,如果结果数为 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 的类型有关。有任何想法吗?

4

3 回答 3

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
于 2016-04-28T09:29:02.453 回答
0

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

于 2013-06-20T02:34:24.670 回答
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

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

于 2013-06-20T02:55:47.460 回答