#/bin/sh
openwrt のバリアントを実行しているモデムで実行するスクリプトを作成しています。
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
*
必要なのは、文字を展開せずに文字列として返すことです。
この文脈でそれを行うことができますか?よろしくお願いします