Download as pdf or txt
Download as pdf or txt
You are on page 1of 5

Uvod u UNIX Shell i Shell programiranje

Što je Shell

Shell ili ljuska je korisnički program kojemu je osnovna namjena olakšati interakciju
korisnika i sustava. To je zapravo naredbeni interpreter koji izvršava naredbe koje korisnik
unosi pomoću tipkovnice. Shell nije dio Unix/Linux jezgre, ali ju koristi za pokretanje
programa, kreiranje datoteka itd.

Osim što je naredbeni interpreter, shell se koristi i kao skriptni jezik za pisanje shell
skripata, koje automatiziraju određene korisničke radnje.

Ako povučemo paralelu s MS DOS operacijskim sustavom Linux shell možemo usporediti s
COMMAND.COM programom, a shell skripte su slične .bat datotekama.

Izvorni UNIX System Shell poznat pod imenima sh ili bourne shell tokom godina doživio je
mnogo nadogradnji tako da danas postoji više inačica shell-a (csh, tcsh, bash, ksh, psh,
zsh) od kojih svaka nudi određena poboljšanja u odnosu na standardni sh shell. Uobičajeni
shell u Linux operacijskom sustavu je bash (Bourne Again Shell) i svi daljni primjeri
odnositi će se na bash ili sh shell.

Shell se automatski pokreće prilikom prijavljivanja na sustav. U datoteci /etc/passwd uz


korisničko ime i lozinku definiran je i tip ljuske koji će se pokrenuti za pojedinog korisnika.

Prilikom pokretanja ljuska traži .profile datoteku u korisnikovom home direktoriju i sukladno
podacima koji se nalaze u njoj podešava korisnikovu okolinu (environment).

Zadavanje naredbi

U općenitom slučaju u naredbeni redak se upisuju naredba i njeni argumenti. Argumenti


sadrže opcije koje modificiraju ponašanje naredbe ili sadrže potrebne informacije kao npr.
ime datoteke. Shell počinje procesirati naredbu pritiskom na Return tipku.

Naredbe se mogu unositi jedna po jedna ali moguće ih je i grupirati u istoj liniji pomoću
znaka “;”, npr.:

$ date; ls

što će rezultirati ispisom datuma i sadržaja tekućeg direktorija. Ovakav način zadavanja
naredbi koristan je kada želimo istovremeno započeti njihovo izvršavanje.

Vrlo korisna je i pipeline opcija pomoću koje je moguće napraviti niz naredbi čiji su ulazi i
izlazi međusobno povezani. Pipeline se u shell-u označava znakom “|”. Tako će na primjer
redak:

$ ls | lp

ispis sadržaja tekućeg direktorija usmjeriti na pisač.

Zamjenski znakovi
Shell omogućuje zamjenu znakova spaecijalnim zamjenskim znakovima koji mogu
predstavljati jedan ili više znakova u nizu. Na taj način lako je obuhvatiti više datoteka
odjednom. Naredba

$ ls *jan

izlistati će sve datoteke u tekućem direktoriju koje završavaju sa jan.

U standardnom UNIX shell-u postoje tri vrste zamjenskih znakova *, ? i [...].

Znak ? Mijenja jedan znak, * mijenja više znakova, dok je pomoću uglatih zagrada
moguće definirati cijelu klasu znakova koja će mijenjati određeni znak.

[Jj]mf odgovara datotekama jmf i Jmf

[A-N] Sva velika slova od slova A do slova


N
[a-z] Sva mala slova od slova a do slova z
[A-z] Sva velika i mala slova od a do z
[0-9] Svi brojevi od 0 do 9

Zamjenskim znakovima nije moguće zamijeniti neke posebne znakove kao na primjer točku
(.) pa je potrebno pripaziti ukoliko imamo skrivene datoteke koje počinju s točkom.

$ cat *profile

na primjer neće ispisati datoteku .profile.

Standardni ulaz i izlaz

Kao što je već prije spomenuto jedna od općenitih značajki UNIX/Linux sustava je
korištenje standardnog ulaza i izlaza. Naredba prima podatke preko standardnog ulaza i
rezultat šalje na standardni izlaz. Ulaz može biti datoteka, tipkovnica ili izlaz neke druge
naredbe, dok izlaz može ići na ekran, u datoteku ili na ulaz slijedeće naredbe. Sa gledišta
naredbe potpuno je svejedno otkuda dolazi standardni ulaz i kamo ide standardni izlaz.
Preusmjerananje ulaza i izlaza je zadatak shella i zbog toga postoji set posebnih znakova
pomoću kojih se standardni ulaz i izlaz kontroliraju iz naredbenog retka.

Kao promjer preusmjeravanja poslužiti će nam sljedaća naredba:

$ ls -l | temp

Rezultat izvršavanja naredbe ls -l tj. Izlist tekućeg direktorija pohraniti će se u datoteku


temp.

Za kontrolu standardnog ulaza i izalaza koriste se sljedeći simboli:

Simbol Primjer Funkcija


< naredba < datoteka Naredba kao standardni ulaz uzima
navedenu datoteku
> naredba > datoteka Standardni izlaz sprema se u
navedenu datoteku
>> naredba >> datoteka Standardni izlaz dodaje se na kraj
navedene datoteke
| naredba1|naredba2 Nakon izvršavanja naredbe 1 izlaz
se preusmjerava na ulaz naredbe2

