Paraméter lista - állományból -- megoldva

Van nekem egy DFL-800 routerem,
amit soros porton (is) fel lehet okosítani
- ms-dos alól remekül megy, batch-script használatával.
Most a linuxos kiszolgálóról tenném ugyanezt,
ehhez kérek valami segítséget.

Van egy

geplista

állományom:


; megjegyzés sor
gepneve1  fix-ipcim1   mac-address1
gepneve2  fix-ipcim2   mac-address2

sorokkal

A működő batch script a következő:


rem ha nincs meghatározva, a default állomány a cél
set _alladdrout=CLI_txt/all-addr.txt
if "%1"=="" goto jump
rem de persze másnéven is elmenthetem az eredményt
set _alladdrout=%1

:jump
rem ha van ilyen állomány törlöm
if exist %_alladdrout% del %_alladdrout%

rem megjegyzés sor kiejtve
rem három paraméter érdekel a geplista-ból
rem vesszővel vagy szünettel elválasztva

FOR /F "eol=; tokens=1,2,3 delims=, " \
   %%i IN (geplista) DO add_lan_gep.bat \
      %_alladdrout% %%i %%j %%k

rem környezeti változó törlése
set _alladdrout=

Speciel a "FOR" kezdetű sor, bash-scriptes (perl nélküli) megvalósítása a problémám.

Cipelem én a saját köteg rőzsémet, csak nem szeretnék napestig az erdőben bolyongani - vagyis:
Sejtem, hogy for, csővezeték, grep, awk, talán function()\{} de valami biztosat szeretnék tudni.

:-)

Hozzászólások

Nem egeszen vilagos, hogy mit szeretnel. Az

add_lan_gep.bat

mit csinal? Milyen kell legyen a kimeno file formatuma?

Valami ilyenre gondolsz?

`awk '{if ( $1 !~ ";") { print "./add_lan_gep.bat",$1,$2,$3 } }' my.config`

Azt altalanos esetre valoszinuleg nem lehet megcsinalni (az awk nem adja vissza az input file nevet). Ha nem erdekes, akkor ird be az input file nevet az

add_lan_gep

utan:

...

/path/to/add_lan_gep geplista

...

Biztos nem akarod elarulni, hogy mit csinal az

add_lan_gep.bat

? Valoszinuleg szepen ossze lehetne vonni a kettot...

ezt csinálja:


# IP4 MAC ARP-stat egy gepre
# output gepnev ip4 mac
OUT=$1
GEP=$2
IPC=$3
MAC=$4

. add_ip4.sh $OUT $GEP $IPC $MAC
. add_eth.sh $OUT $GEP $IPC $MAC
. add_arps.sh $OUT $GEP $IPC $MAC lan
echo e >> $OUT

amit majd összevonok az a három kis script lesz - az elején másképp gondolkoztam.

O.K. ez az amit kívántam


CONFIG=geplista
if [ $# -ge 1 ]; then CONFIG=$1; fi
awk '{if(($1!~";")&&(NF==3)){ system( "./add_lan_gep.sh config.txt "$1" "$2" "$3 )} }' $CONFIG

és szép sorban kiíródik a

config.txt

-be az összes gép összes sora (fejenként három)


.
add Address IP4Address samsung Address=192.168.220.050
add Address EthernetAddress samsung_mac Address=00-40-01-xx-xx-xx 
add ARP Interface=lan IP=192.168.220.050 Mode=Static MACAddress=00-40-01-xx-xx-xx
e
add Address IP4Address stuka Address=192.168.220.049
add Address EthernetAddress stuka_mac Address=00-0d-88-xx-xx-xx 
add ARP Interface=lan IP=192.168.220.049 Mode=Static MACAddress=00-0d-88-xx-xx-xx
e
.

az "e" betű hülyén néz ki, de ez az üres soremelés a DFL-800 soros portján,
valahogy tagolni akartam a gépeket (mert így szebb)

Uraim, nagyon köszönöm, és nem felejtek el utána nézni a manuálokban annak amit kaptam.