私は次の課題を持っています。WebIF を使用して Datalogger からデータを読み取ろうとしていますが、スクリプトは基本的に期待どおりに実行されます。しかし、while ループを使用してチェックを追加したいと思います。そして今、私はその「for i in & while」コンボで立ち往生しています...
#!/bin/bash
PASSWD=blah
OUTFILE=$(date +%d).csv
OUTPATH=$(date +%Y/%m/)
LOGPATH="./test/log/"
BASEPATH="./test/"
DEVICENAME=wc-s0
NETWORK=somewhere.lan
CURLPARA="-silent --connect-timeout 5"
TRYS=3
for i in {0..5};
do
TIME="$(date +"%Y-%m-%d %H:%M:%S")";
while [[ $TRYS -ne 0 ]] ; do
VALUE=$(curl $CURLPARA "http://"$DEVICENAME"."$NETWORK"/counter?PW="$PASSWD"&"|grep counter|cut -sd ";" -f $(( i+2 ))|sed 's#kWh##g'|sed 's#kVARh##g'|sed 's#,#.#g');
rc=$?
if [[ $rc -eq 0 ]] ; then
TRYS=1
fi
((TRYS = TRYS - 1))
done
if [[ $rc -eq 0 ]] ; then
echo "Read $DEVICENAME input"$i"."
else
echo "Timeout while reading $DEVICENAME input"$i"."
fi
echo "$VALUE"
echo -n "$DEVICENAME input"$i"; "
echo "$TIME; "
done
出力は次のとおりです。
Read wc-s0 input0.
wc-s0 input0; 2012-09-15 16:58:34;
Read wc-s0 input1.
wc-s0 input1; 2012-09-15 16:58:38;
Read wc-s0 input2.
wc-s0 input2; 2012-09-15 16:58:38;
Read wc-s0 input3.
wc-s0 input3; 2012-09-15 16:58:38;
Read wc-s0 input4.
wc-s0 input4; 2012-09-15 16:58:38;
Read wc-s0 input5.
wc-s0 input5; 2012-09-15 16:58:38;
「0.560」は $VALUE ですが、次のようになると思います。
Read wc-s0 input0.
wc-s0 input0; 2012-09-15 15:58:36; 0.560
Read wc-s0 input1.
wc-s0 input1; 2012-09-15 15:58:37; "$VALUE2"
しかし、この方法でデータを印刷することはできません...
あなたの一人がヒントを持っていることを願っています!