SHELL 脚本的嵌套函数死循环问题!
最近再写一个自动化运维脚本,写道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,调用,调用,调用,死循环卡死了,问题解决,再见。