今週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
負のテストの前に実行する必要があります。それ以外の場合はループを終了できません。