このスレッドは解決済です(未解決に戻す場合はこちら)
<<戻る

数値の比較 このメッセージに返信する
日時: 2010/06/08 03:43
名前:
URL:
こんばんは


bashで数値の比較をしているのですが、
( . )ドットが含まれる数値比較がされません。

ドットが含まれる数値を
正しく判定させるにはどうすればよろしいのでしょうか
ご教授、お願いします。

#成功時
if [ 1 -eq 1 ]; then
echo -e "同じです"
else
echo -n ""
fi

#
if [ 2 -gt 1 ]; then
echo -e "2が大きいです"
else
echo -n ""
fi

#エラー時
if [ 1.7.3 -eq 1.7.3 ]; then
echo -e "同じです"
else
echo -n ""
fi

#
if [ 1.7.4 -gt 1.7.3 ]; then
echo -e "1.7.4が大きいです"
else
echo -n ""
fi


#エラー内容
/usr/local/sbin/test: line xxxx: [: 1.7.3: integer expression expected
記事編集 編集
Re: 数値の比較 このメッセージに返信する
日時: 2010/06/08 06:28
名前: stranger
URL: http://ja.528p.com/
例1 bash は整数比較しかできないので、awkをからめる

#!/bin/bash

old=1.7.3
new=1.7.4

awk 'BEGIN{if ('$old'<'$new') exit 1}'
if [ $? -eq 1 ]
then
echo "$new が大きいです"
else
echo -n ""
fi
1.7.4 が大きいです と出力されます


例1 .(ピリオド 日本ではドットとも言う)で区切って比較します

#!/bin/bash

old=1.7.3
new=1.7.4

o1=`echo $old | cut -f1 -d'.'`
n1=`echo $new | cut -f1 -d'.'`
o2=`echo $old | cut -f2 -d'.'`
n2=`echo $new | cut -f2 -d'.'`
o3=`echo $old | cut -f3 -d'.'`
n3=`echo $new | cut -f3 -d'.'`
if [ $n1 -gt $o1 ]; then
echo "$new が大きいです"
elif [ $n2 -gt $o2 ]; then
echo "$new が大きいです"
elif [ $n3 -gt $o3 ]; then
echo "$new が大きいです"
else
echo -n ""
fi

または

#!/bin/bash

old=1.7.3
new=1.7.4

for i in 1 2 3; do
num1=`echo $old | cut -f$i -d'.'`
num2=`echo $new | cut -f$i -d'.'`
if [ $num1 -gt $num2 ]; then
echo -n ">"
elif [ $num1 -lt $num2 ]; then
echo -n "<"
else
echo -n "="
fi
done
echo

==<と出力されます

もっと良い方法が有るでしょうから
net検索して 最良の方法を捜してください
記事編集 編集
Re: 数値の比較 このメッセージに返信する
日時: 2010/06/08 18:34
名前:
URL:
ご教授頂いた内容で実施しましたら出来ました。
ありがとうございます。

>例1 bash は整数比較しかできないので、awkをからめる
そうなのですか
なるほど。



応用で以下のようにしてみました。

old=1.7.3
new=1.7.4

o1=`echo $old | cut -f1 -d'.'`
n1=`echo $new | cut -f1 -d'.'`
o2=`echo $old | cut -f2 -d'.'`
n2=`echo $new | cut -f2 -d'.'`
o3=`echo $old | cut -f3 -d'.'`
n3=`echo $new | cut -f3 -d'.'`

#################################################
#メジャー番号の比較
#################################################
#1列目がoldより大きい場合
if [ $n1 -gt $o1 ]; then
echo -e "最新版が公開されています。"
echo -e "$old ==> $new"

#1列目がnewより低い場合
elif [ $n1 -lt $o1 ]; then
echo -e "現在のバージョンより低いバージョンが使用されています。"
echo -e "$old <== $new"

#################################################
#マイナー番号の比較1"
#################################################
#2列目がoldより大きい場合
elif [ $n2 -gt $o2 ]; then
echo -e "最新版が公開されています。"
echo -e "$old ==> $new"

#2列目がnewより低い場合
elif [ $n2 -lt $o2 ]; then
echo -e "現在のバージョンより低いバージョンが使用されています。"
echo -e "$old <== $new"

#################################################
#マイナー番号の比較2
#################################################
#3列目がoldより大きい場合
elif [ $n3 -gt $o3 ]; then
echo -e "最新版が公開されています。"
echo -e "$old ==> $new"

#3列目がnewより低い場合
elif [ $n3 -lt $o3 ]; then
echo -e "現在のバージョンより低いバージョンが使用されています。"
echo -e "$old <== $new"

#3列目がnewより低い場合
elif [ $n3 -eq $o3 ]; then
echo -e "現在のバージョンは最新です。"
echo -e "$old == $new"

else
echo -n ""
fi
記事編集 編集
Re: 数値の比較 このメッセージに返信する
日時: 2010/06/08 21:34
名前: stranger
URL: http://ja.528p.com/
目的はbashの学習ですか

Version管理?
文字を含むものもありますよね

awkの構文は 少数点の比較に使えます
1.999999<2 のように
記事編集 編集
Re: 数値の比較 このメッセージに返信する
日時: 2010/06/09 02:30
名前:
URL:
>目的はbashの学習ですか
>
>Version管理?
>文字を含むものもありますよね
>

bashでバージョンを管理する学習をしています。

>awkの構文は 少数点の比較に使えます
>1.999999<2 のように
>

なるほど
記事編集 編集
件名※必須
名前※必須
URL
任意のパスワード (投稿後のコメント修正・削除時に使用)
画像認証※必須 投稿キー(画像で表示されている数字を入力)
コメント※必須

※質問を投稿後に自己解決された場合は、原因と行った対処を具体的に書き込み下さるよう、よろしくお願いします。

- WEB PATIO -