Peter Rosa wrote on 26. 2. 2019 16:36:

A jeste neco co se primo netyka volani funkci, ale toho scriptu jako takoveho ...

   hm=`ifconfig $iface | grep 'inet' | cut -d' ' -f4`

Problem 1 - tento grep ti vrati nejen radky "inet", ale i "inet6", se kterymi to nasledne nebude fungovat (maji jiny format). Ty tam chces mit grep 'inet ' (tedy s mezerou za inet).

Problem 2 - cely vyraz nefunguje dobre, pokud ma interface vice nez jednu inet adresu (takze radek 'inet ' je tam vice nez jeden) - pokdu ti staci prvni, tak staci pridat 'head -n 1', jinak je treba data zpracovavat v cyklu

Problem 3 - vyraz nefunguje dobre na interfacech typu POINTOPOINT interfacech jejichz 'inet' radek vypada takto:

inet 10.1.0.6 --> 10.1.0.1 netmask 0xffffffff

To uz chce trochu jiny pristup tak se k tomu vratim na konci.

Problem 4 - script nepocita s moznosti, ze interface nema inet adresu zadnou.

   hm=${hm:2:10}

Script mas deklarovan jako #!/bin/sh, ale uvedeny konstrukt je bashismus. V sh nic takoveho neexistuje a nebude ti to fungovat (sh: ${hm:2...}: Bad substitution). V sh budes muset pouzit neco jako

hm="${hm#0x}"


Ale ja bych vyresil tohle a soucasne problemy 1 a 3 najednou takto

hm = $( ifconfig vlan300 | sed -n 's/[[:blank:]]*inet .* netmask 0x\(.\{8\}\).*/\1/p' | head -n 1 )

To vraci hodnotu netmask bez ohledu na typ interface, vraci ji to pouze pro inet a ne inet6, vraci ji to bez uvodniho 0x ktere tam nechces

No, a pokud to ma fungovat i v pripade, ze je adres a masek na interface vic, tak vynechat 'head -n 1' a na viceradkovy vystup presmerovat do

while read MASK ; do
        hex2cidr "$MASK"
done


Dan


Dan
--
FreeBSD mailing list ([email protected])
http://www.freebsd.cz/listserv/listinfo/users-l

Odpovedet emailem