Esta resposta é para o Bash.
Você pode usar uma armadilha para isso. Este é um exemplo ilustrativo. Para continuar no loop, use Ctrl + c . Não há como parar o script, além de fechar o terminal ou matá-lo de outro terminal.
#!/bin/bash
trap ps SIGINT
for i in a b c d; do
for j in w x y z; do
echo ----$i$j------ && ping stackexchange.com -c 10
done
done
exit
Seu script será parecido com este (depois de algumas das minhas melhorias), mas observe que ele não foi testado:
#!/bin/bash
trap '' SIGINT
for ip in $(cat ip_list); do
mkdir $ip && cd $ip &&
for vuln in $(snmap http);do
nmap --script=$vuln $ip -oN $vuln
done &&
cd ..
done
As alterações que introduzi como &&
impedem a inserção de caminhos lógicos que podem levar a erros. Se possível, é mais seguro impor tais conflitos. Quando é colocado assim:
mkdir $ip; cd $ip;
se o diretório não puder ser criado, então cd
leva ao erro.
Quando você coloca desta forma:
mkdir $ip && cd $ip
se o diretório não tiver sido criado por algum motivo, não será tentada nenhuma cd
. Quando você mantém todos os comandos de mkdir $dir
a cd $dir
a cd ..
encadeados com &&
, a lógica é clara e a estrutura não dará errado. Quando você usa ;
e falha ao criar o diretório, não é possível inseri-lo, mas possivelmente não será possível alterar para ..
.