シェルプログラムで、数値比較をする際について教えてください。


下記のコードを、2.0と10.0で実行したところ、下記のように2.0の方が大きいという結果になってしまいました。
このような処理をするときに何か制約があるのでしょうか?

$ ./test.sh
Enter two values, space seperated
2.0 10.0
2.0 is larger than 10.0

=====================プログラム=======================



#!/bin/bash
# expr prints "1" on success, "0" on failure

echo "Enter two values, space seperated"
read val1 val2

result=`expr $val1 \> $val2`
if [ "$result" -eq "1" ]; then
echo "$val1 is larger than $val2"
exit 0
fi
result=`expr $val2 \> $val1`
if [ "$result" -eq "1" ]; then
echo "$val2 is larger than $val1"
exit 0
fi

echo "the values are equal"
exit 0

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2010/10/04 20:00:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:karuishi No.1

回答回数767ベストアンサー獲得回数128

ポイント35pt

普通に不等号で比較すると文字列の比較になってしまいます。

 

>if文やwhile文の条件で、変数等を数値として評価して比較を行いたい場合は、以下のように記述します。

>数値評価演算子    意味

>数値1 -eq 数値2  数値1と数値2が等しい場合に真

>数値1 -ne 数値2  数値1と数値2が等しくない場合に真

>数値1 -gt 数値2  数値1が数値2より大きい場合に真

>数値1 -lt 数値2  数値1が数値2より小さい場合に真

>数値1 -ge 数値2  数値1が数値2より大きいか等しい場合に真

>数値1 -le 数値2  数値1が数値2より小さいか等しい場合に真

 

 http://www.geocities.jp/geo_sunisland/if_and_test.html

id:deflation No.2

回答回数1036ベストアンサー獲得回数126

ポイント35pt

exprコマンドは整数演算しかできません。

小数を比較したいのであれば、bcコマンドを使ってください。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません