次の入力制約を作成したいと思います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
。