Inserindo variáveis em um comando dentro de um script shell

2

Estou tentando escrever um script automatizado que atualizará o endereço IP do meu Raspberry Pi dentro do meu arquivo / etc / hosts.

Eu posso executar esta linha bem,

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

Mas eu quero tornar o script mais modular, sendo capaz de modificar facilmente a sub-rede do endereço IP e / ou o endereço MAC com o uso de variáveis. Portanto, eu fiz as variáveis MY_MAC e MY_LOCAL_IP_SUBNET, que são iguais a algumas entradas de terminal que devo fornecer ao executar o script.

Eu queria ser capaz de fazer algo como

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

Ele é executado, e eu consegui que funcione a variável MY_LOCAL_IP_SUBNET, mas ele não retorna um endereço IP quando a variável MY_MAC é usada. Eu tentei brincar com isso o máximo que pude, mas não consigo fazê-lo funcionar. Alguma idéia?

    
por user138741 10.12.2015 / 08:57

1 resposta

3

Você está usando ' em awk '/^Nmap/{ip=$NF}/$MY_MAC/{print ip}' . ' não expande as variáveis shell, então $MY_MAC nesse caso é literalmente a string $MY_MAC .

Você pode usar aspas duplas para expandir a variável

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

mas isso entrará em conflito com $NF do awk.

Portanto, use o sinalizador -v para adicionar uma variável awk e use $0~mymac para corresponder à linha atual com o padrão em mymac

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