Podstawy Programowania w powloce bash; wersja 1.1.1
Strona 1 z 21
Podstawy programowania w powloce bash
Autor: Robert Szczepaniak
e-mail:
robert.szczepaniak@oeiizk.waw.pl
;
bobik@oeiizk.waw.pl
WWW:
http://ww.oeiizk.waw.pl/~bobik/linux/
Wersja: 1.1.1
Ostatnia aktualizacja: 19.01.2004
Lista zmian w dokumencie od wersji 1.0:
Wersja: 1.1
12.01.2004
§ Dopisano informacje o poleceniu exit.
§ Uzupelnienie listy Innych ciekawych polecen i programów o: wc
i head.
§ Poprawienie kilku formatowan tekstu.
§ Dopisalem takze kilka informacji o uzyciu awk
§ Dopisalem jeszcze w „sekcji zmienne specjalne i parametry” opis
jeszcze jednej zmiennej.
Wersja 1.1.1
19.01.2004
§ Poprawilem komunikaty wyswietlane dla przykladowego skryptu
pokazujacego dzialania instrukcji case – wkradl sie niewielki blad
niemajacy wiekszego znaczenia.
§ Uzupelnienie listy Innych ciekawych polecen i programów o: sed.
§ Zamiescilem takze linki do stron opisujacych sed i awk – referat
Wojciecha Czecha.
Od autora
Dokument ten zapewne nie jest idealny i bedzie podlegal dalszemu rozwojowi. Jezeli
uwazasz, ze mozna go uzupelnic o inne wazne i mniej wazne informacje to napisz do mnie.
Jezeli znalazles w dokumencie bledy to bardzo za nie przepraszam i jak najszybciej
poinformuj mnie o tym, za co bede Ci wdzieczny.
Wstep
Dokument ten jest wprowadzeniem do programowania w powloce
bash
systemu Linux. Jego
uzupelnieniem zapewne jest dokumentacja polecen systemu Linux – bez niej nie uda Ci sie
napisac skryptu, który bedzie wykonywal za Ciebie okreslone zadania.
Dlaczego warto programowac w powloce
bash
:
§ Latwy sposób na automatyzacje zadan systemu Linux (w polaczeniu z demonem
cron
).
§ Mozliwosc szybkiego napisania zaawansowanych programów bez uzycia kompilatora
i bibliotek.
Niestety programy pisane w powloce maja takze swoje wady. Jedna z najwiekszych wad
skryptów powlok jest fakt, ze sa one malo wydajne, co wynika z tego, ze kod jest
interpretowany, a nastepnie dopiero wykonywany, a nie jak w przypadku programów
binarnych od razu wykonywany. Inna dosc duza wada skryptów jest to, ze kazdy, kto ma
prawo wykonywania moze (powinien miec nadane prawo czytania skryptu) przejrzec jego
zawartosc, co moze spowodowac potencjalna dziure w systemie czy naruszenie praw
autorskich.
Podstawy Programowania w powloce bash; wersja 1.1.1
Strona 2 z 21
Powloka bash
Powloka
bash
jest jedna z wielu dostepnych powlok systemu Linux. Strona domowa projektu
znajduje sie pod adresem
http://www.gnu.org/software/bash/bash.html
. Tam takze znajdziesz
przewodnik po korzystaniu z powloki.
Powloka
bash
jest polaczeniem funkcjonalnosci kilku innych powlok, które dostepne sa
w systemie Linux i jest chyba najpopularniejsza ze wszystkich dostepnych wsród
uzytkowników tego systemu.
Co to jest skrypt?
W systemie Linux uzywa sie pojecia skrypt do plików wykonywalnych (posiadajacych prawo
x) tekstowych, których zawartoscia jest zbiór polecen systemu Linux i powloki, w której
skrypt jest napisany. Tak, wiec skrypt jest programem, którego interpreterem jest powloka,
dla której zostal napisany. W skrypcie mozesz uzywac wszystkich dostepnych w powloce jak
i w wierszu polecen wlasnosci, np.: uzywanie masek do plików czy uzywanie znaku srednika.
Do utworzenia skryptu potrzebny bedzie Ci najprostszy edytor tekstowy systemu UNIX /
Linux.
Uruchamianie skryptów
Aby uruchomic napisany skrypt nalezy zmienic mu prawa do pliku (nadac prawo x),
a nastepnie w wierszu polecen napisac jego nazwe i zatwierdzic klawiszem [ENTER]. O tej
pory Twój skrypt bedzie jak polecenie systemu Linux. Jesli Twój skrypt ma sluzyc innym
uzytkownikom systemu to pamietaj, ze podczas nadawania praw bedziesz musial odebrac
innym uzytkownikom systemu prawa zapisu, a nadac prawo odczytywania i wykonywania.
Istnieje takze mozliwosc uruchamiania skryptu poprzez dodatkowa powloke np.:
$ bash nazwaSkryptu
Spowoduje uruchomienie nowej powloki bash, a nastepnie uruchomienie skryptu.
Pamietaj, ze jesli bedziesz wydawal polecenia w systemie Linux to nalezy uzywac sciezek
dostepu do plików (jesli katalog nie znajduje sie na sciezce przeszukiwan).
Twój skrypt moze byc takze czescia polecenia zawierajacego przekazywanie danych poprzez
potoki (z uzyciem
grep
czy znaków przekierowania > oraz >>). Tak, wiec projektujac swój
skrypt mozesz uwzglednic, ze w przys zlosci moze on byc wykorzystany jako czesc polecenia
systemu Linux.
Zakonczenie pracy skryptu
Skrypt powloki zakonczy sie po dojsciu do ostatniego wiersza skryptu. Tak jak kazdy
program powloki konczy sie numerem bledu (0 – brak bledu, 1 – wystapil blad lub inny
okreslony przez autora programu) tak i skrypt powloki moze przekazac informacje
o zakonczeniu swojego dzialania bez bledu lub przekazac do srodowiska blad. Jezeli nie jasno
nie okresliles numeru bledu, z jakim skrypt sie konczy zostanie przyjety numer bledu ostatnio
wykonanego polecenia.
Okreslenie numeru bledu odbywa sie po wydaniu polecenia
exit NUMER
gdzie
NUMER
jest
wartoscia calkowita okreslajaca kod zwracany do srodowiska np.:
# !/bin/bash
exit 0
Powyzszy skrypt zakonczy dzialanie i zwróci do powloki numer bledu = 0 (zero).
Podstawy Programowania w powloce bash; wersja 1.1.1
Strona 3 z 21
Stosowanie kodów powrotów umozliwia laczenie skryptów i programów w calosc tak, aby
mozna bylo podczas ich wykonywania analizowac zakonczenie dzialania ostatniego skryptu
lub programu.
O przekierowaniu wyjscia
W powloce bash istnieje mozliwosc zmiany standardowego wyjscia na inne. Skrypt dla
powloki powinien byc tak napisany, aby mozna bylo go wywolac w innym skrypcie, a jego
wynik przeniesc jako wejscie danych do innego skryptu.
Znak „>”
Przekierowanie wyniku dzialania na wejscie do innego skryptu lub pliku. Jezeli
Przekierowanie danych nastepuje do pliku wtedy zostanie on utworzony. W przypadku, gdy
plik istnieje w systemie plików to zostanie on nadpisany i utworzony zostanie nowy plik
$ ls –l > ./pliki.txt
W wyniku dzialania tego polecenia w biezacym katalogu zostanie utworzony plik plik.txt
którego zawartoscia bedzie wynik dzialania polecenia ls z parametrem –l.
Podczas wykorzystywania znaku > mozna takze przekierowac standardowe wyjscie bledów.
Wtedy nalezy poprzedzic znak ten cyfra 2 (domyslne wyjscie jest pod numerem 1 i nie trzeba
tego zaznaczac).
$ cd /home/jakis_uzytkownik/ala_ma_kota 2> ./komunikat.bledu.txt
Jezeli nie istnieje katalog
/home/jakis_uzytkownik/ala_ma_kota
to w biezacym katalogu
zostanie utworzony plik komunikat.bledu.txt zawierajacy komunikat o bledzie.
W przeciwnym wypadku
zostanie zmieniony
biezacy katalog na
/home/jakis_uzytkownik/ala_ma_kota
.
Jezeli chcesz, aby podczas dzialania skryptu nie wyswietlac ewentualnych komunikatów
o bledach to bedziesz musial przekierowac wyniki bledów do urzadzenia
/dev/null
np.:
$ cat /etc 2> /dev/null
Nie zostanie wyswietlony zaden komunikat o bledzie.
Znak „>>”
Takie przekierowanie spowoduje zapisanie na koncu pliku wyniku. Jezeli plik nie istnieje
to zostanie on utworzony i wynik dzialania bedzie identyczny jak dla znaku >.
$ ls –l > ./pliki.txt
$ dir >> ./plik.txt
W tym przykladzie zostanie utworzony na nowo plik pliki.txt zawierajacy wynik polecenia
ls – l , na nastepnie ponownie zostanie do niego dopisane (na koncu) zawartosc polecenia
dir
.
Podstawy Programowania w powloce bash; wersja 1.1.1
Strona 4 z 21
Zanim zaczniesz
Skrypt powloki systemu powinien zawierac w pierwszym wierszu pelna sciezke
do interpretera (programu powloki), dla którego ten skrypt jest napisany. Jak juz wczesniej
napisalem powloki róznia sie miedzy soba, a nie podanie interpretera wymusi na systemie
uzycie standardowego. W efekcie skrypt moze nie dzialac prawidlowo. Definicja ta powinna
byc zawarta w pierwszym wierszu kazdego skryptu i powinna (dla powloki
bash
) wygladac
nastepujaco:
# !/bin/bash
Wskazuje na powloke
bash
, która jest zainstalowana (plik binarny powloki znajduje sie)
w katalogu
/bin
.
Inna bardzo wazna rzecza podczas pisania skryptów w powloce jest uzywanie sciezek dostepu
do plików i programów. Polecenia powloki nie wymagaja podawania pelnej sciezki dostepu
zas, jesli bedziesz wykorzystywal programy (polecenia) systemu Linux zalecane jest abys
stosowal pelne sciezki dostepu do plików.
Jesli nie chcesz stosowac sciezek dostepu to bedziesz musial zmodyfikowac zmienna
systemowa
PATH
o katalog, w którym znajduja sie uzywane przez Ciebie polecenia.
Pamietaj takze, ze system UNIX/Linux ma inny znak przejscia do nowego wiersza, a zatem
plików tekstowych systemu nie bedziesz mógl edytowac w systemie DOS / Windows. Jesli
koniecznie chcesz tworzyc pliki w jednym z wymienionych systemów to bedziesz musial sie
zaopatrzyc w odpowiedni program, który bedzie konwertowal znaki przejscia do nowej linii
tak, aby byly zgodne z system UNIX/Linux. Nie skonwertowanie moze spowodowac bledy
podczas wyswietlania lub interpretowania pliku.
W skryptach mozna takze umieszczac komentarze. Zalecam Ci stosowanie jak najwiekszej
liczby komentarzy, bo dzieki nim bedziesz mógl w szybki i latwy sposób odnalezc
w przyszlosci poszukiwany fragment kodu i go zmodyfikowac.
Wszystko, co jest napisane po znaku hash (
#)
jest pomijane przez interpreter i mozna wtedy
napisac kazdy dowolny ciag znaków.
# !/bin/bash
# to jest jakis komentarz zapisany w skrypcie
# wiersze te w ogóle nie beda przetwarzane przez powloke
# a zatem mozesz tu wpisac cokolwiek
Wyjatkiem od reguly jest pierwszy wiersz kazdego skryptu, który jest sprawdzany
i w przypadku znalezienia sekwencji informujacej o powloce jest odczytywany
i przetwarzany.
Zmienne w skryptach
Tak jak kazdy prawdziwy program tak skrypty powloki moga zawierac zmienne. Powloka
bash nie jest srodowiskiem mocnych typów tak, wiec jezeli w jednej chwili zmienna zawiera
ciag znaków to za chwile mozesz w niej przechowywac wartosci liczbowe. Niestety
w skryptach powloki nie mozna deklarowac klas – powloka bash nie jest srodowiskiem
programowania obiektowego.
W powlokach jak i w calym systemie UNIX / Linux rozrózniane sa duze i male litery tak,
wiec zmienna
Ala
jest inna niz zmienna
ALA
i mozna im przypisac rózne wartosci.
Podczas pisania skryptów powloki mozesz takze wykorzystac zmienne zadeklarowane
srodowiskowe jak i systemowe np.: wyglad znaku zgloszenia, zmienna definiujaca katalog
Podstawy Programowania w powloce bash; wersja 1.1.1
Strona 5 z 21
domowy uzytkownika, który wywolal skrypt czy zmienna zawierajaca login biezacego
uzytkownika Zmiennych tych jest bardzo wiele. Liste wszystkich zmiennych
srodowiskowych uzyskasz po wydaniu polecenia
set
w wierszu polecen.
Deklaracja zmiennych w powloce i przypisanie im wartosci
W powloce nie trzeba deklarowac zmiennych (jak to jest np.: w jezyku Pascal, czy C).
Zmienna tworzona jest w momencie przypisania wartosci do jakiejs zmiennej. Przypisanie
wartosci odbywa sie po znaku równosci np.:
# !/bin/bash
sciezkaDostepu=/usr/local
Utworzona zostanie zmienna
sciezkaDostepu
, której wartoscia bedzie
/usr/local
.
Jezeli podczas tworzenia nie podasz wartosci dla zmiennej (nic nie
wpiszesz po znaku przypisania ) to zmiennej zostanie przypisana wartosc
pustego ciagu.
Podczas tworzenia zmiennych mozesz uzyc klauzuli
readonly,
która spowoduje, ze zmienna
bedzie stala. Od momentu zadeklarowania jej jako tylko do czytania nie bedziesz mógl jej
zmodyfikowac ani usunac. Tak zadeklarowana zmienna pozostanie, az biezaca powloka nie
przestanie istniec wraz z calym srodowiskiem np.:
# !/bin/bash
readonly sciezkaDostepu=/usr/local
sciezkaDostepu=/usr/local/bin
Powyzszy skrypt wyswietli na ekranie komunikat o bledzie, ze zmienna
siciezkaDostepu
jest
zmienna tylko do odczytu
bash: sciezkaDostepu: readonly variable
Odwolywanie sie do zmiennych
Aby odwolac sie do zmiennej utworzonej wczesniej nalezy jej nazwe poprzedzic znakiem
dolara ($) np.:
# !/bin/bash
sciezkaDostepu=/usr/local
echo $sciezkaDostepu
Skrypt ten spowoduje wyswietlenie na standardowym wyjsciu (konsoli) zawartosci zmiennej
sciezkaDostepu
.
Tworzenie zmiennych
# !/bin/bash
Podstawy Programowania w powloce bash; wersja 1.1.1
Strona 6 z 21
zmienna1=Ala
zmienna2=” ma kota”
zmienna3=$zmienna1$zmienna2
echo $zmienna3
Wynikiem tego jest utworzenie zmiennej
zmienna3
, której zawartoscia jest ciag znaków
Ala
ma kota
. Jak widzisz podczas podawania wartosci (dotyczy to tylko ciagów znaków) mozesz
uzywac znaku cudzyslowie, aby móc wlaczyc znak spacji.
Podczas przypisywania wartosci pomiedzy znakiem równosci mozesz wstawic znak spacji.
Przy tworzeniu zmiennej z innych zmiennych mozesz takze uzyc znaków nawiasów
klamrowych (
{}
) tak aby oddzielic nazwe zmiennej od innego ciagu znaków np.:
# !/bin/bash
zmienna1=Ala
zmienna2=” ma kota ”
zmienna3=$zmienna1${zmienna2}michotka
Efektem tego skryptu bedzie utworzenie zmiennej
zmienna3
o wartosci
Ala ma kota
michotka
. Zmienna
zmienna3
zostanie wyswietlona na ekranie. Zwróc uwage, ze slowo
michotka
zostalo dopisane zaraz za nazwa zmiennej
zmienna2
.
Do tworzenia zmiennych mozesz takze zastosowac nazwy innych zmiennych znakowych
ujmujac je w znaki cudzyslowie np.:
# !/bin/bash
zmienna1=Ala
zmienna2=” ma kota,”
zmienna3=”a kot ma Ale”
zmienna4=”${zmienna1}${zmienna2} ${zmienna3}”
W efekcie zmienna
zmienna4
bedzie miala wartosc:
Ala ma kota, a kot ma Ale
.
Jezeli w nazwie zmiennej chcesz uzyc znaku dolara ($) lub po prostu nie chcesz podstawiac
nazwy zmiennej to bedziesz musial uzyc znaku apostrofu, np.:
# !/bin/bash
zmienna1=Ala
zmienna2=” ma kota”
zmienna3=’$zmienna1${zmienna2}’
echo $zmienna3
Na ekranie zostanie wyswietlony napis:
$zmienna1${zmienna2}.
Zauwaz na znaku apostrofów, w które ujety jest tekst tworzacy zmienna
zmienna3
. W efekcie
zmienna
zmienna3
bedzie miala wartosc
$zmienna1${zmienna2}
. Róznica w zastosowaniu
znaków apostrof jak i cudzyslów jest takze uzywana w takich jezykach jak np.: PHP.
Innym dosc ciekawym sposobem tworzenia zmiennej jest poprzez podstawienia wyniku
dzialania jakiegos polecenia np.:
# !/bin/bash
Podstawy Programowania w powloce bash; wersja 1.1.1
Strona 7 z 21
zmienna1=`ls /dev/ttyS*`
zmienna2=`ls /dev/tty?`
zmienna3=’$zmienna1 $zmienna2’
echo $zmienna3
Zauwaz na znaki uzyte do tworzenia zmiennych
zmienna1
oraz
zmienna2
. W wyniku
powyzszego kodu zmienna
zmienna1
bedzie zawierala biezaca liste wszystkich urzadzen,
których nazwa rozpoczyna sie od znaków
ttyS
oraz
zmienna2
bedzie zawierala liste
wszystkich urzadzen które maja dlugosc czterech znaków i pierwsze trzy znaki równe sa
tty
.
Zmienna
zmienna3
bedzie polaczeniem dwóch zmiennych
zmienna1
oraz
zmienna2
. Znaki,
w których ujete jest polecenie nazywane sa znakami akcentowania i mozna ich uzywac takze
w wierszu polecen.
W efekcie dzialania skryptu zostana wyswietlona wszystkie pliki urzadzen z katalogu
/dev
,
które spelniaja nastepujace warunki: zaczynaja sie od znaków
ttyS
oraz zaczynaja sie od
znaków
tty
i maja dlugosc czterech znaków.
Mozesz takze zliczyc ilosc znaków w zmiennej wstawiajac znak hash (#) tuz przed nazwa
zmiennej, a po znaku dolara ($) np.:
# !/bin/bash
zmienna1=Ala
zmienna2=” ma kota”
zmienna3=’$zmienna1${zmienna2}’
echo ${#zmienna3}
Zwróci na ekran liczbe znaków w zmiennej
zmienna3
– liczbe 20.
Usuwanie zmiennych
Jezeli chcesz calkowicie usunac zmienna to musisz jej nazwe podac jako parametr polecenia unset
np.:
# !/bin/bash
Zmienna=”Ala ma kota”
echo $Zmienna
unset Zmienna
echo $Zmienna
Powyzszy skrypt utworzy zmienna
Zmienna
, a nastepnie przypisze jej wartosc
Ala ma kota
,
nastepnie wyswietli na ekranie napis
Ala ma kota
, usunie zmienna i wyswietli na ekranie
pusty wiersz.
Odwolanie sie do zmiennej, która nie istnieje powoduje zwrócenie
Podstawy Programowania w powloce bash; wersja 1.1.1
Strona 8 z 21
pustego ciagu znaków.
Zmienne tablicowe
W powloce mozesz takze uzywac jednowymiarowych zmiennyc h tablicowych. Wielkosc
tablicy to okolo 500 elementów. Aby dowiedziec sie ile obecnie mozesz przechowywac
elementów w tablicy – zajrzyj na strony podrecznika elektronicznego
man
powloki
bash
.
Utworzenie zmiennej tablicowej:
# !/bin/bash
imie[0]=”Ala”
imie[1]=”Ania”
imie[2]=”Wioletta”
imie[3]=”Kasia”
imie[4]=”Ewa”
Spowoduje utworzenie tablicy o nazwie
imie
, której elementami beda imiona
: Ala, Ania,
Kasia i Ewa
.
Podczas tworzenia zmiennych tablicowych mozesz takze uzyc klauzuli
readonly
po to, aby
nie byla ona modyfikowana.
Aby odwolac sie do elementu tablicy musisz ujac nazwe tablicy oraz indeks tablicy w nawias
klamrowy np.:
# !/bin/bash
imie[0]=”Ala”
imie[1]=”Ania”
imie[2]=”Wioletta”
imie[3]=”Kasia”
imie[4]=”Ewa”
echo ${imie[4]}
Wyswietli na ekranie imie z piatej pozycji w tablicy imie:
Ewa
.
Numeracja elementów w tablicy nie musi odbywac sie kolejno od 0
wzwyz. Jesli przyjmiesz inny krok lub w ogóle bedziesz
chaotycznie nadawal numery elementom w tablicy to takze ona
bedzie utworzona. Musisz jedynie wiedziec, ze odwolanie sie do
elementu tablicy, który nie istnieje zwróci wartosc pusta
(w przeciwienstwie do niektórych jezyków programowania, które
zglaszaja bledy).
Numeracja elementów w tablicy musi odbywac sie wartosciami liczb
calkowitych.
Podstawy Programowania w powloce bash; wersja 1.1.1
Strona 9 z 21
Jezeli podczas odwolywania sie nie podasz numeru elementu
tablicy zostanie przyjety element o numerze zero. Jesli nie isnieje to
zostanie zwrócony pusty ciag.
Jezeli chcesz wyswietlic wszystkie elementy tablicy to zamiast numeru indeksu musisz uzyc
znaku gwiazdki (
*
) lub znaku at (
@
)np.:
# !/bin/bash
imie[0]=”Ala”
imie[1]=”Ania”
imie[2]=”Wioletta”
imie[3]=”Kasia”
imie[4]=”Ewa”
echo ${imie[*]}
W efekcie tego skryptu na ekranie zostana wyswietlone wszystkie elementy tablicy
rozdzielone, co najmniej jedna spacja.
Elementy tablicy sa zwyklymi zmiennymi tak, wiec mozesz stosowac technike zliczenia ilosci
znaków w elemencie tablicy tak jak dla zwyklych zmiennych np.:
# !/bin/bash
imie[0]=”Ala”
imie[1]=”Ania”
imie[2]=”Wioletta”
imie[3]=”Kasia”
imie[4]=”Ewa”
echo ${#imie[2]}
Wyswietli na ekranie cyfre 8.
Jezeli chcesz uzyskac liczbe wszystkich elementów w tablicy to musisz poprzedzic nazwe
tablicy znakiem hash (#), a numer indeksu zastapic znakiem gwiazdki, np.:
# !/bin/bash
imie[0]=”Ala”
imie[1]=”Ania”
imie[2]=”Wioletta”
imie[3]=”Kasia”
imie[4]=”Ewa”
echo ${#imie[*]}
Wyswietli na ekranie cyfre 5 – bo jest piec elementów w tablicy.
Innym, szybszym sposobem na utworzenie zmiennej tablicowej (identycznej jak
w powyzszym skrypcie) jest wydanie polecenia:
# !/bin/bash
imie=(Ala Ania Wioletta Kasia Ewa)
Podstawy Programowania w powloce bash; wersja 1.1.1
Strona 10 z 21
Zostanie utworzona tablica piecio elementowa z indeksami elementów od 0 do 4. Wartosci
elementów kolejno beda odpowiadaly podanym imionom.
Moze sie zdarzyc, ze bedziesz chcial utworzyc tablice zawierajaca jako elementy wartosci
zwrócone przez jakies polecenie. W takim przypadku tak jak podczas podstawiania wyników
polecenia do zmiennych stosujesz znaki ``, a deklaracje tablicy musisz poprzedzic klauzula
declare
Np.:
# !/bin/bash
tablica1=(`cat /etc/passwd`)
declare tablica2=(`cat /etc/passwd`)
Przyklad ten prezentuje utworzenie dwóch tablic:
tablica1
oraz
tablica2
. W pierwszej tablicy
zostanie utworzone tyle elementów ile jest wierszy w pliku
/etc/passwd
. Kazdy jeden element
tabeli bedzie zawieral jeden wiersz z pliku
/etc/passwd
, zas zmienna tablicowa
tablica2
bedzie zawierala tylko jeden element zawierajacy listing pliku
/etc/passwd
(numeracja
elementów w tablicach w obu przypadkach bedzie odbywac sie od zera).
Usuwanie zmiennych tablicowych
Do niszczenia tablic tak ja w przypadku zmiennych sluzy polecenie
unset
i sluzy do usuniecia
calej tablicy lub jednego wskazanego elementu. Np.:
# !/bin/bash
imie=(Ala Ania Wioletta Kasia Ewa)
unset imie[0]
echo ${imie[*]}
echo ${imie[#]}
echo ${imie[0]}
Spowoduje wyswietlenie na ekranie:
Ania Wioletta Kasia Ewa
4
Zwróc uwage na pusty wiersz – element zerowy w tablicy zostal usuniety tak, wiec polecenie
echo wyswietli dodatkowo pusty wiersz (indeksy elementów w tablicy nie zmienily sie).
W ponizszym skrypcie
# !/bin/bash
imie=(Ala Ania Wioletta Kasia Ewa)
unset imie
echo ${imie[*]}
Zostanie utworzona tablica
imie
z elementami
Ala, Ania, Wioletta, Kasia i Ewa
, a zaraz
pózniej polecenie
unset
usuwa ja calkowicie. Tak, wiec skrypt wyswietli tylko pusty wiersz.
Podstawy Programowania w powloce bash; wersja 1.1.1
Strona 11 z 21
Zasieg zmiennych w skryptach
Powloka
bash
umozliwia wykonywanie skryptów przez inne skrypty. W takich sytuacjach
podczas uruchamiania nowego skryptu jest robiona kopia biezacego srodowiska i w nim jest
uruchamiany nowy skrypt. Biezacym srodowiskiem sa wszystkie ustawienia zmiennych, jakie
byly przy uruchomieniu pierwszego skryptu. Aby zwiekszyc zasieg zmiennych i wprowadzic
je do zmiennych tworzacych srodowisko wywolania musisz uzyc polecenia
export
, dzieki
któremu deklarowana zmienna bedzie widoczna w srowisku uruchomieniowym, np.:
# !/bin/bash
zmienna1=Ala
export zmienna2=Wioletta
# Uruchomienie drugiego skryptu z poziomu pierwszego
./skrypt
Skrypt ten deklaruje dwie zmienne:
zmienna1
oraz
zmienna2
. Pierwsza z nich bedzie
widoczna tylko w skrypcie, w którym zostala zadeklarowana, zas zmienna2 bedzie widoczna
takze (zostanie dodana do srodowiska uruchomieniowego) skryptu skrypt – bedzie w nim
widoczna.
Znaki specjalne uzywane w wartosciach zmiennych
W trakcie pisania skryptu moze sie okazac, ze musisz zastosowac w zawartosci zmiennej
znaków specjalnych (np.: $ lub cudzyslów). Kazde wystapienie znaku specjalnego w ciagu
znaków bedacych wartoscia musi byc poprzedzone jednym ukosnikiem „\”. Znak ukosnik
takze jest znakiem specjalnym i aby móc go uzywac musisz poprzedzic go znakiem ukosnika.
Przyklad uzycia znaków specjalnych ciagach znaków:
# !/bin/bash
zmienna1=”Ala ma \”kota\” ?”
echo $zmienna1
Zmienna
zmienna1
ma wartosc:
Ala ma „kota”?
. Powyzszy skrypt wyswietli na ekranie napis:
Ala ma „kota”?
Zestawienie znaków specjalnych, przed którymi nalezy uzywac znaku cytowania – ukosnik
(\):
Znak
Opis i zastosowanie
cytowania w skrypcie
„
Cudzyslów.
`
Znak akcentowania
\
Ukosnik – sam jest znakiem
cytowania. Aby w napisie
zacytowac nalezy uzyc: „\\”
Zmienne specjalne i parametry przekazywane do skryptu
Jak kazdy program tak i skrypt moze przyjmowac parametry podczas uruchomienia. Jezeli
chcesz podac parametr podczas wywolania to obok nazwy skryptu (rozdzielone minimum
jedna spacja) podaj parametry jeden za drugim.
Podstawy Programowania w powloce bash; wersja 1.1.1
Strona 12 z 21
Ponizej znajduje sie lista zmiennych specjalnych, których zawartosc jest automatycznie
ustawiana podczas uruchamiania skryptu. Zmienne okreslajace parametry skryptu sa
zmiennymi specjalnymi i nie nalezy modyfikowac ich zawartosci podczas dzialania skryptu.
Nazwa zmiennej
Opis zawartosci
$1, $2, …
Zmienne zawierajace argumenty wywolania skryptu. $1 oznacza pierwszy
parametr, $2 drugi parametr itd.
$0
Zawiera nazwe skryptu. Jezeli uzytkownik zmienil jego nazwe to $0
zawsze bedzie zawieralo biezaca nazwe skryptu.
$$
Identyfikator procesu skryptu. Kazdy program uruchamiany w systemie
UNIX/Linux posiada swój identyfikator PID. Zmienna $$ zawiera jego
numer.
Zmienna te wykorzystuje sie do tworzenia np.: plików tymczasowych –
dzieki zastosowaniu identyfikatora procesu ich nazwa bedzie unikatowa
w systemie plików.
$?
Kod powrotu ostatniego polecenia.
Za pomoca tej zmiennej mozesz sprawdzic czy ostatnio wydawane
polecenia nie zostalo zakonczone z powodzeniem.
$#
Okresla liczbe argumentów przekazanych do skryptu. Dzieki tej zmiennej
mozesz przebadac wszystkie wydane argumenty odpowiednio stosujac
iteracje.
$*
Zawiera liste wszystkich parametrów przekazanych do skryptu.
Powloka
bash
wyposazona jest takze w system analizowania opcji i ich argumentów. Moze
zaistniec potrzeba analizy okreslonych opcji i odczytywania ich argumentów np.:
$ skrypt –i Robert –e bobik@oeiizk.waw.pl
Powoduje uruchomienie skryptu skrypt z opcjami –i oraz –e, których argumenty przybieraja
postac Robert oraz bobik@oeiizk.waw.pl. Ten sam skrypt mozna uruchomic takze z tymi
samymi opcjami lecz w innej kolejnosci np.:
$ skrypt–e bobik@oeiizk.waw.pl –i Robert
Argumenty opcji powinny byc interpretowane tak samo, po mimo innej kolejnosci ich
podawania. W polacze niu z instrukcjami if, for lub
while
mozna odczytac argumenty opcji za
pomoca polecenia
getopts
.
# !/bin/bash
echo Ilosc argumentow = $#
while getopts i:e:p nazwaOpcji
do
case $nazwaOpcji in
i)
echo Twoje imie to: $OPTARG;;
e)
echo Twoj e-mail to: $OPTARG;;
p)
echo Podales opcje -p;;
esac
done
Podstawy Programowania w powloce bash; wersja 1.1.1
Strona 13 z 21
Skrypt wykorzystuje petle
while
oraz instrukcje wyboru
case,
które sa opisane w dalszej
czesci tego dokumentu.
getopts
wymaga podania mozliwych opcji w naszym przypadku jest to: i, e oraz p.
W przypadku opcji i oraz e wymagane sa argumenty (znak dwukropka znajduje sie po literze
oznaczajacej argument). W przypadku opcji p niewymagany jest argument. Przetwarzanie
argumentów jest na tyle elastyczne, ze mozna je laczyc i przestawiac miejscami np.:
$ skrypt–e bobik@oeiizk.waw.pl –i Robert -p
jest tym samym co:
$ skrypt –i Robert –pe bobik@oeiizk.waw.pl
Skrypt mozna takze wywolac tylko z jedna opcja – dowolnie wybrana. Argumenty opcji
przechowywane sa w zmiennej
OPTARG
, a numer argumentu w zmiennej
OPTIND
(nie
uzytej w tym skrypcie. Skrypt nalezaloby wzbogacic o obsluge braku argumentów
poleceniami
if
, ale pozostawiam to juz czytelnikowi.
Przy kazdym wywolaniu polecenia
getopts
analizowane sa kolejne opcje i ich argumenty,
dlatego uzyto petli
while
(przetwarzana, az do momentu, gdy
getopts
nie zwróci
false
–
zakonczenia przetwarzania).
Jezeli wczytana jest opcja nie wymagajaca argumentu to
OPTARG
ma wartosc pustego ciagu
znaków, w przeciwnym wypadku przybiera wartosc ? (znak zapytania).
Polecenie test
Czasem podczas pisania skryptu wymagane jest sprawdzenie czy plik lub zmienna ma
wartosc, a czasem trzeba sprawdzic czy w ogóle istnieja. Zadanie takie spoczywa na
poleceniu test, które ma skladnie nastepujaca:
test warunek
Opis mozliwych to wydania warunków:
Opis warunku
Zwracana wartosc warunek ewentualne zastosowanie
-r nazwa
Zwraca prawde, jesli istnieje plik o nazwie nazwa i ma prawo
czytania.
-w
Zwraca prawde, jesli istnieje plik o nazwie nazwa i ma prawo
zapisywania.
-x
Zwraca prawde, jesli istnieje plik o nazwie nazwa i ma prawo
wykonywania.
-f nazwa
Zwraca prawde, jesli plik istnieje i jest zwyklym plikiem lub
dowiazaniem do pliku (np.: nie katalogiem)
-d nazwa
Zwraca prawde, jesli istnieje plik o nazwie nazwa i jest on
katalogiem.
-s nazwa
Zwraca prawde, jesli plik o nazwie nazwa istnieje oraz jego
wielkosc jest wieksza od zera (plik nie jest pusty).
-z napis
Zwraca prawde, jesli
napis
ma dlugosc równa zero.
-n napis
Zwraca prawde, jesli napis ma dlugosc wieksza od zera.
Podstawy Programowania w powloce bash; wersja 1.1.1
Strona 14 z 21
napis1 = napis2
Zwraca prawde, jesli
napis1
jest równy
napis2
. Mozna
z powodzeniem takiego warunku uzywac do porównywania
zmiennych. Sprawdzenie moze sie odbyc takze poleceniem
expr
.
s1
Zwraca prawde, jesli napis nie jest pusty. Pustym napisem jest np.:
„”.
Liczba1 –eq liczba2
Zwraca prawde, jesli liczby sa sobie równe. Sprawdzenie moze sie
odbyc takze poleceniem
expr
.
Liczba1 –ne liczba2
Zwraca prawde, jesli liczby sa rózne. Sprawdzenie moze sie odbyc
takze poleceniem
expr
.
Liczba1 –qt liczba2
Zwraca prawde, jesli
Liczba1
jest wieksza od
liczba2
. Sprawdzenie
moze sie odbyc takze poleceniem
expr
.
Liczba1 –qe liczba2
Zwraca prawde, jesli
Liczba1
jest wieksza lub równa liczbie
liczba2
.
Sprawdzenie moze sie odbyc takze poleceniem
expr
.
Liczba1 –lt liczba2
Zwraca prawde, jesli
Liczba1
jest mniejsza od
liczba2
. Sprawdzenie
moze sie odbyc takze poleceniem
expr
.
Liczba1 –le liczba2
Zwraca prawde, jesli
Liczba1
jest mniejsza badz równa liczbie
liczba2
. Sprawdzenie moze sie odbyc takze poleceniem
expr
.
Przyklad:
# !/bin/bash
zmienna1=”Ala”
zmienna2=”Ania”
test „( zmienna1 = zmienna2 )”
echo $?
Na ekranie zostanie wyswietlona cyfra 1 (jeden – wystapil blad).
Wszystkie przedstawione wyzej warunki polecenia test mozna laczyc ze soba uzywajac
operatorów
and
,
or
oraz zaprzeczenia
not
.
Zestawienie symboli operatorów.
Nazwa operatora
Symbol
Opis zastosowania
And
-a
Laczy dwa warunki. Zwracana jest wartosc
prawdy, jesli oba warunki sa spelnione (sa
prawdziwe.
Or
-o
Laczy dwa warunki. Zwraca prawde gry jeden
z laczonych warunków zwrócil prawde.
Not (negacja)
!
Sluzy do negacji warunku. W wyniku
zastosowania tego operatora zostanie zwrócony
wynik przeciwny do otrzymanego warunku test.
Przyklad zastosowania polecenia test z operatorami:
# !/bin/bash
Podstawy Programowania w powloce bash; wersja 1.1.1
Strona 15 z 21
test –r plik.txt –a –x plik.txt
echo $?
Spowoduje wyswietlenie na ekranie cyfry 0 (zero – bez bledu), gdy w biezacym katalogu
bedzie sie znajdowal plik
plik.txt
i bedzie on do czytania oraz bedzie mial prawo
wykonywania.
W skryptach mozna takze zamiast slowa test uzywac znaków nawiasów kwadratowych np.:
Zamiast polecenia:
test „Ala” = „kot”
mozna uzyc:
[ „Ala” = „kot”]
W obu wypadkach w wyniku polecenia test zostanie zwrócona falsz (1). Polecenie test mozna
takze stosowac w polaczeniu z instrukcja warunkowa
if
(sposób uzycia instrukcji
if
opisany
jest w dalszej czesci dokumentu) lub po prostu odczytac wartosc zmiennej
$?
opisanej
wczesniej. Jezeli zmienna ma wartosc 0 (zero) wynik jest prawda, w przeciwnym wypadku
w wyniku polecenia test uzyskano falsz.
Instrukcja warunkowa if
Instrukcja warunkowa
if
sluzy do wykonania czesci kodu (pewnego bloku skryptu) w sytuacji
gdy warunek instrukcji zostal spelniony. Skladnia instrukcji
if
jest nastepujaca:
if [warunek]
then
instrukcja1
instrukcja2
…
else
instrukcjaE1
instrukcjaE2
…
fi
W powyzszym przykladzie, gdy warunek
[warunek]
jest spelniony zostana wykonane
instrukcje znajdujace sie pomiedzy fraza
then
, a
else
. Jezeli warunek nie zostanie spelniony
wtedy zostana wykonane instrukcje zawarte pomiedzy fraza
else
i
fi
.
Podczas uzywania instrukcji
if
nie wymagane jest stosowanie instrukcji
else
. Zdefiniowanie
przypadku pozostalego jest dobrowolne.
Przyklad uzycia instrukcji
if
:
# !/bin/bash
zmienna=ALA
if [ $zmienna = „ALA” ]
then
echo „Zmienna \$zmienna = ALA”
else
Podstawy Programowania w powloce bash; wersja 1.1.1
Strona 16 z 21
echo „Zmienna \$zmienna jest rozna od napisu ALA”
fi
Na ekranie zostanie wyswietlony komunikat:
$zmienna = ALA
Drugi przyklad zastosowania instrukcji if do wyswietlenia informacji czy plik istnieje oraz
czy mozna do niego pisac (czy ma ustawione prawo w).
# !/bin/bash
if [ -f plik.txt ]
then
echo Znalazlem plik plik.txt
if [ -w plik.txt ]
then
echo Mozesz pisac do pliku plik.txt
else
echo Plik nie posiada prawa „w”
fi
else
echo Plik plik.txt nie istnieje!
fi
Podczas pisania skryptów z wykorzystaniem instrukcji warunkowej if mozesz z powodzeniem
laczyc ja z kodem ostatnio wykonanego polecenia (zawarty jest w specjalnej zmiennej $?
opisanej wczesniej) np.:
# !/bin/bash
if cd /home/user 2> /dev/null
then
ls –l > home.user.files
else
echo „Katalog /home/user nie istnieje”
fi
Jezeli istnieje katalog
/home/user
to skrypt przejdzie do tego katalogu, a nastepnie utworzy
plik
home.user.files
którego zawartoscia bedzie jego listing w formacie dlugim
(zawierajacym takze prawa do plików). Jezeli katalog nie istnieje to zostanie wyswietlony
komunikat: Katalog
/home/user
nie istnieje.
Instrukcja wyboru case
Instrukcja wyboru
case
sluzy do wykonania okreslonego bloku skryptu w zaleznosci od
wartosci sprawdzanej zmiennej. Instrukcja
case
w przeciwienstwie do instrukcji if nie
sprawdza wartosc zmiennej, zas zadaniem instrukcji if jest okreslenie prawdy lub falszu.
case „$zmienna” in
wartosc1 )
instrukcja1.1
instrukcja1.2
...
;;
Podstawy Programowania w powloce bash; wersja 1.1.1
Strona 17 z 21
wartosc2 )
instrukcja2.1
instrukcja2.2
...
;;
wartosc3 )
instrukcja3.1
instrukcja3.2
...
;;
* )
instrukcja1
instrukcja2
;;
esac
Dzieki instrukcji
case
jest mozliwosc wykonania dowolnego bloku w zaleznosci od wartosci
zmiennej. Tak naprawde to
case
porównuje ciag znaków „$zmienna” z wartosciami:
wartosc1, wartosc2 ... *. Jezeli zmienna nie posiada zadnej z okreslonych wartosci to
wykonywane sa instrukcje w *. Niewymagane jest definiowanie zachowania sie dla
pozostalych wartosci – zalezy to od programisty. Nalezy pamietac o znakach „;;” po
zakonczeniu bloku kodu. W przeciwnym wypadku zostanie wyswietlony komunikat o bledzie
skladniowym.
Ponizszy skrypt sprawdza, jaka litere podano jako parametr wywolania skryptu.
Przeprowadzane jest takze sprawdzenie czy litera jest duza czy mala oraz czy parametr
skryptu nie jest cyfra. W przeciwnym wypadku zostaje wyswietlony komunikat, ze
parametrem skryptu nie jest cyfra ani litera.
# !/bin/bash
if [ $# = 0 ]
then
echo Nie podales zadnego parametru.
else
case "$1" in
[a-z] )
echo Parametrem jest mala litera z zakresu od a do z
;;
[A-Z] )
echo Parametrem jest duza litera z zakresu od A do Z
;;
[0-9] )
echo Parametrem jest cyfra z zakresu 0-9
;;
* )
echo Parametr nie zawiera sie w zadnym z zakresow: [a-z],[A-Z] oraz
echo od 0 do 9.
;;
esac
fi
Podstawy Programowania w powloce bash; wersja 1.1.1
Strona 18 z 21
Instrukcja iteracyjna while
Instrukcja
while
pozwala na wykonywania okreslonego bloku instrukcji do momentu gdy nie
zostanie spelniony warunek
while
. Bardzo czesto zachodzi potrzeba wykonywania pewnego
bloku kodu, ale podczas pisania skryptu nie jestesmy w stanie przewidziec ilosci wykonanych
petli.
# !/bin/bash
while [warunek]
do
instrukcja1
instrukcja2
...
done
W jezeli warunek
[warunek]
jest spelniony to zostaje wykonany blok zawierajacy instrukcje:
instrukcja1, instrukcja2
...
Ponizszy skrypt wczytuje od uzytkownika wartosci. Jezeli zostanie wpisana wartosc
k
to
skrypt zakonczy dzialanie.
# !/bin/bash
while [ „$wcisnieto” != „k” ]
do
# oczekiwanie na wprowadzenie wartosci
echo „Wprowadz wartosc”
echo „k – konczy wprowadzanie”
read wcisnieto
echo Wprowadzono: $wcisnieto
done
Instrukcja iteracyjna for
Instrukcja
for
jest instrukcja pozwalajaca wykonac okreslony blok okreslona z góry podczas
pisania programu ilosc razy.
for wartosc in lista_wartosci
do
instrukcja1
instrukcja2
...
done
instrukcja1
oraz
instrukcja2
beda wykonywane tyle razy ile wartosci
wartosc
znajduje sie
w liscie wartosci
lista_wartosci
np.:
# !/bin/bash
# plik jest zmienna do której odwolujemy sie poprzez jej nazwe poprzedzona znakiem
# dolara
for plik in *.txt
do
echo Znalazlem plik $plik
done
Podstawy Programowania w powloce bash; wersja 1.1.1
Strona 19 z 21
Skrypt ten wyswietli na ekranie tyle razy komunikat
Znalazlem plik nazwa_pliku
ile jest
plików z rozrzeszeniem
txt
w biezacym katalogu.
Jezeli chcesz, aby instrukcja for wykonywana byla np.: 20 razy, to mozesz skorzystac
z polecenia
seq
np.:
# !/bin/bash
# index jest zmienna do której odwolujemy sie poprzez jej nazwe poprzedzona znakiem
# dolara
# seq 1 20 zwraca liste wartosci od 1 do 20.
for index in `seq 1 20`
do
echo To jest $index wykonanie instrukcji for
done
Wyswietli na ekranie wiersze z napisami:
To jest 1 wykonanie instrukcji for, To jest 2
wykonanie instrukcji for
... i tak az do
To jest 20 wykonanie instrukcji for
.
Inne ciekawe polecenia i programy
Ponizej znajduje sie lista polecen i programów dostepnych w systemie Linux, które mozna
z powodzeniem dodatkowo uzyc podczas pisania skryptów. Wiecej na temat zamieszczonych
w tej tabeli programów znajdziesz na stronach podrecznika elektronicznego
man
lub
info
.
Polecenie
komenda
Krótki opis
awk
Jezyk wyszukiwania i przetwarzania wzorców (troche o uzyciu
awk
jest napisane
ponizej).
cal
Wyswietla kalendarz na biezacy miesiac.
cat
Wyswietla zawartosc plików tekstowych
cmp
Porównuje pliki
cron
Uruchamia zadania w okreslonym terminie
echo
Wyswietlanie napisów na ekranie
find
Poszukuje plików
grep
Filtrowania danych
head
Wyswietlanie plików tekstowych
last
Sprawdzanie logów uzytkowników
Wysyla poczte
pwd
Wyswietla biezaca sciezke
read
Polecenie powloki. Sluzy do pobierania od uzytkownika wartosci.
sed
Edytor strumieniowy.
seq
Wypisuje kolejno liczby
sort
Sluzy do sortowania danych
touch
Tworzy nowy plik. Poleceniem tym mozesz takze zmienic date modyfikacji
pliku.
uniq
Usuwa powtarzajace sie wiersze
w
Informacje o uzytkownikach i systemie
wc
zlicza ilosci slów w plikach
Podstawy Programowania w powloce bash; wersja 1.1.1
Strona 20 z 21
Troche o awk
Awk jest jezykiem ogólnego przeznaczenia do poszukiwania wzorców i przetwarzania
tekstów. Wiecej o
awk
dowiesz sie z dokumentacji elektronicznej programu lub na stronie:
http://gershwin.ens.fr/vdaniel/Doc-Locale/Outils-Gnu-Linux/Awk/HTML/
. Ponizej znajduje
sie kilka ciekawyc h mozliwosci uzycia
awk
do przetwarzania tekstu.
Wyswietlenie wszystkich wierszy zawierajacych okreslony ciag znaków np.:
$ awk `/ssh/` /etc/services
Mozliwe jest takze wyswietlenie tylko tych wierszy które rozpoczynaja sie od zadanego ciagu
znaków np.:
$ awk `/^ssh/` /etc/services
Wyswietli tylko te wiersze pliku /etc/services które rozpoczynaja sie ciagiem znaków ssh.
Dzieki
awk
istnieje mozliwosc analizowania pliku dzielac jego dane na kolumny. W
awk
mozemy podac dowolny znak rozdzielenia kolum (np.: spacja) i analizowac okreslony wiersz
i kolumne np.:
# awk –F# `{print $1}’ /etc/services
- Po parametrze –F podaje sie znak rozdzielajacy kolumny w pliku
tekstowym. W powyzszym przykladzie znakiem rozdzielajacym jest znak
# (hash) i nie brany on bedzie do analizowania wiersza czy kolumny.
Jezeli chcialbyc podac spacje jako znak rodzielajacy kolumny to bedziesz
musial ja ujac w naki cudzyslów np.: -F” „
- Zmienne w awk rozpoczynaja sie znakiem dolara ($) i moga przybierac
swoje nazwy. Podczas analizowania pliku awk inicjuje automatycznie
zmienne specjalne oznaczajace analizowany wiersz oraz kolumne i tak:
$0 – zmienna ta zawiera caly analizowany wiersz,
$1 – pierwsza kolumna wedlug podzialu znakiem po parametrze –F
$2 – druga kolumna wedlug podzialu znakiem po parametrze –F
$3 … - kolejne kolumny.
Jak kazde szanujace sie narzedzie do przetwarzania tak i awk posiada
wbudowane funkcje umozliwiajace analizowanie tekstu. Jedna z nich jest
print, która umozliwia wyswietlenie na standardowym wyjsciu.
Powyzszy skrypt podzieli plik na kolumny (w naszym przypadku na dwie; podzial odbywac
sie bedzie wzgledem znaku #) i wyswietli tylko pierwsza kolumne.
$ awk –F: ‘{print $1, $2}’ /etc/passwd
Podstawy Programowania w powloce bash; wersja 1.1.1
Strona 21 z 21
Wyswietli pierwsza i druga kolumne pliku
/etc/passwd
.
Awk
posiada predefiniowane funkcje dzialajace na lancuchach znakowych. Ponizej znajduje
sie polecenie, które powoduje wyswietlenie wszystkich uzytkowników systemu wielkimi
literami (lista uzytkownik pobrana jest z pliku
/etc/passwd
).
$ awk –F: ‘{print toupper( $1 )} /etc/passwd
Podczas wyswietlania mozna takze przefiltrowac analizowany tekst i wyswietlic tylko napisy
pasujace do okreslonego wzorca np.:
$ awk –F: ‘( $1 >= “test” ) {print toupper( $1 )} /etc/passwd
W niektórych jezykach programowania mozna takze porównywac ciagi
znaków pod katem ich wielkosci. Porównywanie te nie odbywa sie do ich
dlugosci, a raczej ma znaczenie zawartosc ciagów znaków np.: a < aa oraz
b > aa itd.
Oczywiscie nic nie stoi na przeszkodzie, aby porównywac wartosci
liczbowe.
Ostatnim przykladem dla
awk
bedzie przyklad z nie wyswietlaniem wierszy, w których druga
kolumna jest rózna od pustego ciagu znaków.
$ awk –F: ‘( $2 !~ /^$/) { print $0}’ /etc/passwd
Awk
ma wiele wiecej mozliwosci. Wiecej informacji znajdziesz w Internecie i dokumentacji
zalaczonej do
awk
.
Informacje w Internecie
Ponizej znajduje sie lista adresów internetowych zawierajacych dodatkowe informacje
o powloce
bash
jak i pisaniu w niej skryptów.
http://www.gnu.org/software/bash/bash.html
http://www.tldp.org/LDP/abs/html/
http://www.deadman.org/bash.html
http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html
http://www.linuxgazette.com/issue25/dearman.html
http://www.hlug.org/presentations/bash1/present.html
http://www.linux.org/docs/ldp/howto/Bash-Prog-Intro-HOWTO.html
http://www.mcsr.olemiss.edu/unixhelp/index.html
Strony poswiecone poszczególnym poleceniom i programom:
sed:
http://student.uci.agh.edu.pl/~wczech/sed.htm
awk:
http://student.uci.agh.edu.pl/~wczech/awk.htm