shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] mostra IP de interfaces


From: Raul Libório
Subject: Re: [shell-script] mostra IP de interfaces
Date: Sun, 1 Feb 2009 03:45:21 -0300

Grande Júlio,

Haha, A vossa otoridade é quem manda! Valeu grande mestre!
Cara, espie na aventura que você me meteu... Comecei a fazer o add-on
assim que li seu email (31 Jan, 23:10+ -).
Como nunca tinha utilizado o getopts, li o Papo de Butiquim como você
recomendou. Ai, ainda meio enduvidado, li o trecho do livro do Aurélio
(este está disponível para download).
Leio, altero, executo e nada! O laço não queria funcionar de jeito
nenhum! Já havia desistido do 'desafio'. Eu já estava escrevendo para
a lista pra dizer que 'bufei na farofa' e não consegui terminar. Ai
foi quando milagrosamente o cérebro voltou a funcionar e viu onde
estava a merda: exit 0;; no final de cada opção do case! Ai num tem
looping que rode!

Ajustei o script, melhorei um pouco o código (beeem suavemente) e
adicionei o 'getopts'. Ficou assim:

# -- inicio

#!/bin/bash

# 2.2 - Aceita varios parametros (a pedido do Julio Neves)
# 2.1 - Exibe o endereco de todas as interfaces
# 2.0 - Mostra o endereco IP de saida
# 1.0 - Mostra o ip das interfaces

# -- VARIAVEIS
IFCONFIG="/sbin/ifconfig"

MODO_DE_USO="USO:       $( basename $0) [ OPCAO ]|-e[ INTERFACE ]

    OPCOES:
        -a:             Exibe o endereco IP de todas as interfaces,
                          inclusive o endereco externo
        -e INTERFACE:   Exibe o endereco IP da interface INTERFACE
        -o:             Exibe o endereco IP de saida
        -h:             Exibe esta ajuda
        -v:             Versao e ultima alteracao

    STATUS:
        0       Saida ok
        1       Argumento invalido
        2       Falta de argumento

  IR - Interface de Rede
  Visualizador simples de endereco de rede

Raul Liborio - <address@hidden> | http://rauhmaru.blogspot.com/
                http://www.redesfja.com/
"
# -- EXECUCAO

if [ -z $1 ]; then

        ip a | awk "/eth0/"'{print $2}' | tail -1 | cut -d/ -f1
        exit 0

else

IP_EXTERNO(){
        w3m -dump http://ipid.shat.net/iponly/ | sed 's/ //;' | head -1
}

    while getopts ":ahove:" ARGUMENTOS
    do

        case "${ARGUMENTOS}" in

          h) echo "${MODO_DE_USO}"
          exit 0 ;;

          v) cat $( which $( basename $0 ) ) \
                | awk -F# "/[0-9]/"'{ print $2 }' | head -1
          exit 0;;

          a) LANG=POSIX ${IFCONFIG} | awk "/inet addr:/"'{ print $2 }'\
                | cut -d: -f2; IP_EXTERNO
          exit 0;;

          e) ip a show "$OPTARG" | awk /inet/'{ print $2 }'| \
                head -1 | cut -d/ -f1;;

          o) IP_EXTERNO;;

          \?) echo "${MODO_DE_USO}"
          exit 1;;

          :) echo sim... e a INTERFACE? Esqueceu foi? cabeca... :P
          exit 2;;
        
        esac

    done

fi

# -- fim

Então é isso. Acho que tá pronto =D Muito obrigado Júlio pela dica, me
rendeu uma ótima experiência =D
e agora eu posso dormir ( 01 Fev, 03:44)

