Witam mam problem z zapetleniem czesci kodu.
Mianowicie pisze skrypt startowy do linuxa w ktorym mamy do wyboru kilka opcji dotyczacych nadawania adresu IP badz z serwera DHCP lub wpisanego recznie.
Problem polega na tym ze jezeli ades IP bedzie wartoscia nieprawdziwa (za duzo cyfr, oktety powyzej 255 itp) program ma sie zatrzymac i powrocic do wpisania ponownie zle wpisanego adresu ip.
Ponizej zamieszczam czesc kodu ktora odpowiada za reczne wpisanie adresu oraz procedure sprawdzajaca prawdziwosc IP.
# Start manual conf dla eth0
if ($wybor eq 4)
{
while(1)
{
# Pobierz adres IP dla interfejsu
print "Podaj adres IP: ";
$adres_ip = <STDIN>;
chomp $adres_ip;
if ($adres_ip) {
check_ip_addr();
}
# Pobranie Maski Podsieci
print "Podaj maske podsieci: ";
my $maska_podsieci = <STDIN>;
chomp $maska_podsieci;
check_ip_addr();
# podaj adres Bramy
print "Podaj adres bramy: ";
my $brama = <STDIN>;
chomp $brama;
check_ip_addr();
# Pobierz adres serwera DNS
print "Podaj adres primary DNS: ";
my $dns_1 = <STDIN>;
check_ip_addr();
print "Podaj adres secondary DNS: ";
my $dns_2 = <STDIN>;
check_ip_addr();
my $konfig = `/sbin/ifconfig eth0 $adres_ip $maska_podsieci`;
my $bramka = `/sbin/route add default gw $brama`;
# Dopisz adresy DNS do /etc/resolv.conf
my $plik = "/etc/resolv.conf";
open FILE, ">$plik" or die "Otwarcie pliku '$plik' do zapisu nie powiodlo sie: $! ";
print FILE "nameserver $dns_1";
print FILE "nameserver $dns_2";
close FILE;
}
}
# Wyjscie bez przypisanego ip
if(($wybor eq "x") || ($wybor eq "X")) {
exit(0);
}
else {
print("Illegal option! Try again!\n\n");
}
}
sub check_ip_addr
{
if ($adres_ip =~ /^(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)$/)
{
my @table = ($1, $2, $3, $4);
foreach $octect (@table)
{
if ($octect le 255)
{
last;
} else
{
print ("You write wrong IP ADDRESS\n");
}
}
}
else
{
print ("You write wrong IP ADDRESS\n");
}
}
pozdrawiam