Sintaxe de substituição do comando Bash (para script para determinar meu ip global)

1

Sou novo em scripts e estou preso. Eu preciso converter isso:

MYIP='ifconfig eth0 | grep 'inet addr'| awk '{print }' | cut -d ':' -f 2';

Para isso:

MYIP=curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'

Estou "fazendo" um script que me enviará um email sempre que meu ip externo mudar. Estou juntando as peças que encontro na rede, mas não consigo fazer isso funcionar. O primeiro código apenas me envia uma notificação com o meu IP interno.

O segundo trecho de código é para determinar meu IP global, mas parece que não funciona. Eu recebo a mensagem de erro:

./filename.sh: line 5: -s: command not found

(a linha 5 é a segunda parte do roteiro postada acima)

Por favor me ajude a resolver a última peça do quebra-cabeça .. Obrigado.

    
por Ginger Server 16.02.2016 / 20:26

3 respostas

1

Você precisa da substituição de comandos do Bash em ambas as linhas.

MYIP=$(ifconfig eth0 | grep 'inet addr'| awk '{print }' | cut -d ':' -f 2)
MYIP=$(curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//')

Você já usou a sintaxe de substituição do comando ' ... ' em sua primeira linha, mas a sintaxe $( ... ) é normalmente recomendada sobre essa.

Você pode ler sobre as duas sintaxes de substituição de comando do Bash: link

    
por Byte Commander 16.02.2016 / 20:43
0

Além do que o ByteCommander já disse, você não precisa de muito cano. Apenas deixe curl dar saída para awk e ele pode manipular o trabalho. Você pode usar um pipe ou bash de substituição de processo. Eu usei o último

 awk -F ':' '{print "Current IP:"substr(,0,14)}' < <(curl -s checkip.dyndns.org)
    
por Sergiy Kolodyazhnyy 16.02.2016 / 22:37
0

Outra maneira fácil de obter seu IP global atual sem precisar remover nenhum caractere extra com awk ou sed ou qualquer coisa é com dig :

dig +short myip.opendns.com @resolver1.opendns.com

Isso não retornará nada além do seu IP.

    
por user323419 18.02.2016 / 17:15