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

Bash脚本中expr模运算失效报'integer expression expected'问题

Bash中expr模运算未正常执行的原因及解决方法

原脚本

#!/bin/bash
echo "Enter a number"
read num
i=2
res=true
while [ $i -le $num ]
do
       if [ `expr $num%$i` -eq 0 ]
       then
               res=false
       fi
       i=`expr $i + 1`
done

echo "$res"

运行错误输出

Enter a number
6
./4.sh: line 8: [: 6%2: integer expression expected
./4.sh: line 8: [: 6%3: integer expression expected
./4.sh: line 8: [: 6%4: integer expression expected
./4.sh: line 8: [: 6%5: integer expression expected
./4.sh: line 8: [: 6%6: integer expression expected
true

问题原因

expr命令的运算符(包括模运算符%)必须和左右操作数之间保留空格。你写的expr $num%$i里,%和$num、$i之间没有空格,expr会把$num%$i整体当成一个普通字符串返回,而不是执行模运算。这就导致[命令拿到的是6%2这类字符串,无法识别为整数,因此报错“integer expression expected”。

修正后的脚本

把模运算的表达式改成expr $num % $i,同时优化循环范围(判断质数只需循环到数字的平方根即可,提升效率):

#!/bin/bash
echo "Enter a number"
read num
if [ $num -le 1 ]; then
    echo "false"
    exit
fi
i=2
res=true
# 循环到平方根即可
while [ $((i*i)) -le $num ]
do
       if [ `expr $num % $i` -eq 0 ]
       then
               res=false
               break  # 找到因数后直接跳出循环
       fi
       i=`expr $i + 1`
done

echo "$res"

内容的提问来源于stack exchange,提问作者Mohit Naik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:25:16