whileループの変数は最初の実行のみをチェックしますか?

whileループの変数は最初の実行のみをチェックしますか?

変数がその値より小さい場合、指定されたコマンドを実行すると予想してこのスクリプトを作成しました。しかし、(ログによると)スクリプトが最初に実行されたときに起こるのは、「TEMP_NOW」変数をチェックし、キャッシュされたかのようにその初期値を永久に使用することです。 TEMP_NOW変数が確実に変化することを確認しました。

関心をお寄せいただきありがとうございます

#!/bin/bash
set -x
LOG_FILE=/home/mutt/pl/logs/pump.log
TEMP_NOW=$(cat /home/mutt/pl/logs/temp_now.txt)

while [ $TEMP_NOW -le 556 ]
do
        /home/mutt/pl/temp_pump_on.s
        echo ON > /home/mutt/pl/logs/pump_sch.txt
        echo $TEMP_NOW at `$(which date)` >> $LOG_FILE 2>&1 &
        sleep 5m
        /home/mutt/pl/temp_pump_off.s
        echo $TEMP_NOW at `$(which date)` >> $LOG_FILE 2>&1 &
        echo OFF > /home/mutt/pl/logs/pump_sch.txt
        sleep 20m
set +x 
done

丸太:

mutt@mutt:~/pl/logs $ tail -10 pump.log
TEMP turned pump off at Sat Jan 13 13:07:01 CST 2018
125 at Sat Jan 13 13:07:01 CST 2018
TEMP turned pump ON at Sat Jan 13 13:27:01 CST 2018
125 at Sat Jan 13 13:27:01 CST 2018
TEMP turned pump off at Sat Jan 13 13:32:01 CST 2018
125 at Sat Jan 13 13:32:01 CST 2018 
TEMP turned pump ON at Sat Jan 13 13:52:01 CST 2018
125 at Sat Jan 13 13:52:01 CST 2018
125 at Sat Jan 13 13:57:01 CST 2018
TEMP turned pump off at Sat Jan 13 13:57:01 CST 2018
mutt@mutt:~/pl/logs $ ll temp_now.txt 
-rw-rw-rw- 1 pi pi 5 Jan 13 14:12 temp_now.txt
mutt@mutt:~/pl/logs $ cat temp_now.txt 
9625
mutt@mutt:~/pl/logs $ 

ベストアンサー1

もちろん、変数は静的であり、ループ内には割り当てられません。以下を変更してください。

while [ $TEMP_NOW -le 556 ]

そして:

while [ "$(cat /home/mutt/pl/logs/temp_now.txt)" -le 556 ]

各ループでファイルを再読み込みします。

おすすめ記事