script BASH que testa para IP

3

Existe uma maneira elegante de testar um endereço IP em um script BASH? Eu poderia fazer ifconfig e diminuir o IP usando sed / awk, mas acho que há uma solução mais simples.

Meu aplicativo é basicamente usando scripts SSH / SCP quando estou na intranet e quando não estou. Então, eu quero esse tipo de fluxo

if IP=192.168.1.1
      then do this
 else
      then do that
    
por devin 26.08.2009 / 03:43

6 respostas

7

Algo bastante simples que você pode modificar para atender às suas necessidades:

ip addr show dev eth0 | fgrep -q 'inet 192.168.1.1'
if [ $? -eq 0 ]; then
   echo 'IP found'
else
   echo 'IP not found'
fi

EDIT: esqueci o fgrep:)

    
por 26.08.2009 / 04:03
2

Se é uma questão de diferenciar se você está conectado dentro de sua Intranet ou não,
você poderia verificar com um rápido ping ou tentativa de arp para um IP de servidor interno conhecido.
Se o IP não responder, você provavelmente estará fora da Intranet.

Pode haver pequenas falhas (como o servidor sendo temporariamente desativado).
Estes podem ser permitidos (você por engano alternar para o modo de Internet),
Ou testado posteriormente com várias verificações (em diferentes recursos internos).

    
por 26.08.2009 / 04:04
1

Este é mais um comentário sobre a resposta do mikeB, mas os comentários não permitem código, por isso vou postar como resposta:

Você pode usar algo como o grep para encontrar o que procura, como

ip addr show dev eth0 | fgrep -q 'inet 192.168.1.1'
if [ $? -eq 0 ]; then
   echo 'IP found'
else
   echo 'IP not found'
fi

Isso pode realmente simplificar a eliminação do teste ([é um alias para teste) no status de saída, porque se ele já verifica o status de saída diretamente, que é como o teste se comunica se já:

if 
  ifconfig | fgrep -q 'inet 192.168.1.1'
then
  echo "IP Found"
else
  echo "IP Not found"
fi

E você pode simplificar ainda mais isso usando as pesquisas de regex construídas na maioria dos shells do bourne usando uma instrução case:

case $(ifconfig)
in 
  *"inet 192.168.1.1"*) 
     echo "IP found" 
   ;;
  *) 
    echo "IP not found" 
   ;; 
esac
    
por 26.08.2009 / 16:19
0

Um (OMI, mais complicado, e mais propenso a falhar) método é configurar seu cliente dhcp para salvar o endereço IP atribuído a um arquivo conveniente em algum lugar.

por exemplo. com dhclient, você pode simplesmente soltar um script em /etc/dhcp3/dhclient-enter-hooks.d/ para salvar o IP atual em um arquivo, digamos /var/run/current-IP.txt

então seus outros scripts podem apenas catar esse arquivo para obter o IP atual.

o problema de fazer algo assim é que ele apenas informa qual era o seu endereço IP quando foi atribuído pela última vez pelo dhcp. Na verdade, ele não informa qual é o seu endereço IP agora . eles podem ser os mesmos ou não podem.

    
por 26.08.2009 / 04:38
0

ip addr show <DEVICE> | grep inet | grep -v inet6 | awk '{print $2}'

Isso deve produzir seu IP, esperançosamente. Há provavelmente uma maneira mais elegante de fazer isso, mas isso faz o trabalho independentemente da elegância.

    
por 26.08.2009 / 04:50
0


#!/bin/bash
address="192.168.0.1"
interface="eth0"

ip=$(ifconfig -a $interface | awk -F: '/inet/ {print $2}' | head -n 1 | awk '{print $1}') if [ ${ip} == ${address} ]; then #Do something fi

    
por 26.08.2009 / 16:26