新手Bash脚本开发求助:选择判断逻辑执行报错问题
新手Bash脚本开发求助:选择判断逻辑执行报错问题
兄弟,你的脚本问题其实是几个新手常踩的典型坑,我帮你拆解下问题根源,再给你修正后的可用版本哈!
首先说说你脚本里的核心问题:
- Shebang格式错误:脚本第一行的
"!/bin/bash"应该是#!/bin/bash,少了开头的#,系统没法识别这是bash脚本,会按默认shell执行,很容易出问题。 - Read命令没存储用户输入:你只写了
read -p "...",但没把用户输入的内容存到变量里,后面的判断根本拿不到用户的选择! - If判断逻辑完全错误:你写的
if [ $first ];是在判断$first变量是否非空(而这个变量你已经赋值成chocolate了,所以这个条件永远为真),完全没和用户输入做对比;而且你的嵌套if结构混乱,三个if只写了一个fi,这就是报错line 28: syntax error: unexpected end of line的直接原因——脚本结束了还没写完所有的闭合语句。
给你修正后的完整脚本:
#!/bin/bash first=chocolate second=vanilla third=strawberry echo "Which would you choose?" read -p "chocolate, vanilla or strawberry? " choice if [ "$choice" = "$first" ]; then echo "Chocolate! good choice" elif [ "$choice" = "$second" ]; then echo "Vanilla! good choice" elif [ "$choice" = "$third" ]; then echo "Strawberry! good choice" else echo "Not a valid choice" fi
再给你解释下修正的关键点:
- 补全了Shebang的
#,确保系统用bash执行脚本 - 给
read命令加了choice变量,把用户输入的内容存起来,后面的判断都是基于这个变量 - 用
elif(else if的简写)做分支判断,结构更清晰,每个判断都是对比用户输入和预设的口味变量 - 给变量加上双引号
"$choice",避免用户输入空内容或者特殊字符时出现语法错误 - 每个条件分支都有对应的闭合语句,结构完整,不会再出现语法报错
备注:内容来源于stack exchange,提问作者Edward
相关产品推荐
相关产品推荐

