2017-07-18 4 views
1

スクリプトを実行するたびに番号を変更する必要があります。 0から999までの最大3桁の数字が存在することができ、それは999スクリプトが0から999まで実行されるたびに番号を増やしてから開始します。

#!/bin/sh 

#Ncat is a part of the nmap, install nmap to use ncat 

#Define variables 
i=poland.aprs2.net 
port=14580 
lat=3439.94N 
lon=02517.67E_ #_ is a symbol for WX station 
user=APRS 
password=99999 

#Generate authentication data 
aprsauth="user $user pass $password filter m/50" 

#Generate Weather data 
xastir="$user>APX206,TCPIP*:!$lat/$lon".../...g...t...h41X210"" 

#Telemetry data 
t1="$user>APX206,TCPIP*:T#672,060,000,000,000,000,00000000" 

#Send data to the APRS server 
printf "%s\n" "$aprsauth" "$xastir" "$t1"| ncat --send-only $i $port 

#Output control 
printf "%s\n" "$aprsauth" "$xastir" "$t1" 

に達した後、それは繰り返す必要が変更される必要があるコードは、T# ですから:

t1="$user>APX206,TCPIP*:T#672,060,000,000,000,000,00000000" 

T #xxxはAPRSプロトコルのシーケンス番号で、3桁しかサポートしていません。各テレメトリレポートには異なるシーケンス番号が必要です。

+0

'echo'は余計です:' T1 = "$ユーザー> APX206、TCPIP *:T番号672,060,000,000,000,000,00000000" ' – chepner

+0

たぶん私はSHUF -i 0-999 -n 1を使用することができますが、それがランダム化されます2回目に同じ数字を得るチャンスがあります。 – newbie123

答えて

6

何らかの外部状態を維持する必要があります。ファイルに最後に使用した番号を書き込み、起動時にそのファイルを読み込んで増分できるようにする必要があります。

read num < /var/run/myscript/last_value 
num=$((num + 1)) 
if ((num == 1000)); then 
    num=0 
fi 
echo "$num" > /var/run/myscript/last_value 

... 

printf -v t1 "%s>APX206,TCPIP*:T#%03d,060,000,000,000,000,00000000" "$user" "$num" 
+0

スクリプト内のnum = 0の行にはnumが見つかりませんが、それ以外の場合は番号が変わります。 – newbie123

+0

/bin/bashの代わりに、間違ったシェルを定義しました。/ bin/bash – newbie123

+0

好きな場合には、/ bin/shで動作するように答えを調整できます。私が使用した 'bash'固有の機能はどれも必要ありません。 – chepner

関連する問題