숫자를 추가하는 스크립트에 문제가 있습니다.

숫자를 추가하는 스크립트에 문제가 있습니다.

지금 스크립트를 제출하는 데 문제가 있습니다. 현재 진행 중인 상황을 왜 받아들이지 않는지 아시는 분이 계시는지 궁금합니다. 6, 9, -4, 7을 함께 추가하려고 하는데 내 스크립트가 이를 수행하고 있습니다. 어쩌면 그것을 개선할 수 있는 방법이 있을까요? 어떤 아이디어라도 큰 도움이 될 것입니다.

#!/bin/bash

sum=0

for number in $1 $2 $3 $4
do
        sum=$(($1 + $2 + $3 + $4))
        echo $number

done

echo $sum

답변1

숫자 4개만 추가하려면 다음과 같이 하면 충분합니다.

sum() {
  printf '%d\n' "$(( $1 + $2 + $3 + $4 ))"
}

또는 원하는 수의 숫자를 추가하려는 경우:

sum() {
  local number sum

  for number; do
    (( sum += number ))
  done

  printf '%d\n' "$sum"
}

답변2

쉘이 당신을 위해 일하도록 하세요. 그리고 필요할 때 외부 유틸리티를 사용하세요.

#!/bin/bash
IFS=+
echo "$*" | bc

답변3

명령줄에 항상 4개의 정수가 표시된다는 점을 알고 있다면 반복할 필요가 없습니다.

#!/bin/sh

sum=$(( $1 + $2 + $3 + $4 ))
printf 'sum is %d\n' "$sum"

아니면 그냥

#!/bin/sh

printf 'sum is %d\n' "$(( $1 + $2 + $3 + $4 ))"

다양한 매개변수를 지원하려면~ 할 것이다반복해야 할 사항:

#!/bin/sh

while [ "$#" -gt 0 ]; do
    sum=$(( sum + $1 ))
    shift
done

printf 'sum is %d\n' "$sum"

스크립트는 명령줄 인수를 반복하여 첫 번째 인수를 sum변수에 추가하고 인수가 더 이상 남지 않을 때까지 명령줄 인수 목록에서 제거합니다. 변수 $#확장은 명령줄 인수 수만큼 확장되며 shift목록에서 제거되고 해당 위치(다른 위치 중에서)로 이동됩니다.$1$2$3$2

또는:

#!/bin/sh

for num do
    sum=$(( sum + num ))
done

printf 'sum is %d\n' "$sum"

명령줄 인수 목록을 계속해서 이동하고 목록을 변경하지 않고 그대로 두는 대신 반복하여 각 인수를 차례로 추가합니다 sum.

루프 for num do헤더는 다음과 같이 작성할 수도 있습니다 for num in "$@"; do.

관련 정보