2016-09-07 4 views
0

2つの英数字の文字列を比較したいと思います。しかし、私は空白の結果を得ています。お知らせ下さい。シェルスクリプト内の特別な式と2つの英数字変数を比較

:~$ echo $tempnow $threshold 
+60.0°C +80.0°C 

:~$ res=`echo "$tempnow $threshold" | awk '{ if($1 > $2) print "Exceeds"; else echo "Normal" }'` 
:~$ echo $res 

:~$ 
+0

私は 'TRを挿入することをお勧め - awkの前にd '+°C' | ' – Cyrus

答えて

1

awkにはechoはありません。

を使用でき

echo '+90.0°C +80.0°C' | awk '{ print ($1+0 > $2+0 ? "Exceeds" : "Normal") }' 
Exceeds 

echo '+60.0°C +80.0°C' | awk '{ print ($1+0 > $2+0 ? "Exceeds" : "Normal") }' 
Normal 

はまた、数値にフィールドを変換する+0の使用を注意してください。

+0

ああ...それを逃した。どうもありがとう。まだ下のコードが文法エラー「else」に失敗する理由を理解できません。 '' $ res "-eq" Exceeds " then echo"温度がしきい値を超えています。システム所有者へのメールをトリガしています... " mails"システムのCPUの温度が高すぎます "[email protected] elif ["$ res" -eq "Normal"] echo "温度が下限です。対策を無視してください!" else echo "値を特定できません" fi –

+0

「-eq」は数値を比較するためのものです。 [[$ res == "Exceeds"]] '条件を使用してください。 – anubhava

1

awkスクリプトにprintの代わりにechoと書いてあります。

これは存在しない関数または変数の名前として解釈され、空の文字列に変換され、文字列 "Normal"と連結されます。結果は破棄されます。

次のように私はあなたのスクリプトを書い推薦:

res=$(awk '{ print ($1 > $2 ? "Exceeds" : "Normal") }' <<<"$tempnow $threshold") 

これはAWKに標準入力の上に文字列を渡すために<<<を使用しています。三項演算子の結果は、出力され、変数$resに格納されます。あなたはこのような状況で問題が発生しますので、あなたは現在、文字列を比較している心の中で

ベア:

$ tempnow=+9.0°C 
$ threshold=+80.0°C 
$ awk '{ print ($1 > $2 ? "Exceeds" : "Normal") }' <<<"$tempnow $threshold" 
Exceeds 
0

は、以下試してください: -

res=`echo "$tempnow $threshold" | awk '{ if($1 > $2) print "Exceeds"; else print "Normal" }'` 
+0

元のコードに何が間違っていたのか、これが何を違うのかについては、これをより良い答えにするでしょう。 – miken32

関連する問題