UNIX 스크립팅 문제


2

입력 한 숫자와 그 중에서 가장 크고 작은 숫자의 합계를 표시 해야하는 스크립트를 작성해야합니다. 배열을 사용하고 있습니다. 나는 정상적인 방법으로 이것을 해결했다. 그러나 배열을 사용할 때 합계, 가장 큰 숫자를 얻지 만 가장 낮은 숫자를 얻을 수 있습니다. 가장 작은 숫자에 대한 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

$일부 i변수 앞에 a가 없습니다 . 변수가 필요하지 않다고 생각하더라도 항상 변수를 인용하는 습관을들이십시오.
Jesse_b

@ jimmij 덕분에 ... 더 높은 값으로 시도했지만. 처음에 작은 변수에 저장했던 것과 동일한 값을 얻었습니다. 예를 들어 small = 100을 초기화하면 수백 미만을 삽입 한 결과에 상관없이 가장 낮은 출력 100을
Transhumanist

답변:


0

이것은 나를 위해 일하고 있으며 그것이 당신이 성취하려고하는 것이라고 믿습니다.

#! /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

네 -99 센티넬 값은 루프를 종료합니다 ... 감사합니다. 내가 실수를 저지른 곳을 찾았습니다 ... 100 %를 작동합니다. !!!
Transhumanist
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.