bash script & array

Miroslav BENES miroslav.benes na zdas.cz
Pondělí Leden 17 15:05:21 CET 2005


Přeji krásný den !

Pokouším se napsat jednoduchý skriptík v bash-i, ale nějak se mi nedaří. 
Prosím o nakopnutí kde dělám chybu. Manuál jsem si prošel, ale toto 
chování se mi zdá být v rozporu s logikou :

Skript:
------
#!/bin/bash

declare -a POKUS

POKUS[1]=Ahoj
POKUS[2]=tady
POKUS[3]=Lojza
POKUS[4]=jak
POKUS[5]=se
POKUS[6]=mas

for (( ID = 0 ; $ID <= 6 ; ID += 1 )) ; do
        echo ${POKUS[$ID]}
done

echo

echo "2" | while read ID; do
        echo "nacteno $ID"
        echo "pred zmenou : POKUS[$ID] = ${POKUS[$ID]}"
        POKUS[$ID]=XX
        echo "po zmene    : POKUS[$ID] = ${POKUS[$ID]}"
done

echo

for (( ID = 0 ; $ID <= 6 ; ID += 1 )) ; do
        echo ${POKUS[$ID]}
done



Výsledek:
------------
$ ~/bin/tt

Ahoj
tady
Lojza
jak
se
mas

nacteno 2
pred zmenou : POKUS[2] = tady
po zmene    : POKUS[2] = XX


Ahoj
tady
Lojza
jak
se
mas


Dotazy:
------
Mám to chápat tak, že se před každým cyklem udělají kopie polí, které 
jsou dostupné jen v tomto cyklu a po jeho skončení zanikají ?!?

A jak by se dal vyřešit problém "volné IP adresy" ? Pro upřesnění - 
původní záměr byl sledovat dlouhodobě "živé" adresy (z rozsahu 
192.168.něco.xxx). Tyto se střádají do souboru a dají se vypsat. Ale jak 
bych si mohl jednoduše z těchto údajů vygenerovat opačnou množinu - tj. 
nepoužité IP adresy ? Jako nejjednodušší (i když ne příliš optimální) se 
mi zdál tento postup :
 - udělám si pole o 256 prvcích
 - ziicializuji všechny prvky na 0
 - podle seznamu "živých" IP adres budu v poli nastavovat prvky na 1
 - vypíšu čísla prvků, která zůstala na 0

Díky předem za každý nápad.


Miroslav BENEŠ
System administrator
ŽĎAS a.s.



Další informace o konferenci Linux