整数入力制約

整数入力制約

次の入力制約を作成したいと思いますread

ターミナルシェル;

read x
read y
echo $(($x+$y))

私は制約になりたいですx。先に挿入したコマンドは何でしたか?x-100 <= x <= 100
read x

ベストアンサー1

$x文字列です。ユーザーは数字を入力する必要はありませんが、何でも入力できます。入力検証が進行中です。後ろに入力する。算術比較を行う前に整数であることを確認してください。例えば

read x
#validate if it is an integer
[[ "$x" =~ -?[0-9]+ ]] || echo error
#validate range (this is better done algebraically, not with string manipulation)
(( x >= -100 && x <= 100 )) || echo error
# carry on

ところでの算術評価式では、$(( ... ))変数拡張の代わりに変数名を使用できます。ただ書く$(( x + y ))


清教徒の解決策:

x=$(awk '/^-?[0-9]+\s*$/{ if ($1<=100 && $1>=-100){ print; exit; } } { exit 1; }') || echo error

この場合、awkシェルではなく入力を読み込みますが、それを実行してからread結果をフィルタリングすることもできます。echo errorループで式を使用するか(ユーザーに別の入力を再要求する)、代わりに直接使用できますexit 1

おすすめ記事