programowanie bash

background image

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.

background image

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

background image

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

.

background image

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

background image

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

background image

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

background image

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

background image

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.

background image

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)

background image

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.

background image

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.

background image

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

background image

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.

background image

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

background image

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

background image

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

...

;;

background image

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


background image

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

background image

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

mail

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


background image

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

background image

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


Wyszukiwarka

Podobne podstrony:
(e book PL pdf) Linux BASH Programowanie w powloce Radek Przychodaid 1260
Nowy Prezentacja programu Microsoft PowerPoint 5
Charakterystyka programu
1 treści programoweid 8801 ppt
Programowanie rehabilitacji 2
Rola rynku i instytucji finansowych INowy Prezentacja programu Microsoft PowerPoint
Nowy Prezentacja programu Microsoft PowerPoint ppt
Szkoła i jej program
wykluczenie społ program przeciwdział
ProgrammingJavaLecture9
Nowa podstawa programowa WF (1)

więcej podobnych podstron