最近再写一个自动化运维脚本,写道MYSQL主从时发现一个现象,当在嵌套函数中写

[shell]

mysql -u root -p

[/shell]

这个命令时后,奇怪的事情发现啦:

看到没,死循环了,一直卡在这一段重复执行,要求输入mysql密码:

然后我把shell 脚本去掉:

[shell]
mysql(){
mysql_zc(){
echo "设置mysql主从备份,请先检查您的root@localhost账号密码可以登录您的mysql!"
read -p "请输入您的数据库root@localhost账号密码(如您使用此脚本部署的mysql,密码将会存在本目录下的readmd.txt文件夹) " $mysqlpasswd
#mysql -u root -p$mysqlpasswd
echo $mysqlpasswd
}
mysql_zc
}
mysql
[/shell]

注意,这里注释了 #mysql -u root -p$mysqlpasswd 这一句
然后执行这个函数

死循环又没有啦,去掉 mysql -u root -p$mysqlpasswd 这一句就没有了死循环????????????????
那是不是这个mysql -u root -p$mysqlpasswd 这一句在shell 里面有问题呢?
答案是NO,显然不是,我们把嵌套函数去掉,单独把这个函数放在主函数直接执行。

[shell]
mysql_zc(){
echo "设置mysql主从备份,请先检查您的root@localhost账号密码可以登录您的mysql!"
read -p "请输入您的数据库root@localhost账号密码(如您使用此脚本部署的mysql,密码将会存在本目录下的readmd.txt文件夹) " $mysqlpasswd
mysql -u root -p$mysqlpasswd
echo $mysqlpasswd
}
mysql_zc
[/shell]


又不会死循环了,请求大神帮助。

 

 

 

解决方案

这是一个逻辑思维的思路盲点:

一个正常的高级语言程序员绝对无法理解,就这么两三行代码,没有一个for,while,if,switch 循环为啥会陷入死循环的境地

但是他就是陷入了死循环

这个问题百度找不到,谷歌搜索不到
这是个((((((逻辑思维的思路的盲点))))))))
计算机科学家=(N个码农)N次方

答案:

这里的mysql被重新定义了,这里一不小心把自己写的函数给定义成了mysql这个函数,于是,死循环就开始了,所以,不要加班,不要犯错,不要苦干,mysql一直调用mysql,调用,调用,调用,死循环卡死了,问题解决,再见。

发表评论

邮箱地址不会被公开。 必填项已用*标注