Bash dla każdego

Większość języków programowania ma jakoś zaimplementowane pętle for. Bash nie jest tu wyjątkiem, chociaż składnia jest po Bashowemu trochę udziwniona. Najpierw podam najprostszy przykład sprawdzający wielkość plików w katalogu:

for plik in `ls /home/lukasz/katalog` ; do du -h $plik ; done

Najpierw wymyślamy nazwę zmiennej, do której będziemy podstawiać kolejne wartości podawane przez ls, a potem wykonujemy du -h na każdej jednej z tych wartości. Sztuczka polega na tym, że lista ma być po prostu ciągami znaków oddzielonymi spacją, lub znakiem nowej linii. Może to być więc lista domen zapisana w pliku:

for linia in `cat domeny.txt` ; do echo $linia ; host $linia ; echo '------------------' ; done

Inny przykład: oglądanie plików hosts.

for i in `cat hosty` ; do echo $i; ssh -o PreferredAuthentications=publickey -o PasswordAuthentication=no -l lukasz $i "cat /etc/resolv.conf" ; echo '------------------' ;
done

Dzięki PrefferedAuthentications oraz PasswordAuthentication unikniemy zapytań o hasło i, nawet jeżeli nasza lista hostów będzie bardzo długa, możemy wrócić do komputera po minucie i sktypt zakończy działanie, informując gdzie nie mógł logować się po kluczu.