Bash脚本if条件正确写法及异常排查:奇偶计数仅走else分支
Bash if条件写法问题及脚本修复
你的脚本问题出在if条件的语法上:[[$(($i%2)) -eq 0]]里的[[和后面的表达式之间没有空格,Bash会把[[$(($i%2))当成一个整体命令去解析,导致条件永远不成立,所以每次都走else分支。
修正后的脚本
#!/bin/bash echo "Ingrese un numero" read n impar=0 par=0 for ((i=1; i<=$n ; i++)); do if [[ $(($i%2)) -eq 0 ]]; then ((par++)) else ((impar++)) fi done echo "Pares: $par" echo "Impares: $impar"
关键语法说明
Bash中[[ ]]是条件测试的扩展写法,必须注意:
[[后面必须跟空格,]]前面也必须跟空格- 表达式中的运算符(比如
-eq)前后也需要空格
Bash if条件的常见正确写法
1. 使用[[ ]](推荐,支持更多扩展特性)
if [[ $var -gt 10 ]]; then # 执行逻辑 fi
2. 使用[ ](POSIX兼容写法)
if [ $var -gt 10 ]; then # 执行逻辑 fi
注意[是test命令的别名,同样需要前后空格,变量最好用双引号包裹避免空值问题:if [ "$var" -gt 10 ]; then
3. 直接用算术表达式判断(适合数值比较)
针对你的奇偶判断场景,也可以简化成更简洁的算术表达式写法:
if (( i%2 == 0 )); then ((par++)) else ((impar++)) fi
这种写法不需要额外的$(( )),括号内直接写算术比较逻辑。
内容的提问来源于stack exchange,提问作者Javi
相关产品推荐
相关产品推荐

