3

#/bin/shopenwrt のバリアントを実行しているモデムで実行するスクリプトを作成しています。

root@Inteno:~# ls -l /bin/sh
lrwxrwxrwx    1 root     root             7 Oct 15  2014 /bin/sh -> busybox

スクリプトはデータを収集して表示しています。問題が発生しました。接続されているコンピューター名の文字列を返す必要があります。これは 5 列目にあります。

root@Inteno:~# cat /tmp/dhcp.leases
1449374455 00:00:00:00:00:00 192.168.1.245 * 00:00:00:00:00:00
1449371955 11:11:11:11:11 192.168.1.135 android-27718d96d947c125 11:11:11:11:11

これが動作するはずの方法です:

root@Inteno:~# printf '%s\n' $(grep -i 11:11:11:11:11 /tmp/dhcp.leases | awk {'printf $4'})
android-27718d96d947c125

ただし、接続されたコンピュータにネットワーク名が設定されていない場合は、次のようにリストされます*

root@Inteno:~# printf '%s\n' $(grep -i 00:00:00:00:00:00 /tmp/dhcp.leases | awk {'printf $4'})
script2.sh
test.sh

実行時*に、スクリプトが失敗する原因となる実行中のフォルダー内のファイル名として返され、展開されます。これは、入力ファイルが 1 行に 1 つずつの MAC アドレスのリストであるネストされた関数から書き直されます。

while read enhet; do 
  printf '%-6s%-32s%-5s%-19s%-4s%-16s%-20s%-4s%-3s\n' "Navn: " $(cat /tmp/dhcp.leases | grep -i $enhet | awk {'printf $4'}) "MAC: " $(cat /tmp/dhcp.leases | grep -i $enhet | awk {'printf $2'}) "IP: " $(cat /tmp/dhcp.leases | grep -i $enhet | awk {'printf $3'}) "Signalstyrke(RSSI):" $(wlctl rssi $enhet) "dBm"; 
done < temp_assoc

*必要なのは、文字を展開せずに文字列として返すことです。

この文脈でそれを行うことができますか?よろしくお願いします

4

1 に答える 1