-1

我已经看到了很多解决我一半问题的方法——每 5 秒运行一次脚本。

除此之外,我还希望它只运行 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 个变体,这些参数可能很难跟踪
  • 使用 watch 每 5 秒采样一次,使用 cron 将其限制为 2 分钟(不是 100% cron 可以做到这一点)
  • 2 分钟的 while 循环(不知道如何做这样的 while 循环?),每个循环结束时睡眠 5 秒
  • 使用 cron 将 shell 脚本作为脚本的 40 个进程启动,并将每次迭代延迟 5 秒,我不确定命令行参数将如何传递,正如我上面所说,我可能会添加一些新的命令行参数,这样可以导致问题(额外工作)

让我知道是否有任何我错过的信息或有帮助的信息,并感谢任何人提供的任何帮助。

4

2 回答 2

1
#!/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
于 2013-02-19T14:00:37.300 回答
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
于 2013-02-19T22:05:54.617 回答