지금 스크립트를 제출하는 데 문제가 있습니다. 현재 진행 중인 상황을 왜 받아들이지 않는지 아시는 분이 계시는지 궁금합니다. 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
.