1

Macアドレスでwifi接続の接続状態をログに記録するbashスクリプトを作成しようとしていますが、コードの構文に問題があります。

#!/bin/sh

client="E1:FA:41:23:00:AC"
logfile="/var/logs/wificonn.log"
timestamp=$(date +"%Y%d%m %T")
assoclist=$(wl assoclist | grep $client)
loglast=$(tail -n 1 $logfile | grep $client Not Connected)
notconnmsg="$timestamp $client Not Connected"
connmsg="$timestamp $client Connected"

if [ ! -f $logfile ]; then
    touch $logfile
fi

if [ -z $assoclist  ]; then # Client is not connected
  if [ -n $loglast ]; then # Last log is connected show not connected message
    echo $notconnmsg
    echo $notconnmsg >> $logfile
  fi  
else # Client is connected
  if [ -z $loglast ]; then  # Last log is not connected show connected message
    echo $connmsg
    echo $connmsg >> $logfile
  fi  
fi

これは60秒ごとにcronジョブとして実行され、反対のことが当てはまる場合にのみ、接続されたイベントまたは接続されていないイベントを表示/ログに記録する必要があります。私は最後のログエントリをチェックすることによってこれを達成しようとしています。たとえば、最後のログが接続されておらず、現在接続されている場合は、ファイルに記録します。ここに問題があります。

ありがとう

4

2 に答える 2

1

私はコードを変更し、誰かがそれを使用したい場合に備えてこの実用的なソリューションを手に入れました

#!/bin/sh

client="XX:XX:XX:XX:XX:XX"
logfile="/var/log/wifilog-$(date +"%m%d")-$client.log"
assoclist=$(wl assoclist | grep $client)
notconnmsg="$(date +"%T") Disconnected"
connmsg="$(date +"%T") Connected"

if [ ! -f $logfile ]; then
    echo $notconnmsg > $logfile
fi

if [ -z $assoclist  ]; then # Client is not connected
  echo $(tail -n 1 $logfile) - $notconnmsg
  if [ -z $(tail -n 1 $logfile | grep "Disconnected") ]; then # Last log is connected show not connected message
    echo $notconnmsg >> $logfile    
  fi  
else # Client is connected
  echo $(tail -n 1 $logfile) - $connmsg
  if [ -z $(tail -n 1 $logfile | grep "Connected") ]; then  # Last log is not connected show connected message
    echo $connmsg >> $logfile    
  fi   
fi
于 2012-09-19T22:13:08.490 に答える
0
if [ -n $loglast ]; then

$loglast二重引用符で囲んでみてください。

if [ -n "$loglast" ]; then

が空の場合$loglast、bashはを参照しif [ -n ]ます。空の引数を評価しているのではなく、何も評価していません。次のことを試して、違いを確認できます。

$ loglast=""
$ if [ -n "$loglast" ]; then echo 'yep'; fi
# <no output>
$ if [ -n $loglast ]; then echo 'yep'; fi
# yep
于 2012-09-19T04:13:20.650 に答える