シェルスクリプト内のコマンドに変数を挿入する

シェルスクリプト内のコマンドに変数を挿入する

私の/ etc / hostsファイルからRaspberry PiのIPアドレスを更新する自動化されたスクリプトを作成しようとしています。

この行をうまく実行できます。

IP=`sudo nmap -sP 10.61.4.0/24 | awk '/^Nmap/{ip=$NF}/B8:27:EB/{print ip}'`

ただし、変数を使用してIPアドレスのサブネットおよび/またはMACアドレスを簡単に変更してスクリプトをさらにモジュール化できることを願っています。したがって、スクリプトの実行時に提供する必要があるいくつかの端末入力と同じMY_MAC変数とMY_LOCAL_IP_SUBNET変数を作成しました。

私は次のことができるようにしたいと思います。

IP=`sudo nmap -sP $MY_LOCAL_IP_SUBNET | awk '/^Nmap/{ip=$NF}/$MY_MAC/{print ip}'`

動作します。私はMY_LOCAL_IP_SUBNET変数を使用して動作させるようにしましたが、MY_MAC変数を使用してもIPアドレスを返しません。この問題を解決するためにできることはすべてありましたが、うまく動作しないようです。どんなアイデアがありますか?

答え1

シェル変数を拡張せずに '。を使用しているので、この場合は実際には文字列です。awk '/^Nmap/{ip=$NF}/$MY_MAC/{print ip}''$MY_MAC$MY_MAC

二重引用符を使用して変数を拡張できます。

IP=$(sudo nmap -sP $MY_LOCAL_IP_SUBNET | awk "/^Nmap/{ip=$NF}/$MY_MAC/{print ip}")

しかし、これはawkと衝突します$NF

したがって、対応する-vフラグを使用して変数を追加し、awkそれを使用して$0~mymac現在の行を次のパターンと一致させます。mymac

IP=$(sudo nmap -sP $MY_LOCAL_IP_SUBNET | awk -v mymac="$MY_MAC" '/^Nmap/{ip=$NF}$0~mymac{print ip}')

関連情報