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...