Separador de octeto [RESOLVIDO]

1. Separador de octeto [RESOLVIDO]

Caio Alexander
caioc2

(usa Kali)

Enviado em 02/11/2011 - 01:50h

Bom galera eu tenho que separar os octetos de um IP, eu estou tentando assim

#!/bin/bash
clear
echo -n "Informe o IP: "
read IP

numero=$1
OCTETO_01=$(( echo $IP | cut -d'.' f$1))

echo $OCTETO_01
A intensão é pra ler o IP e separar a o "." ser o separador, caso eu informe 10.0.0.0 . para mostrar
o primeiro octeto = 10 , o segundo = 0 e assim em diante, oque está errado ?? Ou se alguém tiver outro método também, sem problemas.


  


2. Re: Separador de octeto [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 02/11/2011 - 02:32h


#!/bin/bash
clear
echo -n "Informe o IP: "
read IP

OCTETO_01=$( echo $IP | cut -d'.' f1)


Assim dar certo.

Na sessão de scripts do vol existem vários scripts que lidam com IP, dê uma olhada se quiser ver outras soluções e adaptar para você.
Abraços


3. Re: Separador de octeto [RESOLVIDO]

Caio Alexander
caioc2

(usa Kali)

Enviado em 02/11/2011 - 16:53h

Eu fiz assim,
#!/bin/bash
echo -n "informe o ip: "
read IP
echo -n "informe a base: "
read base

octeto1=$(echo $ip | cut -d. -f1).

Porém eu tenho que pegar cada octeto e transforma-los em binário com a adição de "0" para preencher todas as casas, caso o numero de 1010 na base 8, eu tenho que adicionar "0" até ficar 00001010. Isso eu sei, o problema é eu transformar todos octetos, do 1 até o 4. Não teria um jeito mais fácil que já faça a transformação dos números para binário dos 4 octetos, sem eu ter que fazer um while para cada octeto, exemplo :

while [ octeto1 -gt 0 ]
do
res=$((octeto1 % base))
octeto1=$((octeto1 / base ))

res=$octeto1$res

echo $res


fazer um deste , porém que pegue os 4 octetos de uma vez.


4. Re: Separador de octeto [RESOLVIDO]

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 03/11/2011 - 02:34h

Veja se esse exemplo tosco pode te ajudar:


#!/bin/sh
#
#
echo -n "Informe um endereco IP: "
read ip

# Verifica se o input informado e valido como endereco IP
if ! echo "$ip" | grep -q '\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}'; then
echo 'Formato invalido para endereco IP'
exit 1
fi

OLD_IFS=$IFS
IFS='.'

set - $ip

converterBase() {
echo "obase=2; $1" | bc
}

primeiro_octeto=`converterBase $1`
segundo_octeto=`converterBase $2`
tercerio_octeto=`converterBase $3`
quarto_octeto=`converterBase $4`

for i in $primeiro_octeto $segundo_octeto $tercerio_octeto $quarto_octeto
do
printf '%08d\n' $i
done

IFS=$OLD_IFS

exit 0


Qualquer dúvida, consulte as man pages.


5. Re: Separador de octeto [RESOLVIDO]

Osama Jr.
/bin/laden

(usa Void Linux)

Enviado em 03/11/2011 - 15:02h

Pow legal essa paradinha aí marcell


6. Re: Separador de octeto [RESOLVIDO]

Caio Alexander
caioc2

(usa Kali)

Enviado em 03/11/2011 - 17:17h

Sim, muito legal eu só estou tentando entender ainda ^^ , pq eu sou novo em shell.


7. Re: Separador de octeto [RESOLVIDO]

Caio Alexander
caioc2

(usa Kali)

Enviado em 03/11/2011 - 20:56h

Eu não entendi algumas partes:

#
OLD_IFS=$IFS
IFS='.'
#

#
set - $ip
#


#
for i in $primeiro_octeto $segundo_octeto $tercerio_octeto $quarto_octeto
do
printf '%08d\n' $i # no casso isso aqui é pra mostrar "0" até completar "8" digitos?
done
#

#
IFS=$OLD_IFS
#

E como eu mostro todos os números convertidos em apenas uma única linha.


8. Re: Separador de octeto [RESOLVIDO]

Caio Alexander
caioc2

(usa Kali)

Enviado em 04/11/2011 - 14:44h

Alguém me ajuda nessa dúvida ai, por favor.


9. Re: Separador de octeto [RESOLVIDO]

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 04/11/2011 - 15:32h

-----
OLD_IFS=$IFS
IFS='.'
-----

A variável de ambiente 'IFS' é a responsável pela separação de campos no shell, e seu valor padrão é espaço em branco.

O que fiz foi salvar o valor padrão numa variável auxiliar, e temporariamente alterar o valor dela para utilizar como separador o caractere '.', já que é o mesmo que separa os octetos dum endereço IP.

Portanto se você der um 'echo $ip' após as linhas acima, verá que a saída será assim:

xxx xxx xxx xxx

Já que o separador padrão agora é o caractere '.'.

-----
set - $ip
-----

Com a instrução 'set' (comando built-in do shell) eu transformo cada octeto num argumento ($1, $2, $3 e $4) para poder trabalhar separadamente com cada um.

-----
for i in $primeiro_octeto $segundo_octeto $tercerio_octeto $quarto_octeto
do
printf '%08d\n' $i # no casso isso aqui é pra mostrar "0" até completar "8" digitos?
done
-----

Exatamente! O 'printf' irá preencher com zeros à esquerda a string até que a mesma atinja o comprimento de 8 caracteres.

-----
IFS=$OLD_IFS
-----

Aqui simplesmente restauro o valor padrão da variável IFS.

Ah, para mostrar tudo na mesma linha, remova a quebra-de-linha '\n' no 'printf'.


10. Re: Separador de octeto [RESOLVIDO]

Caio Alexander
caioc2

(usa Kali)

Enviado em 04/11/2011 - 16:09h

SMarcell escreveu:

-----
OLD_IFS=$IFS
IFS='.'
-----

A variável de ambiente 'IFS' é a responsável pela separação de campos no shell, e seu valor padrão é espaço em branco.

O que fiz foi salvar o valor padrão numa variável auxiliar, e temporariamente alterar o valor dela para utilizar como separador o caractere '.', já que é o mesmo que separa os octetos dum endereço IP.

Portanto se você der um 'echo' após as linhas acima, verá que a saída será assim:

xxx xxx xxx xxx

Já que o separador padrão agora é o caractere '.'.

-----
set - $ip
-----

Com a instrução 'set' (comando built-in do shell) eu transformo cada octeto num argumento ($1, $2, $3 e $4) para poder trabalhar separadamente com cada um.

-----
for i in $primeiro_octeto $segundo_octeto $tercerio_octeto $quarto_octeto
do
printf '%08d\n' $i # no casso isso aqui é pra mostrar "0" até completar "8" digitos?
done
-----

Exatamente! O 'printf' irá preencher com zeros à esquerda a string até que a mesma atinja o comprimento de 8 caracteres.

-----
IFS=$OLD_IFS
-----

Aqui simplesmente restauro o valor padrão da variável IFS.

Ah, para mostrar tudo na mesma linha, remova a quebra-de-linha '\n' no 'printf'.


Brigadão ai pelo support ;D








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts