Linux Bash脚本for循环搭配if条件的错误排查
问题原因与修复方案
你的脚本之所以会输出1到99的全部数字,核心有两个错误:
- 变量未正确引用:你写的
i%2里的i没有加$前缀,Bash会把它当成纯字符串"i%2",而不是变量$i的实际值。 - 算术比较的语法错误:
[(也就是test命令)不支持直接解析算术表达式,你写的i%2 != 0本质是在做字符串比较——"i%2"和"0"显然不相等,所以if条件永远为真,所有数字都会被输出。
修复后的脚本写法(两种可选)
写法一:用(( ))做算术判断(推荐,语法更简洁)
#!/bin/bash for i in {1..99} do if (( i % 2 != 0 )); then echo $i fi done
写法二:用$(( ))展开算术结果后做比较
#!/bin/bash for i in {1..99} do if [ $((i % 2)) -ne 0 ]; then echo $i fi done
另外,你还可以直接简化循环逻辑,不需要额外的if判断:
#!/bin/bash for i in {1..99..2} do echo $i done
这里{1..99..2}表示从1到99,步长设为2,直接生成所有奇数,代码更简洁高效。
内容的提问来源于stack exchange,提问作者Mohd Shariq
相关产品推荐
相关产品推荐