Ah.. quando é que vai ter curso de Shell em Salvador?

  |
  |
  + \
  \\.G_.*=.
   `( '/.\|
    .>' (_--.
 _=/d   ,^\
~~ \)-'   '
   / |
  '  '
Raul Libório
UniJorge Redes - www.redesfja.com
rauhmarutsªhotmailºcom
Linux user#4444581

"The bug is on the table."

" Se você tem uma maçã e eu tenho uma maçã e, em seguida, trocarmos as
maçãs, eu e você ainda teremos uma maçã cada um. Mas se você tem uma
idéia e eu tenho uma idéia e trocarmos essas idéias, então cada um de
nós terá duas idéias. "

George Bernard Shaw

Dúvidas: enviar para /dev/null



2009/1/31 Julio C. Neves <address@hidden>:
> Fala Raul,
> script blz e bastante útil. Valeu pela colaboração, e é por isso que o Sw
> Livre é imbatível, pois todos ajudam todos. Somos "todos por um e todos por
> outros". ;)
>
> Só um conselho: o case que vc fez não permite que o usuário escolha mais de
> uma opção, tipo: ./prg -oe INTERFACE, ou ./prg -oeINTERFACE, e isso é
> facilmente corrigível com o uso de getopts que vc pode entender facilmente
> lendo o Papo de Botequim
> 010<https://wiki.softwarelivre.org/TWikiBar/TWikiBarPapo010#Comando_getopts>
> .
>
> Caso esta solução te agrade, favor republicar o script na lista.
> --
> Abração,
> Julio
> *Cursos de Shell e Zenity nos finais de semana:
> - Breve no RJ;
> - Em SP ligue (11) 2125-4747;
> - Em DF ligue (61) 3223-3000;
> - Turmas fechadas em outras cidades ligue (21) 8112-9988*
>
> 2009/1/31 Raul Libório <address@hidden>
>
>>   Olá amigos,
>>
>> Fiz um script simples, mas de grande utilidade (ao menos pra mim :D).
>> Ele mostra o endereço IP das interfaces conectadas (eth0 por default e
>> outras com -e INTERFACE) e também o IP externo ( opção -o ).
>> Como disse, é simples, mas útil, já que a saída é apenas o endereço,
>> sem todas aquelas informações de máscara, broadcast, MTU, MAC...
>> Gostaria da ajuda de vocês para melhorar o código. O script (ao menos
>> aqui no openSUSE 11.1) está funcional.
>>
>> http://pastebin.com/m6b0d8ca0
>>
>> # -- Inicio
>>
>> #!/bin/bash
>> # 2.1 - Exibe o endereco de todas as interfaces
>> # 2.0 - Mostra o endereco IP de saida
>> # 1.0 - Mostra o endereço de eth0
>> # GPL
>> # Pastebin: http://pastebin.com/m6b0d8ca0
>>
>> # -- VARIAVEIS
>>
>> INT="$1"
>>
>> MODO_DE_USO="USO: $( basename $0) [ INTERFACE ]|[ OPCAO ]
>>
>> OPCOES:
>> -a: Exibe o endereco IP de todas as interfaces,
>> inclusive o endereco externo
>> -e INTERFACE: Exibe o endereco IP da interface INTERFACE
>> -o: Exibe o endereco IP de saida
>> -h|--help Exibe esta ajuda
>>
>> IR - Interface de Rede
>> Visualizador simples de endereco de rede - GPL3
>>
>> Raul Liborio - <address@hidden <rauhmaru%40gmail.com>> |
>> raumaru.blogspot.com/
>> www.redesfja.com
>> "
>> # -- EXECUCAO
>>
>> if [ -z $INT ]; then
>>
>> ip a | awk "/eth0/"'{print $2}' | tail -1 | cut -d/ -f1
>> exit 0
>>
>> else
>>
>> IP_EXTERNO(){
>> w3m -dump http://ipid.shat.net/iponly/ | sed 's/ //;' | head -1
>> }
>>
>> case $INT in
>>
>> "--help"|"-h") echo "$MODO_DE_USO"
>> exit 0 ;;
>>
>> "-v"|"--version") cat $( which $( basename $0 ) ) \
>> | awk -F# "/[0-9]/"'{print $2}' | head -1
>> exit 0;;
>>
>> "-a"|"--all") LANG=POSIX ifconfig | awk "/inet addr:/"'{ print $2 }'\
>> | cut -d: -f2; IP_EXTERNO
>> exit 0;;
>>
>> "-e") ip a show "$2" | awk /inet/'{print $2 }'| \
>> head -1 | cut -d/ -f1
>> exit 0;;
>>
>> "-o") IP_EXTERNO
>> exit 0;;
>>
>> *) echo "$MODO_DE_USO"
>> exit 1;;
>>
>> esac
>> fi
>>
>> # -- Fim
>>
>> Desde já, valeu galera =D
>>
>> --
>>
>> |
>> |
>> + \
>> \\.G_.*=.
>> `( '/.\|
>> .>' (_--.
>> _=/d ,^\
>> ~~ \)-' '
>> / |
>> ' '
>> Raul Libório
>> UniJorge Redes - www.redesfja.com
>> rauhmarutsªhotmailºcom
>> Linux user#4444581
>>
>> "The bug is on the table."
>>
>> " Se você tem uma maçã e eu tenho uma maçã e, em seguida, trocarmos as
>> maçãs, eu e você ainda teremos uma maçã cada um. Mas se você tem uma
>> idéia e eu tenho uma idéia e trocarmos essas idéias, então cada um de
>> nós terá duas idéias. "
>>
>> George Bernard Shaw
>>
>> Dúvidas: enviar para /dev/null
>>
>>
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como 
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
> aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em 
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
> Links do Yahoo! Grupos
>
>
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]