Shell脚本条件判断异常:无论输入均返回相同结果的问题咨询
这是个很常见的Shell脚本小坑!你的问题出在test命令里的等号两边没有加空格,Shell对空格的要求特别严格,咱们一步步来理清楚:
问题根源
在Shell的test命令(或者等价的[ ]语法)中,=是一个比较运算符,它的两边必须有空格。你写的"$name"=akash会被Shell当成一个完整的字符串——不管$name是什么值,这个字符串都是非空的,而test对非空字符串的判断结果是true,所以不管你输入什么,都会执行then分支的内容。
修正后的脚本
把等号两边加上空格就可以解决问题了,另外为了脚本可读性,建议把每行命令分开写(你原来的脚本挤在一行,虽然语法允许,但可读性很差):
#!/bin/sh read name if test "$name" = "akash" then echo "Hello how are you" else echo "sorry" fi
额外优化建议
- 你也可以用更常用的
[ ]语法替代test,效果完全一致:
#!/bin/sh read name if [ "$name" = "akash" ] then echo "Hello how are you" else echo "sorry" fi
- 如果你的Shell支持(比如bash),还可以用
[[ ]],它的语法更宽松,还能避免一些引号相关的问题:
#!/bin/bash read name if [[ $name == akash ]] then echo "Hello how are you" else echo "sorry" fi
这样修改后,输入akash会输出问候语,输入其他内容就会触发else分支的sorry了。
内容的提问来源于stack exchange,提问作者Akash Agarwal
相关产品推荐
相关产品推荐

