You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 06:42:42