Criar lista de seleção a partir de um arquivo de texto [RESOLVIDO]

1. Criar lista de seleção a partir de um arquivo de texto [RESOLVIDO]

Cledson Medeiros
cledsonmedeiros

(usa Kali)

Enviado em 23/01/2018 - 23:10h

Olá, estou iniciando nesse mundo do shell script e estou empacado em uma parte... Estou criando um script que faz um scan de hosts ativos na rede em que estou conectado. A princípio, estou querendo listar apenas os endereços de ip. Segue o script abaixo:

echo
echo "Escaneando escopo da rede..."
echo

IP=$(ip route | awk '/default/ { print $3 }')
MASK=$(ip route | sed -n "2p" | cut -f2 -d"/" | head -c 2)

echo -e "Escopo da rede: $red $IP$blue/$MASK $transparent"
POT=$((32 - $MASK))
IP_NUMBER=$(((2 ** $POT) - 1 ))
echo -e "Número de IP's possíveis: $red$IP_NUMBER$transparent"
echo

echo "Procurando hosts ativos... Aguarde o término do scan."
echo
SCAN=$(nmap -sP $IP-$IP_NUMBER | grep "Nmap scan report" | awk -F " " '{print $5}' | tee /root/.temp.txt)
echo -n "$SCAN"
echo
echo
HOSTS_UP=$(cat /root/.temp.txt | wc -l)
echo "Hosts ativos: $HOSTS_UP"

*FIM*

O script detecta o ip do gateway e máscara de rede, o número de ip's possíveis em relação a máscara de rede, os ip's que estão online e o número de ip's detectados.

Como vocês podem ver, eu armazenei um um arquivo chamado ".temp.txt" onde os ip's ficam armazenados. por exemplo:
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4

Eu gostaria de alguma ideia pra criar uma lista de seleção que ficasse da seguinte maneira:

Selecione o IP:
[1] 192.168.0.1
[2] 192.168.0.2
[3] 192.168.0.3
[4] 192.168.0.4

e que eu selecionasse o IP apertando o número da lista e armazenasse o mesmo em uma variável, por exemplo: apertando 1 o IP escolhido seria 192.168.0.1

Pesquisei bastante mas não consegui fazer como queria. Alguém poderia me ajudar?

PS: este é meu primeiro post, desculpe se fiz algo errado.



  


2. MELHOR RESPOSTA

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 24/01/2018 - 00:27h

#!/bin/bash

cat -n lista-ip.txt
read -p "Escolha uma opção: " nlinha
selecionado=`sed "$nlinha !d" lista-ip.txt`
echo "O ip escolhido foi: $selecionado"


$ bash scripteste.sh 
1 192.168.0.1
2 192.168.0.2
3 192.168.0.3
4 192.168.0.4
Escolha uma opção: 2
O ip escolhido foi: 192.168.0.2


3. Re: Criar lista de seleção a partir de um arquivo de texto [RESOLVIDO]

Cledson Medeiros
cledsonmedeiros

(usa Kali)

Enviado em 24/01/2018 - 00:57h

Ryuk escreveu:

#!/bin/bash

cat -n lista-ip.txt
read -p "Escolha uma opção: " nlinha
selecionado=`sed "$nlinha !d" lista-ip.txt`
echo "O ip escolhido foi: $selecionado"


$ bash scripteste.sh 
1 192.168.0.1
2 192.168.0.2
3 192.168.0.3
4 192.168.0.4
Escolha uma opção: 2
O ip escolhido foi: 192.168.0.2


Funcionou perfeitamente. muitíssimo obrigado! Poderia me explicar o funcionamento?



4. Re: Criar lista de seleção a partir de um arquivo de texto [RESOLVIDO]

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 24/01/2018 - 10:45h

cledsonmedeiros escreveu:

Ryuk escreveu:

#!/bin/bash

cat -n lista-ip.txt
read -p "Escolha uma opção: " nlinha
selecionado=`sed "$nlinha !d" lista-ip.txt`
echo "O ip escolhido foi: $selecionado"



Funcionou perfeitamente. muitíssimo obrigado! Poderia me explicar o funcionamento?


"cat -n ..." mostra o conteúdo do arquivo juntamente com o número das linhas;
"read -p ..." pega a opção digitada e guarda na variável "nlinha";
"selecionado=`sed "$nlinha !d" lista-ip.txt`" essa variável usa o número da linha (nlinha) para mostra o conteúdo dela com o comando sed;
"echo ... $selecionado" exibe o conteúdo da variável.



5. Re: Criar lista de seleção a partir de um arquivo de texto [RESOLVIDO]

Cledson Medeiros
cledsonmedeiros

(usa Kali)

Enviado em 27/01/2018 - 20:40h

Ryuk escreveu:

cledsonmedeiros escreveu:

Ryuk escreveu:

#!/bin/bash

cat -n lista-ip.txt
read -p "Escolha uma opção: " nlinha
selecionado=`sed "$nlinha !d" lista-ip.txt`
echo "O ip escolhido foi: $selecionado"



Funcionou perfeitamente. muitíssimo obrigado! Poderia me explicar o funcionamento?


"cat -n ..." mostra o conteúdo do arquivo juntamente com o número das linhas;
"read -p ..." pega a opção digitada e guarda na variável "nlinha";
"selecionado=`sed "$nlinha !d" lista-ip.txt`" essa variável usa o número da linha (nlinha) para mostra o conteúdo dela com o comando sed;
"echo ... $selecionado" exibe o conteúdo da variável.


Obrigado!!!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts