Bash脚本年龄判断逻辑异常求助
Bash脚本年龄判断逻辑异常求助
嘿,我来帮你揪出这个脚本里的问题~你遇到的情况其实是两个小错误导致的,咱们一个个说清楚:
1. Shebang 路径写错了
你脚本第一行写的是 #!bin/bash,这里少了最前面的斜杠 /,正确的写法应该是:
#!/bin/bash
少了这个斜杠的话,系统没办法正确定位到bash解释器的位置,虽然这次的核心问题不是它,但还是得修正才能保证脚本正常执行。
2. 核心判断逻辑搞反了
这才是导致不管输入啥都输出“You are old”的关键!你看你的if条件:
if [ $myage -ge 30 ];
这里你是在判断自己定义的myage(值是30)是否大于等于30,这肯定永远是true啊!不管用户输入的age是多少,这个条件都成立,所以永远只会执行then分支,完全没机会走到else里。
正确的逻辑应该是拿用户输入的age和30做比较,比如改成:
if [ $age -ge 30 ];
或者用你定义的myage变量(这样以后要修改年龄阈值会更方便):
if [ $age -ge $myage ];
修正后的完整脚本
#!/bin/bash myage=30 echo "Please enter your age" read age if [ $age -ge $myage ]; then echo "You are old" else echo "You are young" fi
额外小建议
为了让脚本更健壮,你可以加个输入验证,防止用户输入非数字的内容,比如:
#!/bin/bash myage=30 echo "Please enter your age" read age # 先判断输入是不是有效数字 if ! [[ $age =~ ^[0-9]+$ ]]; then echo "请输入有效的数字哦!" exit 1 fi if [ $age -ge $myage ]; then echo "You are old" else echo "You are young" fi
这样用户输入字母或者乱七八糟的内容时,脚本会友好提示错误,而不是直接抛出奇怪的报错啦~
备注:内容来源于stack exchange,提问作者Edward
相关产品推荐
相关产品推荐

