2013-02-19 347 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