Você pode simplificar com algo assim:
for i in {1..253}; do
ping -c 1 192.168.0.$i >/dev/null;
if [ $? -ne 0 ]; then
echo "192.168.0.$i is unused";
break;
fi;
done
Eu preciso descobrir dinamicamente o primeiro endereço IP não utilizado em 192.168.0.0/24. Esta é uma pequena rede com um único switch, nenhum host executando qualquer serviço dns ou dhcp. Basicamente, cada host auto atribui um ip estático. Eu preciso de uma maneira (em um arquivo de kickstart RHEL - seção %post
) para descobrir o que é um endereço IP estático disponível e, em seguida, atribuí-lo a mim mesmo.
Isso é o que eu criei até agora:
#!/bin/bash
USED_ADDRESSES_ARRAY=()
for address in 'nmap -sT 192.168.0.0/24 | grep -B1 "Host is up" | grep 192 | awk '{print $5;}' | awk -F "." '{print $4;}''
do
USED_ADDRESSES_ARRAY+=($address)
done
ip_address_to_assign=0
for target_address in {1..253}
do
if [ $target_address -ne ${USED_ADDRESSES_ARRAY[$target_address - 1]} ]
then
ip_address_to_assign=$target_address
break
fi
done
echo $ip_address_to_assign
cat > /tmp/output.txt << EOF3
DEVICE="eth0"
'grep HWADDR /etc/sysconfig/network-scripts/ifcfg-em1'
IPV6INIT="no"
NM_CONTROLLED="yes"
ONBOOT="yes"
IPADDR=192.168.0.$ip_address_to_assign
NETMASK=255.255.255.0
GATEWAY=192.168.0.254"
EOF3
cat /tmp/output.txt
Quando eu gosto do que tenho, altero as referências de /tmp/output.txt
para apontar para ifcfg-eth0
e solto na seção %post
do ks.cfg.
Tags networking linux