Uz standardni ulaz i izlaz postoji i standardna greška koja je rezultat nepotpunog


izvršavanja naredbe. Na primjer, pokušaj izvršavanja cat naredbe na nepostojećoj datoteci
rezultirati će sljedećom standardnom greškom:

$ cat nepostojeca_datoteka
cat: cannot open nepostojeca_datoteka

Standardna greška se uobičajeno šalje na zaslon, jednako kao i standardni izlaz, tako da
običan korisnik ne primjećuje razliku između standardnog izlaza i standardne greške, ali u
slučaju redirekcije standardnog izlaza u datoteku, standardna greška će se i dalje
prikazivati na zaslonu.

$ cat nepostojeca_datoteka > temp


cat: cannot open nepostojeca_datoteka

Takav pristup primijenjen je zato što bi u slučaju redirekcije oba izlaza u datoteku korisnik
mogao previdjeti pogrešku koja je nastala kod izvođenje naredbe.

Ukoliko korisnik eksplicitno to zatraži Shell će ipak dopustiti redirekciju standardne greške u
datoteku. U tom slučaju koristi se simbol "2>". Naredba

$ grep trazeni_niz datoteka > niz 2> greška

preusmjeriti će izlaz naredbe u datoteku niz, a standardnu grešku u datoteku greška.


Potrebno je primijetiti da nije dozvoljen razmak između 2 i >.

Shell varijable

Shell varijable koriste se za pohranu informacija koje koriste razni programi ili
sam shell. Korisnik može kreirati i vlastite shell varijable za osobnu upotrebu.
Kod pokretanja, programu su dostupne vrijednosti pohranjene u shell
varijablama i u ovisnosti o njima program se može prilagoditi korisnikovom
okruženju. Set svih shell varijabli naziva se okolina, a varijable se nazivaju
varijable okoline. Naredbom env moguće je izlistati sadržaj varijabli okoline.

$ env
PWD=/home/users/lss/spajic
PS1=\u@\h:\w\$
USER=spajic
MAIL=/usr/mail/spajic
LOGNAME=spajic
SHLVL=1
SHELL=/bin/sh
HOME=/home/users/spajic
TERM=vt100
PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games

Vrijednosti svih važnijih varijabli postavljene su automatski, od strane


operacijskog sustava, dok ostale vrijednosti mora definirati sam korisnik.
Vrijednost varijable se definira jednostavnim upisivanjem njenog imena i
vrijednosti npr.

$ TERM=vt100

postavlja vrijednost varijable TERM na vt100.

Trenutno stanje varijable provjerava se naredbom echo $ime_varijable.

$ echo $TERM
vt100

Da bi se promjena vrijednosti odrazila na okolinu i postala dostupna


programima, koristi se naredba export:

$ export TERM.

Naravno moguće je zadati i naredbu

$ export TERM=vt100.

Upravljanje procesima

Budući da Linux operacijski sustav omogućuje pokretanje procesa u pozadini, sa


shell-om dolazi i set naredbi koji omogućuje kontrolu procesa. Naredbom jobs
ispisuje se lista svih pokrenutih procesa:

$ jobs
[1] + Running find /home/jmf -print
> files &
[2] - Suspend grep supv | awk –f
fixes > files

Procesi se mogu kontrolirati sljedećim naredbama

Naredba Značenje Sintaksa


Privremeno zaustavlja trenutno
CTRL+Z -
aktivan proces
Nastavlja izvođenje
bg zaustavljenog procesa ali u bg %broj_procesa
pozadini
fg fg %broj_procesa
Nastavlja izvođenje
zaustavljenog procesa
Prikazuje listu svih
jobs zaustavljenih i pozadinskih -
procesa
Nasilno prekida izvođenje
kill Kill %broj_procesa
procesa
Stop %broj_
stop Prekida izvođenje procesa procesa

Uklanjanje posebnih znakova iz naredbenog retka

Kao što je već prije objašnjeno shell naredbeni jezik koristi nekoliko posebnih
znakova (<,>,|,&,…) za izvođenje određenih instrukcija. Postoje slučajevi u
kojima korisnik želi upotrijebiti te znakove kao dio običnog teksta. Primjer je
korištenje grep naredbe za traženje datoteka koje sadrže znak "|".

$ grep | datoteka
Usage:grep -hblcnsvi pattern file..

U ovom slučaju shell je znak | protumačio kao naredbu za preusmjeravanje


izlaza naredbe grep u datoteku. Da bi se izbjegle ovakve greške, shell podržava
uklanjanje posebnih znakova iz naredbenog retka, tj. tumači ih kao obične
znakove. Sljedeća tablica prikazuje načine uklanjanja posebnih znakova iz
naredbene linije:

Znak Značenje
\ Isključuje funkciju sljedećeg posebnog znaka
Isključuje funkciju posebnih znakova u nizu
'...'
znakova koji se nalazi između navodnika
Isključuje funkciju posebnih znakova u nizu
"..." znakova koji se nalazi između navodnika, osim
znakova $,",',\.

You might also like