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
:~$
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
:~$
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
の使用を注意してください。
ああ...それを逃した。どうもありがとう。まだ下のコードが文法エラー「else」に失敗する理由を理解できません。 '' $ res "-eq" Exceeds " then echo"温度がしきい値を超えています。システム所有者へのメールをトリガしています... " mails"システムのCPUの温度が高すぎます "[email protected] elif ["$ res" -eq "Normal"] echo "温度が下限です。対策を無視してください!" else echo "値を特定できません" fi –
「-eq」は数値を比較するためのものです。 [[$ res == "Exceeds"]] '条件を使用してください。 – anubhava
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
は、以下試してください: -
res=`echo "$tempnow $threshold" | awk '{ if($1 > $2) print "Exceeds"; else print "Normal" }'`
元のコードに何が間違っていたのか、これが何を違うのかについては、これをより良い答えにするでしょう。 – miken32
私は 'TRを挿入することをお勧め - awkの前にd '+°C' | ' – Cyrus