センチナル値-1シェルスクリプト

センチナル値-1シェルスクリプト
#!/bin/bash

set -x

count=0
number=0
loops=0
average=0

read -p " Please enter a number between 1 and 100? " number

while [ $count -lt $number ]
done

average=`expr $score / $number`

echo $average

ユーザーに1から100までの数字を入力するように要求し、トークン値-1を入力してループを終了するシェルプログラムを作成します。プログラムは、すべてのループ反復回数、合計回数、およびプログラム終了後の平均回数を維持する必要があります。

ステートメントを使用する必要があるようですが、ifどうすればよいかわかりません。

ベストアンサー1

これを行うより効率的な方法があるかもしれませんが、次のスクリプトはそのタスクを実行する必要があります。

#!/bin/bash

loops=0
sum=0

# Loop forever
while true; do
    read -p "Please enter a number between 1 and 100: " input

    # Check for the exit condition.
    if [[ $input -eq -1 ]]; then
        break
    fi

    # Use a regex to check that input is a one-digit, two-digit or three-digit number and that the input is in [1,100] .
    if [[ $input =~ ^[0-9]{1,3}$ && $input -gt 0 && $input -le 100 ]]; then
        # Use arithmetic expansion to increment loop counter and add the new input to sum.
        ((loops++))
        ((sum += input))
    else
        echo "Invalid input. Skipping..."
    fi

done

# For the edge case where there is no valid input.
if [[ $loops -eq 0 ]]; then
    echo "Average undefined - no valid input."
    exit
fi

average=$((sum/loops))

echo "Average: $average"

実行例:

Please enter a number between 1 and 100: 2
Please enter a number between 1 and 100: 3
Please enter a number between 1 and 100: 4
Please enter a number between 1 and 100: 5
Please enter a number between 1 and 100: 6
Please enter a number between 1 and 100: -1
Average: 4

おすすめ記事