2017-08-27 7 views
0

私は、変数が文字でないかどうかを調べる方法しか分かりません。変数が文字ではなく、整数でnより大きくないかどうかをwhileステートメントでチェックインする方法は?

これは動作します:

read o 
while [[ ! $o =~ -?[0-9]+ ]]; do 
    echo wrong 
    read o 
done 

しかし、私はそれがnよりも文字が、整数大きい(私は>ない>=を望ん)ない場合、while文にチェックしたいです。

これは私がこれまでにしようとしているものです:

read o 
while [[ ! $o =~ -?[0-9]+ ]] && [[ $o > "2" ]] ; do 
    echo wrong 
    read o 
done 

しないのはなぜこの作品?

何か応答は歓迎です!

+0

あなたの入力は何ですか? –

+0

@GillesGouaillardetそれは目標です: 'read o'はユーザー入力を読み込みます。 –

+0

「整数ではないか、2より小さいか等しい」であるべきですか? –

答えて

0

@ GillesGouaillardetと@Cyrusは、&&を使用しようとしていたという問題がありました。

その他の問題は二重引用符です。

Finalyこの作品:

read o 
while [[ ! $o =~ -?[0-9]+ ]] || [[ $o > 2 ]] ; do 
    echo wrong 
    read o 
done 

はすべてにありがとうございました。

+0

'10'でテストしましたか? –

+0

@thatotherguyはい、うまくいきます。 –

+0

よかった。しかし、ほとんどのシステムでは、8と9は拒否され、10は受け入れられます。 –

0

while read -r o; do 
    if [[ $o =~ -?[0-9]+ ]] && [[ $o -gt 3 ]]; then 
     break 
    fi 
    echo "Wrong" 
done 
echo "I like your o=$o" 

私は10を受け入れるようにしたいので、私は、-gtなく>を使用。

+0

はい@thatotherguyもこれに言及しました。しかし、私はそれについて何も言えません。なぜなら、私のためには、私が必要としていることです。私は、 '-gt'と'> 'がこのタスクのために異なるシステムで異なる結果を出すかどうか、あるいはどのようにして得られるかは分かりません。 –

+0

私の場合、 '>'は文字列 '' 3 ">" 11 ">" 1 "'と '11 -gt 3 -gt 1'を比較します。 –

+0

これは、 'fのように' set -f'を含むエイリアス経由で呼び出されるスクリプトに依存すると思います。 *。* 'になり、スクリプトの中で配列は' find'コマンドで埋められます。しかし、最終的に私は解決策を得ています。あなたの努力のためにありがとうございます。 –

0

Bashでは、(())構成を使用できます。算術式が必要です。

$ o=3 
$ ((o > 3)) && echo "Greater" || echo "Not greater or not a number"           
Not greater or not a number 
$ o=4     
$ ((o > 3)) && echo "Greater" || echo "Not greater or not a number"           
Greater      
$ o=abc    
$ ((o > 3)) && echo "Greater" || echo "Not greater or not a number"           
Not greater or not a number 

だからあなたのコードを修正するために、あなたは

read o 
while ! ((o > 3)); do 
    echo "wrong" 
    read o 
done 

を使用することができますしかし、私は実際に((())を使用するようにリライト)Walter A.'s approachを好む:算術式では、非整数はゼロと評価さ

while read o; do 
    ((o > 3)) && break 
    echo "wrong" 
done 
関連する問題