2013-02-19 242 views
-1

我已經看到很多解決方案來解決我的問題 - 每5秒運行腳本。如何每5秒鐘運行一次shell腳本2分鐘?

除此之外,我也只希望它只運行2分鐘。

腳本的點是在某個位置採樣RSSI一段時間:

#!/bin/bash 

RSSI_CSV=$1 
DISTANCE=$2 
RSSI=$(iwconfig wlan0 | awk -F'[ =]+' '/Signal level/ {print $7}\') 

printf "$DISTANCE,$RSSI\n" >> $RSSI_CSV 

在命令行中它被稱爲有:

sh rssi_script.sh output.csv position 

會是什麼解決我的問題的最強大的解決方案?

可能性我已經考慮:

  • 重複的腳本中本身40倍(測量RSSI 40倍,並輸出到CSV 40倍,該位置將在整個實驗中一樣),這也將解決限制運行到2分鐘的問題。我可能會添加一些新的命令行參數,如果每次都必須更改40個變量,那麼可能很難記錄下來。
  • 使用手錶每5秒採樣一次,cron將其限制爲2分鐘(不是100%cron可以做的這個)
  • 一個while循環2分鐘(不確定如何做一個while循環是這樣的?)在每個循環結束時用5秒睡眠
  • 使用cron啓動shell腳本爲40個進程腳本和延遲每次迭代5秒,我不知道如何通過命令行參數傳遞,正如我上面所說,我可能會添加一些新的命令行參數,以便可能會導致問題(額外的工作)

讓我知道是否有任何信息我已經錯過或將幫助,並感謝任何人可以給予任何幫助。

回答

0
#!/bin/bash 

[ "$3" = "0" ] && { exit; } 

RSSI_CSV=$1 
DISTANCE=$2 
RSSI=$(iwconfig wlan0 | awk -F'[ =]+' '/Signal level/ {print $7}\') 

printf "$DISTANCE,$RSSI\n" >> $RSSI_CSV 

sleep 5 
N=$3 
$0 $1 $2 $((N-1)) 

像這樣運行:

sh rssi_script.sh output.csv position 24 
+1

至少在最後一行使用'exec'作爲尾遞歸優化。 – chepner 2013-02-19 14:01:39

+0

你是什麼意思使用exec?新腳本似乎不工作,我得到錯誤rssi_script.sh:13:rssi_script.sh:rssi_script:找不到 – 2013-02-19 15:32:13

0

通過PeterMmm的輸入啓發我設法得到它的工作,而事實上它爲我的作品更好地與他們

之間的硬編碼的休息運行N個樣本
#!/bin/bash 

RSSI_CSV=$1 
DISTANCE=$2 
N=$3 

while [ $N -ne 0 ] 
do 
    RSSI=$(iwconfig wlan0 | awk -F'[ =]+' '/Signal level/ {print $7}\') 
    printf "$DISTANCE,$RSSI\n" >> $RSSI_CSV 
    sleep 2 
    ((N--)) 
    echo $N 
done 
exit