bashで標準出力の値を判定

標準出力の値を判定します。

echo '264.3' |while read a;do  echo $a; echo $a; done;

出力結果

264.3
264.3

上記のスクリプトは、

#!/bin/bash
echo '264.3' |while read a
do echo $a
echo $a
done

と同じ意味ですな。

数値判定にはtestを利用する。

但し、整数しか扱えないので注意する事。小数点以下が入ると、文字列として扱われる。

if test 1 -eq 1;then echo 'true'; fi;

これを小数点以下を加えたtestしてみると、

# if test 1.1 -eq 1;then echo 'true'; fi;
bash: test: 1.1: integer expression expected

integer expression expectedが出てしまう。

もし、小数点以下を比較しなければならない場合は、bcを利用する事

# echo "1.1 > 1" | bc
1

注意 bcは標準入出力から値を取得するようにあらかじめできてる。

echo '101' |while read a;do if test $a -gt 100;then echo '-4℃以下'; else /usr/local/sbin/temperature/temper | awk -F, '{print $2}' | awk -F. '{print $1"."substr($2,1,1)"℃

"}'; fi; done;

100以上が入ってきたら、-4℃以下と表示する

見にくいので改行つきで表示(少しは見やすいか?)

#!/bin/bash
echo '101' |while read a
do if test $a -gt 100;then echo '-4℃以下'
   else /usr/local/sbin/temperature/temper | awk -F, '{print $2}' | awk -F. '{print 
$1"."substr($2,1,1)"℃

"}' fi done

実は、この温度計-4℃以下が計測できない。200℃以上の表示になってしまうので、異常値が出たら、-4℃以下と表示するように調整した。

/usr/local/sbin/temperature/temper | awk -F, '{print $2}' | awk -F. '{print $1}' |while read a;do if test $a -gt 100;then echo '-4℃以下' >> /usr/local/sbin/temperature/digi.html; else /usr/local/sbin/temperature/temper | awk -F, '{print $2}' | awk -F. '{print $1"."substr($2,1,1)"℃

"}' >> /usr/local/sbin/temperature/digi.html; fi; done;