Linux – Bash – skryptowanie w linii poleceń – cz 1.

Myślałem że coś tam wiem o używaniu Basha, niestety (a raczej stety 😉 ), przyjaciel z pracy  pokazał mi dzisiaj jak mało umiem ;). Problem do rozwiązania był prosty: należało sprawdzić adresy IP 20 serwerów. Stwierdziłem, że pisanie skryptu zajmie więcej czasu niż ręczne sprawdzenie ich przy pomocy komendy ‚host’. Cóż, rozwiązanie okazało się proste.

Na początek wpisujemy linie:

cat << EOF | while read SERVER; do HOST=$(host -t A $SERVER | gawk '{ print $4}'); echo "$SERVER;$HOST;"; done

i wciskamy ENTER. Następnie podajemy listę serwerów, które chcemy sprawdzić i kończymy ją linią zawierającą tylko EOF.

interia.pl
gazeta.pl
allegro.pl
linuxexpert.pl
EOF

Efekt jest następujący:

interia.pl;217.74.65.119;
gazeta.pl;80.252.0.145;
allegro.pl;193.23.48.134;
linuxexpert.pl;188.40.35.81;

A teraz wytłumaczenie co się dzieje.

1. cat << EOF | - powoduje iż wprowadzamy listę serwerów z standardowego wejścia i przy pomocy pipe (|) przekazujemy do następnego polecenia.

2. while read SERVER; do ...COS...; done - dane otrzymane z 1 przychodzą przez pipe. Każdą linię wkładamy do zmiennej SERVER i wykonujemy w pętli while.

3. pętla: HOST=$(host -t A $SERVER | gawk '{ print $4}'); echo "$SERVER;$HOST;"; - na każdej wartości zmiennej $SERVER wykonujemy polecenie host i wybieramy przy pomocy gawk czwartą kolumnę, następnie wstawiamy ją do zmiennej HOST.Na koniec przy pomocy 'echo' wyświetlamy nazwę serwera trzymaną w $SERVER razem z wartością zmiennej $HOST.

Idealne rozwiązanie do tworzenia raportów w EXEL-u ;).  Dzięki Piotr...

Dodaj komentarz