2017-04-08 107 views
0

我有2個腳本,一個是software.sh和其他timer.sh都得到單獨的終端執行。我想要的if語句來檢查軟件的執行時間要連續檢查,但顯然只得到在開始執行檢查一次:(連續型if語句

這是timer.sh它獲取的software.sh的PID,並計算其運行時間

#!/bin/bash 
while ((1)); do 
PID_Ardu=$(pidof arducopter) 
Time= ps -p $PID_Ardu -oetime= | tr '-' ':' | awk -F: '{ total=0; m=1; } { for (i=0; i < NF; i++) {total += $(NF-i)*m; m *= i >= 2 ? 24 : 60 }} {print total}' 
if [[ $Time < 20 ]]; then **#THIS SHOULD BE EXECUTED CONTINOUSLY** 
     echo $Time 
else 
     echo INSIDE 
     ps -ef | grep software| grep -v grep | awk '{print $2}' | xargs kill 
fi 
done  

這是software.sh執行各種生成的文件

#!/bin/bash 
chmod a+x *.exp 


./ACCF01.exp | wait |echo "FINISHED SCRIPT 1" #Run the ACCF01 script 

sed -i '/ACCF01.exp/d' ./software.sh #Delete previous line after finishing execution. 

./ACCF02.exp | wait |echo "FINISHED SCRIPT 2" 

sed -i '/ACCF02.exp/d' ./software.sh 

./ACCF03.exp | wait |echo "FINISHED SCRIPT 3" 

sed -i '/ACCF03.exp/d' ./software.sh 

./ACCF04.exp | wait |echo "FINISHED SCRIPT 4" 
+0

用'bash -x timer.sh'或插入'set -x'運行它,它會打印它執行的命令。 – eckes

+0

不幸運:(我也嘗試在if語句中執行腳本本身,以確保它能夠持續執行,但仍然.... if語句只在​​開始時運行 –

+0

你是什麼意思,沒有運氣?所以我們可以對它進行分析 – eckes

回答

0

Time變量被分配一個字符串,而不是噸的返回值他管道,因爲它需要把它包含在$(..)或反引號中。

If執行多次任何情況下,它只是有在變量沒有改變數值。

當您嘗試調試循環和變量賦值時,您可以使用set -x或將來從bash -x time.sh開始。它將打印出所有行執行和變量擴展。