sub usage(); ## prototype of usage() function usage() if (! GetOptions( .... )) usage() if ($usage);
Archiwum kategorii: Programowanie
Awk – język do zadań tekstowych
Usunięcie powtórzeń z z listy
Jeżeli mamy posortowaną listę (lub chcemy ją posortować) w jakimś pliku (albo przekażemy ją ze strumienia) możemy w łatwy sposób pozbyć się powtórzeń:
cat przenosiny3.txt | awk 'BEGIN { tmp=""} {if (tmp != $0) print $0; tmp=$0}' > przenosiny4.txt
Opis skryptu: Skrypt jest prosty, tworzymy na początku zmienną tmp która jest pusta. Przy analizie każdego wiersza sprawdzamy, czy zmienna tmp nie jest równa wartości $1, jeżeli nie jest równa, wyświetla ją. Analizę każdego wiersza kończy podstawienie do zmiennej tmp wartości bierzącego wiersza.
Bash i zmienne środowiskowe
Dzisiaj bardzo krótka notatka. Zmienne środowiskowe są potężnym sposobem na współdzielenie konfiguracji między skryptami i programami napisanymi w różnych językach. Krok pierwszy jest wspólny dla wszystkich języków i polega na wyeskportowaniu zmiennej środowiskowej. Na przykład wpis poniżej umieszczamy w pliku .bashrc (jeżeli używamy akurat Bash-a):
EXPORT SOFTA_USER="USER1"
Krok drugi to skorzystanie z zmiennej w skrypcie. W przypadku Bash-a to po prostu użycie zmiennej:
user@ubuntu: head -n 3 helper_softa.sh #/bin/bash USER=$SOFTA_USER
Jak widać to proste, jutro napisze jak skorzystać z takich zmiennych w Perl-u.
Linux i Bash – historia poleceń z datą wykonania
W Bash-u mamy zmienną HISTTIMEFORMAT, jeżeli jest pusta to żadna data nie jest logowana, jeżeli natomiast jest różna od pustej (NULL),
to przed każdą komendą w pliku history pojawia się data w określonym formacie (sprawdź opis strftime). Przykładowo:
export HISTTIMEFORMAT="%Y/%m/%d (%A) - %H:%M:%S "
Co daje efekt następujący:
$ history | tail -n 2 508 2010/10/12 (wtorek) - 19:48:24 clear 509 2010/10/12 (wtorek) - 19:48:36 history | tail -n 2
Warto też zwiększyć domyślą wielkość pliku history, standardowo zapisywane są w nim tylko ostatnie 500 komend:
export HISTFILESIZE=3000
Bash – zamiast dużej ilości echo
Każdy skrypt potrzebuje jakieś funkcji opisującej działanie skryptu. Przeważnie umieszczamy w niej dużo echo aby wyświetlić linie z informacjami. Jest jednak inna możliwość, użycie cat i EOF (albo innego znacznika, ważne ze określa początek i koniec tekstu, zwyczajowo jest to EOF – End Of File). Przykład:
function usage() { cat << EOF usage: $0 options description of option 1 - default: $DEFAULT1 It is nice way to create easy long description... EOF }
Bash – pobieranie opcji z linii poleceń, wersja 2 czyli getopts
W jednym z poprzednich wpisów pokazałem metodę analizy podanych parametrów przez analizę kolejnych wartości zmiennych $1 itd.
Teraz przyjrzymy się kolejnej metodzie, korzystającej z wbudowanej w Basha funkcji getopts.
Czytaj dalej Bash – pobieranie opcji z linii poleceń, wersja 2 czyli getopts
Bash: liczby losowe
W zmiennej RANDOM Bash trzyma zmienną z zakresu 0-32767:
$echo $RANDOM 17152 $ echo $RANDOM 15361
Jeżeli chcemy uzyskać wartość z zakresu 0 jakaś liczba, np. 100, musimy zastosować drobne sztuczki:
$ let R=$RANDOM%100; echo $R 90 $ let R=$RANDOM%100; echo $R 16
Jeżeli natomiast chcemy liczbę z zakresu np. 20 – 120 musimy wylosować liczbę z z zakresu 0-100 i dodać do niej dolną granicę czyli 20:
$ let R=$RANDOM%100+20; echo $R 98 $ let R=$RANDOM%100+20; echo $R 117
Bash – działania arytmetyczne w powłoce na przykładzie dodawania ;)
W przypadku powłowki nie możemy po prostu napisać 1+1 gdyż powłoka potraktuje to jako napis:
$ echo 1+1 1+1
Niezależnie czy użyjemy spacji czy nie:
$ echo 1 + 1 1 + 1
Natomiast w tym przypadku należy skorzystać z polecenia expr:
$ echo `expr 1 + 1` 2
Należy jednak pamietać o spacjach ;):
$ echo `expr 1+1` 1+1
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.
Czytaj dalej Linux – Bash – skryptowanie w linii poleceń – cz 1.
Perl – sprawdzanie poprawności argumentów podanych do skryptu
Jednym z podstawowych problemów jest walidacja danych podanych przez użytkownika do skryptu. Walidacji powinny być podane nawet opcje wywołania skryptów. Czyli powinniśmy prawdzić, czy faktycznie dana opcja, której użył użytkownik istnieje. Mój sposób na to jest prosty:
sub usage(); ## prototype of usage() function usage() if (! GetOptions( …. )) usage() if ($usage);
ps. tak, stworzyłem podstronę Sztuczki -> Perl, na której będę podsumowywał moje nalepsze praktyki ;). Nie jestem ekspertem ale ma to mi pozwolić lepiej zarządzać moją wiedzą…