Logo Hardware.com.br
pablojfreitas
pablojfreita... Novo Membro Registrado
11 Mensagens 0 Curtidas

Concatenar strings em shell

#1 Por pablojfreita... 05/09/2006 - 15:57
Pessoal estou com uma duvida, eu quero pegar os 3 primeiros octetos do ip, e acrescentar o ultimo:
ex.: 13.1.1.1, 13.1.1.2, 13.1.1.3
Os 3 primeiros octetos eh uma variavel(Pesso pro usuario digitar), o ultimo octeto eh outra variavel (ele eh uma variavel da estrutura de repetição(while)).
Como faço pra juntar(concatenar) as duas variveis?
jqueiroz
jqueiroz Cyber Highlander Registrado
104K Mensagens 5.7K Curtidas
#4 Por jqueiroz
05/09/2006 - 16:56
Sugestão: não use Shell Script. Pelo menos, não shell script puro wink.png

Você pode conseguir isso com awk (que, junto com teoria de semicondutores e a mente das mulheres, é uma das coisas que eu não consigo entender de jeito nenhum :shock: :cry: ) ou com perl.

Um script Perl que faz o que você quer:

#!/bin/perl -w

use strict;

my $rede;
my $estacao;

print "Digite o endereço da rede: ";
$rede = <>;

$rede =~ s/(\d+\.\d+\.\d+\.)\d+/\1/;
for( $estacao = 1; $estacao <= 254; $i++ ) {
my $endereco = $rede . $estacao;

# Aqui você faz o que quiser com $endereco
print "$estacao\n";
#
}
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o Blog do Zekke
jqueiroz
jqueiroz Cyber Highlander Registrado
104K Mensagens 5.7K Curtidas
#8 Por jqueiroz
06/09/2006 - 17:10
pablojfreitas, o perl não tem um comando ping de forma nativa; mas você pode usar a função system() para executar um comando do sistema:

system("ping $endereco");


eu acho q entendi o problema do meu programa, eu acho q tenho q converter o ultimo octeto em string.
Alguem poderia me informar com isso poderia ser feito no shell?

O Shell não faz distinção entre strings e números (nem Perl). Teu problema não é na conversão, e sim na hora de "cortar" a parte que te interessa do endereço original.
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o Blog do Zekke
pablojfreitas
pablojfreita... Novo Membro Registrado
11 Mensagens 0 Curtidas
#9 Por pablojfreita...
06/09/2006 - 17:47
com o shell estou usando assim:

#!/bin/bash
{
echo 'digite o IP desejado(ex.: 10.13.1.): '; read ip_inicial
echo 'digite o inicio do ultimo IP(ex.: 1): '; read ip_final
echo 'digite o termino do IP(ex.:250 ): '; read termino
while [ "$ip_final" -le "$termino" ];
do
ip = $ip_inicial$ip_final
ping -c 2 $ip;
.
.
.
.
ip_final=$((ip_final+1));
done
exit
}

e ele aparece o numero certinho so naum reconhece o ip.

Eh, eu acho q tenho q passar para o perl, vou estudar um pouco mais de perl, e tentarei fazer
peczenyj
peczenyj Geek Registrado
3K Mensagens 75 Curtidas
#10 Por peczenyj
06/09/2006 - 18:16
sugestão: use laço for e use o comando seq para gerar uma sequencia entre os ips

#!/bin/bash 
read -p 'digite o IP desejado(ex.: 10.13.1): ' ip
read -p 'digite o inicio do ultimo IP(ex.: 1): ' inicio
read -p 'digite o termino do IP(ex.:250 ): ' fim

for i in $(seq $inicio $fim) ; do
target="${ip%\.}.${i}"
echo "testando $target"
ping -c 2 $target
...
done
© 1999-2025 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal