Bash脚本实现非空数据库名称循环输入的方案咨询
解决Bash脚本循环询问数据库名称的问题
嘿,我明白你的需求啦——你想要脚本一直提示用户输入数据库名称,直到用户给出非空的有效输入对吧?你现在的代码只做了一次检查,所以如果用户输入空值,脚本只会报错但不会重新询问,这就是问题所在。
我们可以用while循环来实现这个“重复询问直到输入有效”的逻辑,下面是修改后的完整脚本:
# 循环询问直到输入非空 while true; do echo "Enter DB name" read dbname db_name="$dbname" # 给变量加双引号,避免输入含空格时出现语法问题 if [ -z "$db_name" ]; then echo "DB Name can't be empty. Please try again." else # 执行数据库创建操作,注意密码变量也要加引号 mysql -u root -p"$mroot_pass" -e "CREATE DATABASE IF NOT EXISTS $db_name;" echo "DB Name set to $db_name" # 输入有效,退出循环 break fi done
关键修改点说明:
- 用
while true创建无限循环,直到遇到break才退出流程 - 把输入提示和读取操作放进循环内,确保输入为空时会重新触发询问
- 变量引用时加上双引号(比如
"$db_name"和"$mroot_pass"):这是Bash脚本的最佳实践,能避免输入包含空格或特殊字符时出现语法错误 - 当输入有效时,执行完数据库创建操作后用
break跳出循环,结束这部分逻辑
另外还有个小优化:你可以把echo和read合并成一行,让代码更简洁:
read -p "Enter DB name: " db_name
修改后的精简版循环如下:
while true; do read -p "Enter DB name: " db_name if [ -z "$db_name" ]; then echo "DB Name can't be empty. Please try again." else mysql -u root -p"$mroot_pass" -e "CREATE DATABASE IF NOT EXISTS $db_name;" echo "DB Name set to $db_name" break fi done
这样脚本就能完美实现你想要的功能啦!
内容的提问来源于stack exchange,提问作者Gil Bennun
相关产品推荐
相关产品推荐

