为什么我收到“需要整数表达式”?

为什么我收到“需要整数表达式”?

我正在尝试创建一个随后调用的小函数。

为了简单起见,我只想验证 12 能被 2,3 和 4 整除

代码是:

divisible_by () {
  under_test=12
  from=2
  to=4
  divisible=0
  for ((check=from; check<=to; check++)) {
    echo "check= $check"
    if [ $under_test % $check -ne 0 ]; then
      divisible=1
    fi  
  }
  return $divisible
}

x=divisible_by
if [ $x -eq 0 ]; then
  echo "true"
else
  echo "false"
fi

目前我得到

./5_divisible_by_1_to_10.sh: line 16: [: 
divisible_by: integer expression expected
false

我也发现很难将数字作为参数传递,但也许这是相关的。

答案1

divisible_by () {
  under_test=12
  from=2
  to=4
  for ((check=from; check<=to; check++)) {
    echo "check=$check"
    ((under_test % check == 0)) || return
  }
  true
}

if divisible_by; then
  echo true
else
  echo false
fi

答案2

x=divisible_by不会调用该divisible_by函数。你可以做的是

divisible_by
x=$?

(但在这种情况下这是一个不好的方法set -e),或者

divisible_by () {
[...]
echo $divisible
}

x=$(divisible_by)
[...]

答案3

你应该改变这一行:

  if [ $under_test % $check -ne 0 ]; then

进入

  if [ "$(($under_test % $check))" -ne 0 ]; then

如果没有的话,测试 ( [) 就会给出太多的参数。

我所做的就是运行程序:

under_test=12
from=2
to=4
divisible=0
for ((check=from; check<=to; check++)) {
  echo "check= $check"
  if [ $under_test % $check -ne 0 ]; then
    divisible=1
  fi  
}

并首先使其正常工作。

另一个问题是从函数返回值:

divisible_by () {
  under_test=12
  from=2
  to=4
  divisible=0
  for ((check=from; check<=to; check++)) {
    echo "check= $check"
    if [ "$(($under_test % $check))" -ne 0 ]; then
      divisible=1
    fi  
  }
  mydivisible=$divisible
}

divisible_by
x=$mydivisible
if [ "$x" -eq 0 ]; then
  echo "true"
else
  echo "false"
fi

因为 return 不返回函数值。

运行给出输出:

check= 2
check= 3
check= 4
true

相关内容