Problema de script do UNIX

3

Eu tenho que escrever um script onde eu preciso mostrar a soma dos números inseridos e o maior & menor número entre eles. Eu estou usando matriz. Eu resolvi isso com o caminho normal. mas quando eu estou usando matriz eu estou recebendo soma, maior número, mas pode obter o menor número.Eu entendo é por causa da minha lógica se for menor número.

meu script:

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

saída:

Please enter the number
12
13
14
-99
Sum: 39
Highest: 14
Lowest:  0
    
por Transhumanist 12.10.2017 / 13:34

1 resposta

0

Isso está funcionando para mim e acredito que é o que você está tentando realizar:

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

Eu tenho este script ignorando a entrada -99 , que eu estou supondo que você está usando apenas como uma maneira de sair do loop? Com seus números de entrada, recebo a seguinte saída:

Please enter the numbers:
12
13
14
-99
Summary:    39
High Num:   14
Low Num:    12
    
por 12.10.2017 / 15:56

Tags