Bash脚本中MySQL命令无结果输出,仅返回用法信息求助
问题原因与解决方案
你的问题出在MySQL客户端的-p参数使用格式上,这是个很容易踩的小坑!
当你用-p $dbpass的时候,MySQL会把-p后面的空格当成“需要交互式输入密码”的信号,而把$dbpass这个字符串当作要连接的数据库名称来处理。这时候你后面又加了$dbname作为参数,MySQL就会因为收到了多余的无法识别的参数,直接输出用法提示,根本不会执行你的SELECT语句。
修正方案有两种:
把
-p和密码直接连写,不要加空格:
修正后的脚本命令行如下:mysql -h $dbhost -u $dbuser -p$dbpass -H -e "SELECT NOW();" $dbname > /home/imperial/.scripts/test.txt注意这里是
-p$dbpass,-p和密码之间没有空格,这样MySQL才会把紧跟在-p后面的内容识别为密码。使用更清晰的
--password参数(推荐):
用完整参数名的方式可读性更强,不容易出错:mysql -h $dbhost -u $dbuser --password=$dbpass -H -e "SELECT NOW();" $dbname > /home/imperial/.scripts/test.txt
额外的安全建议:
脚本里明文写数据库密码是很不安全的做法,建议你把凭证存在~/.my.cnf配置文件里,权限设为600避免其他人读取:
[client] host=localhost user=user password=pass database=unicentaopos
然后你的脚本可以简化成:
#!/bin/bash mysql -H -e "SELECT NOW();" > /home/imperial/.scripts/test.txt
这样既避免了参数格式错误,又提升了安全性。
内容的提问来源于stack exchange,提问作者Ryan Gillies
相关产品推荐
相关产品推荐

