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

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ą…