"정수 표현이 필요합니다"라는 메시지가 나타나는 이유는 무엇입니까?

"정수 표현이 필요합니다"라는 메시지가 나타나는 이유는 무엇입니까?

이후에 호출되는 작은 함수를 만들려고 합니다.

간단하게 하기 위해 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_bydivisible_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

그렇지 않으면 test( [)가 너무 많은 인수를 제공하게 됩니다.

내가 한 일은 프로그램을 실행하는 것뿐이었습니다.

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

관련 정보