bash检查mysql连接

Erw*_*wan 8 mysql linux bash

我正在写一个bash脚本来对我的debian squeeze Server上的数据库做一些操作.

我注意到如果我为root输入了一个错误的密码,提示将被关闭,我不会被要求再试一次......这不是很方便!

所以我试图创建一个循环,尝试连接到MYSQL并保存密码,以便以后成功.

我试过这个,但它不起作用.相反,我收到此错误:

ERROR 1045(28000):用户'root'@'localhost'拒绝访问(使用密码:YES)

read -s -p "Enter MYSQL root password: " mysqlRootPassword

while [[ -n `mysql -u root -p$mysqlRootPassword` ]]; do
       read -p "Can't connect, please retry: " mysqlRootPassword
done
Run Code Online (Sandbox Code Playgroud)

我在bash脚本方面不是很有经验,任何帮助都会很棒!

she*_*ter 16

我不认为你需要[[ -n backtic ... ]];像这样嵌套的测试.尝试:

read -s -p "Enter MYSQL root password: " mysqlRootPassword

while ! mysql -u root -p$mysqlRootPassword  -e ";" ; do
       read -s -p "Can't connect, please retry: " mysqlRootPassword
done
Run Code Online (Sandbox Code Playgroud)

while评估任何命令组直到结束; do并检查执行的最后一个命令的返回代码,以确定是否应该执行循环.因为您正在寻找失败,您必须在测试之前使用逻辑NOT(!)或者您可以使用语法等效,即

until mysql -u root -p$mysqlRootPassword  -e ";" ; do
       read -s -p "Can't connect, please retry: " mysqlRootPassword
done
Run Code Online (Sandbox Code Playgroud)

您可以将其视为'直到mysql正常工作,继续尝试获取正确的密码'.

不幸的是,我无法访问mysql安装,所以这是未经测试的.

我希望这有帮助.

  • 效果很好.我在读入时添加了-s选项,以避免密码被回显. (2认同)