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.
:-)
- 1055 megtekintés
Hozzászólások
Nem egeszen vilagos, hogy mit szeretnel. Az
add_lan_gep.bat
mit csinal? Milyen kell legyen a kimeno file formatuma?
- A hozzászóláshoz be kell jelentkezni
Azt szeretném, hogy az
add_lan_gep.bat
helyébe lépő (már működő) scriptem annyiszor lefusson, ahány paraméter sor van a
geplista
-ban és megkapja belőle a paramétereket.
- A hozzászóláshoz be kell jelentkezni
Valami ilyenre gondolsz?
`awk '{if ( $1 !~ ";") { print "./add_lan_gep.bat",$1,$2,$3 } }' my.config`
- A hozzászóláshoz be kell jelentkezni
Akkor mar:
awk 'BEGIN { FS="[ \t,]+" } $1 !~ /^[;#]/ { system ("/path/to/add_lan_gep \"" $1 "\" \"" $2 "\" \"" $3 "\"") }' geplista
- A hozzászóláshoz be kell jelentkezni
ez is jó, csak muszáj vele küzdeni, hogy azt csinálja amit én akarok, mert a $1 elé be kell raknom az eredmény-file nevét.
- A hozzászóláshoz be kell jelentkezni
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...
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Ezt a verziót ki is próbáltam már :-)
CONFIG=geplista
if [ $# -ge 1 ]; then CONFIG=$1; fi
awk '{if(($1!~";")&&(NF==3)){ system( "./add_lan_gep.bat "$1" "$2" "$3 )} }' $CONFIG
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
ok működik, utána az "eredményt" végre lehet hajtani
- A hozzászóláshoz be kell jelentkezni