Whileループは、ユーザーが入力した整数を取得します。

Whileループは、ユーザーが入力した整数を取得します。

今週UNIXでプログラミングを始めましたが、宿題の1つが-99が入力されるまで正数を読み、負数(0〜-98)についてはエラーを表示するスクリプトを作成することでした。これが私が思いついたものですが、少し付いています。ありがとうございます:)

#!/bin/bash

COUNTER=1

echo "Enter a positive integer number (-99 to quit):"
read NUMBER

echo "$NUMBER: "
while [ $NUMBER -ge $COUNTER ]; do
    echo $COUNTER
    ((COUNTER++))
done

ベストアンサー1

#!/bin/bash

while true; do
    read -p 'Number (-99 to quit): '

    if ! [[ "$REPLY" =~ ^-?[0-9]+$ ]]; then echo 'Error: Not an integer' >&2
    elif (( REPLY == -99 ));           then break
    elif (( REPLY <= 0   ));           then echo 'Error: Need positive integers >0' >&2
    else
        printf 'Got "%d", that is number %d\n' "$REPLY" "$(( ++c ))"
    fi
done

これは、ユーザーが入力したときに終了する無限ループです-99。正の整数応答は、Got "some number"これまでに読み取られた有効桁数を表すコードを表示しますが、負の整数、ゼロ、または数値以外の入力は標準エラーに関する診断メッセージを提供します。他の変数名が指定されていない場合、コードで使用される変数はREPLY作成された変数です。read

正しい数値入力のテストは、応答を正規表現と一致させることによって行われます^-?[0-9]+$。この表現はマッチ応答が予想される形式の場合(オプションでダッシュの後に少なくとも1つの数字がオーム)、不一致がある場合は、標準エラーに関する診断メッセージが発行されます。

最初のものまではそれが整数であるかどうかはelifわかりません。$REPLYその後、(( ... ))比較のために算術評価を使用します。

テストは-99負のテストの前に実行する必要があります。それ以外の場合はループを終了できません。

おすすめ記事