Varijable ljuske i okoline, povijest ljuske
-
Bash (naredba
bash) je ljuska koju koristimo dok radimo u komandnoj liniji- nudi nam prompt oblika
[studXYZ@akari ~]$gdje unosimo naredbe - hvata
<Tab>kod tab kompletiranja, interpretira glob, interpretira naredbe koje unosimo, a zatim poziva odgovarajuće programe ili vraća određene poruke o grešci (primjerice, kada naredba ne postoji) - podržava varijable, funkcije i standardne programske naredbe
if,for,do/while, ... - dizajnirana po uzoru na stariju Bourne ljusku; Bash je kratica za Bourne Again SHell, što zvuči slično kao born again shell
- nudi nam prompt oblika
Varijabla ljuske
-
varijabla ljuske
- ime počinje znakom
$, vrijednost se može ispisati naredbomecho $HOME,$PATH,$BASH,$BASH_VERSION,$COLUMNS,$USER,$GROUPS, ...
- ime počinje znakom
Zadatak
- Što je točno sadržano u varijablama koje smo upravo vidjeli (
$HOME,$PATH,$BASH_VERSION,$COLUMNS,$USER,$GROUPS)? Ispišite njihovu vrijednost na ekran i zaključite. -
Što je sadržano u sljedećim varijablama:
$HOSTNAME$HOSTTYPE$MACHTYPE$RANDOM$SECONDS
-
razlikujemo dvije vrste dostupnih varijabli ljuske
-
pridruživanje vrijednosti varijabli je oblika
MOJA_VARIJABLA=vrijednost(bez razmaka)- primijetite da ne postoji znak dolara ispred naziva varijable
- vrijednost varijable može biti bilo što: integer, array i sl.
-
znak
$služi za dohvaćanje vrijednosti varijable; primjer:MOJA_VARIJABLA = 5 # pridruživanje vrijednosti varijabli MOJA_VARIJABLA echo $MOJA_VARIJABLA # dohvaćanje vrijednosti varijable MOJA_VARIJABLA
Zadatak
- Pridružite varijabli
IMEvrijednost svoga imena. Ispišite vrijednost te varijable na ekran. - Pridružite varijabli
STUDENTvaše ime i prezime. Što se događa? Kako to izbjeći? - Radi li pridruživanje vrijednosti s razmacima oko znaka jednakosti? Probajte objasniti zašto.
Varijabla okoline
- operacijski sustavi slični Unixu imaju mehanizam prijenosa okoline svim procesima djeci koje je stvorio neki proces roditelj
-
vrijednost varijable definirane u ljusci neće se naslijediti u nekoj skripti ljuske; primjer:
-
u promptu pišemo:
VAR1=1 emacs pr1.sh -
unutar skripte
pr1.shpišemo:#!/bin/sh echo "Vrijednost varijable je $VAR1" VAR1=2 echo "Vrijednost varijable je $VAR1" -
pokrećemo:
chmod +x pr1.sh # označimo skriptu za pokretanje ./pr1.sh # pokrećemo skriptu
-
-
da varijabla ljuske postane varijabla okoline (engl. environment variable) potrebno je napraviti izvoz (engl. export)
-
sintaksa:
export MOJA_VARIJABLA; primjer:MOJA_VARIJABLA = 5 # varijabla ljuske poprima vrijednost export MOJA_VARIJABLA # čini da varijabla postane dijelom okoline -
svaka varijabla okoline je varijabla ljuske, ali obrat ne vrijedi
- izvoz varijable vrijedi samo za trenutnu sesiju i to samo za trenutnog korisnika
-
-
kada više nije potrebna može se napraviti brisanje varijable s
unset MOJA_VARIJABLA; primjer:unset MOJA_VARIJABLA # brisanje varijable echo $MOJA_VARIJABLA # ispisuje prazan redak jer varijabla nema vrijednost
Zadatak
- Objasnite zašto kod naredbe
unsetnismo koristili$pored naziva varijable. - Varijabli
TEXT_EDITORpridružite vrijednost kojom ćete pokrenuti Emacs alat. Pokrenite navedeni alat pomoću varijable kojoj ste upravo dodijelili vrijednost. - Varijabli
CRVENI_EDITORpridružite vrijednostemacs --fg redkojom se pokreće Emacs u crvenoj boji slova. Pokrenite Emacs tom varijablom. - Izbrišite obje varijable.
Povijest unesenih naredbi
- povijest unesenih naredbi ljuska sprema u
$HISTFILE - naredba
historyispisuje do$HISTSIZEprethodno unesenih naredbi - moguće je po povijesti kretati se strelicama gore i dolje
!npokreće naredbu san-tog mjesta u povijesti!niz_znakovaako postoji, pokreće posljednju naredbu koja na početku ima dani niz znakova^Rpretraživanje povijesti unatrag za specifičnom naredbom
Zadatak
- Pokrenite naredbu na petom mjestu u povijesti. Što se događa? Zašto?
- Pokrenite posljednju naredbu u povijesti koja počinje s
emacs. - Objasnite što radi
!!, a što!-2. - Iskoristite pretraživanje povijesti da pokrenete naredbu posljednju naredbu koja sadrži određeni niz znakova
red, ali ne nužno na početku.
Vrste naredbi i funkcije ljuske
-
typeje naredba ljuske koja pretražuje naredbe ljuske; tipovi naredbi mogu biti:- naredbe koje su ugrađene u ljusku (shell) odnosno hard coded naredbe (npr.
cd) - vanjske naredbe koje poziva ljuska (npr.
man) (ako samo kroz ljusku pozvali neku od vanjskih naredbi, ona nakon nalaženja u nekom od direktorija navedenih u varijabli okolinePATHostaje spremljena u hash tablici ljuske te je kasnije nalaženje iste naredbe puno kraće) - aliase naredbi (npr.
lsmože biti alias nals --color=auto) - funkcije ljuske (npr.
_expand)
- naredbe koje su ugrađene u ljusku (shell) odnosno hard coded naredbe (npr.
Zadatak
Pronađite još jedan primjer ugrađene naredbe, vanjske naredbe, aliasa i funkcije ljuske.
Dodatni zadatak
Proučite sintaksu i funkcionalnosti naredbe alias. Pronađite praktičnu primjenu ove naredbe.
ToDo
Ovdje bi trebalo dodati dodati i &&, ||, ;, $(), true, false.
Pitanja za ponavljanje
- Što je
bash, a što je shell? - Što su varijable ljuske?
- Koje vrijednosti mogu imati varijable ljuske? Dokažite.
- Zbog čega se vrši izvoz varijable ljuske? Objasnite.
- Gdje se sprema povijest rada s komandnom linijom?
- Koja je razlika između
HISTSIZEiHISTFILE? Što ti nazivi zapravo predstavljaju? - Kako se vrši spremanje novih zapisa u povijest? Što se pritom događa sa starima?
- Što radi naredba !-6?
Author: Vedran Miletić, Vanja Slavuj, Sanja Pavkov, Anja Vrbanjac