입력된 숫자의 합과 그 중 가장 큰 숫자와 가장 작은 숫자를 표시해야 하는 스크립트를 작성해야 합니다. 배열을 사용하고 있습니다. 저는 이 문제를 일반적인 방법으로 해결했습니다. 그런데 배열을 사용하면 가장 큰 숫자인 합계를 얻지만 가장 작은 숫자를 얻을 수 있습니다. 최소 수에 대한 if 논리 때문에 이해합니다.
내 스크립트:
#!/bin/bash
sum=0
small=0
big=0
echo "Please enter the number"
while(( n != -99 ));
do
read -a n
arr=${#n[@]}
for((i=0;i<$arr;i++))do
if [ ${n[$i]} -eq -99 ]; then
break
elif [ ${n[$i]} -ne -99 ]; then
sum=$((sum + n[$i]))
if [ ${n[$i]} -gt $big ]; then
big=${n[i]}
elif [ ${n[$i]} -le $small ]; then
small=${n[i]}
fi
fi
done
done
echo "Sum: $sum"
echo "Highest: $big"
echo "Lowest: $small"
산출:
Please enter the number
12
13
14
-99
Sum: 39
Highest: 14
Lowest: 0
답변1
이것은 나에게 효과적이었고 이것이 당신이 달성하고 싶은 것이라고 믿습니다.
#! /bin/bash -
NUM_SUM=0
NUM_LARGE=0
echo "Please enter the numbers (-99 to exit):"
while [[ "$THIS_NUM" -ne '-99' ]]; do
read -a THIS_NUM
if [[ "$THIS_NUM" -ne '-99' ]]; then
THIS_ARRAY+=("$THIS_NUM")
fi
done
NUM_SMALL="${THIS_ARRAY[0]}"
for NUM in "${THIS_ARRAY[@]}"; do
NUM_SUM=$((${NUM_SUM}+${NUM}))
if [[ "$NUM" -gt "$NUM_LARGE" ]]; then
NUM_LARGE="$NUM"
elif [[ "$NUM" -lt "$NUM_SMALL" ]]; then
NUM_SMALL="$NUM"
fi
done
cat <<EOF
Summary: $NUM_SUM
High Num: $NUM_LARGE
Low Num: $NUM_SMALL
EOF
입력을 무시하는 스크립트가 있습니다 -99
. 루프를 종료하는 방법으로 이를 사용하고 있는 것 같나요? 입력 숫자를 기반으로 다음과 같은 결과가 나타납니다.
Please enter the numbers:
12
13
14
-99
Summary: 39
High Num: 14
Low Num: 12