-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のバリアントを変更する必要がある場合、追跡が難しい新しいコマンドライン引数を追加する可能性があります
  • ウォッチを使用して5秒ごとにサンプリングし、cronを使用して2分に制限します(100%cronではこれを実行できません)
  • 2分間のwhileループ(このようなwhileループの実行方法がわからない場合)。各ループの最後に5秒間スリープします。
  • cronを使用して、スクリプトの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 に答える