人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

下記のコードを、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

●質問者: uraxurax
●カテゴリ:コンピュータ
✍キーワード:2.0 bash echo EQ EQUAL
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ニャンざぶろう
●35ポイント

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

>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


2 ● deflation
●35ポイント

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