Skozi grede > Ropotarnica

Programiranje v Bash

Ukazni skript - Komentarji - Vzdevki - Vhodna substitucija -
Izhodna substitucija - Spremenljivke - Klicni parametri in
spremenljivke - Statusna spremenljivka ukazov - Pogoji in
testiranja - Krmiljenje izvajanja - Funkcije - Vhod in izhod


Ukazni skript

    Ukaze, ki bi jih tipkali neposredno lupini bash v ukazno
    vrstico, lahko zapišemo z urejevalnikom v ukazno datoteko,
    skript, in tega poženemo iz ukazne vrstice. Možni so trije
    načini zagona:

    1) Tekoča lupina naj izvede skript SKRIPT. Spremenljivke,
    definirane v skriptu (glej naprej), bodisi izvozne ali ne,
    naj po končanju ostanejo definirane, to je, dostopne iz
    tekoče lupine:

        $ . SCRIPT

    2) Tekoča lupina naj požene lupino bash (ki je lahko
    enaka ali drugačna od tekoče lupine), ta pa naj izvede
    skript. Skriptne spremenljivke naj po končanju izginejo:

        $ bash SCRIPT

    3) Tekoča lupina naj pogleda prvo vrstico v skriptu in naj
    izvede lupino, ki je v njej zapisana, ta pa naj potem izvaja
    skript. Skript mora imeti dovoljenje za izvajanje.
    Spremenljivke po končanju izginejo:

        $ SCRIPT

    Za zagon lupine bash mora imeti prva vrstica skripta obliko:

        #!/bin/bash


Komentarji

    Vse, kar sledi znaku "#" do konca vrstice, je komentar:

        # Tole je komentar


Vzdevki

    Poljubnemu nizu znakov lahko priredimo njegov vzdevek.
    Kadarkoli potem uporabimo vzdevek, se nadomesti z
    originalnim nizom znakov. Primer:

        alias ll="ls -l"


Vhodna substitucija

    Če hoče kakšen ukaz COMMAND sprejemati znake s stdin, mu
    jih lahko namesto tega posredujemo neposredno iz skripta:

        COMMAND <<"
        tekst
        tekst
        "

Izhodna substitucija

    Vse znake, ki jih kakšen ukaz piše na stdout, lahko
    namesto tega zapiše kar v skript sam. Konstrukcija

        $(COMMAND)

    se v skriptu nadomesti z izhodom ukaza COMMAND. Pri tem se
    znaki za konec vrstic, LF, ne zapišejo.


Spremenljivke

    V skriptu lahko uporabljamo lupinske spremenljivke. Imena
    imajo sestavljena iz črk, številk in podčrtaja. Začnejo
    se s črko. Ni jih treba vnaprej deklarirati. Njihov tip je
    "niz", to je, vsebujejo nize (zaporedja znakov). Preden jih
    napolnimo, so prazne - vsebujejo niz "".

    Spremenljivko X napolnimo z nizom "abc" takole:

        X=abc

    Okrog enačaja ne sme biti presledkov, saj se ti za
    enačajem interpretirajo kot del niza.

    Vsebino spremenljivke X dosežemo s konstrukcijo $X, na
    primer:

        echo $X

    Ime spremenljivke X lahko pišemo tudi kot {X}, če je to
    potrebno, na primer:

        Y=${X}def

    Če ne bi pisali oklepajev, bi se v Y zapisala vsebina
    spremenljivke Xdef, ki morebiti sploh ni definirana in je
    torej prazna.

    Spremenljivko X lahko naredimo izvozno:

        export X

    To pomeni, da je poznana vsem ukazom, ki jih obdelovalna
    lupina poganja.
        

Klicni parametri in spremenljivke

    Skript lahko poženemo s klicnimi parametri, na primer:

        $ SCRIPT abc def

    Znotraj skripta so na razpolago posebne spremenljivke, ki
    vsebujejo informacijo o klicnih parametrih:

        0   Vsebuje ime skripta, torej "SCRIPT"

        1   Vsebuje prvi parameter, torej "abc"

        2   Vsebuje drugi parameter, torej "def"

        #   Vsebuje število parametrov, torej 2

        *   Vsebuje vse parametre kot en sam niz z vmesnimi
            presledki, torej "abc def"


Statusna spremenljivka ukazov

    Vsak ukaz, ki se izvede, zapiše v posebno spremenljivko ?
    status, kako je bil ukaz izvršen:

        ?   Vsebuje "0" ali "1"

    Status skripta ob izhodu določimo z ukazom

        exit 0


Pogoji in testiranja

    Ukazi true, false in test vračajo vrednosti true ali false:

    Ali obstaja imenik?

        test -d DIRNAME

    Ali obstaja datoteka?

        test -f FILENAME

    Ali sta niza X in Y enaka / različna?
    
        test X = Y

        test X != Y

    Ali sta niza N in M, interpretirana kot celi števili,
    enaka / različna itd.:

        test N -eq M

        test N -ne M

        test N -lt M

        test N -gt M


Krmiljenje izvajanja

    Pogojna razvejitev:

        if test izraz
        then
            ukazi
        fi

        if test izraz
        then
            ukazi
        else
            ukazi
        fi

        if test izraz
        then
            ukazi
        elif test izraz
        then
            ukazi
        fi

    Pogojna iteracija:

        while test izraz
        do
            ukazi
        done

    Iteracija:

        for N in 1 2 3 4 5
        do
            ukazi
        done

    Namesto eksplicitno navedenih nizov "1" ... "5" lahko
    uporabimo ukazno substitucijo. Praktični primeri so
    naslednji:

        $*      Vsi klicni parametri

        *.txt   Vse datoteke *.txt v tekočem imeniku


Funkcije

    V skriptu definiram funkcijo FUNCT:

        function FUNCT {
            ukazi
        }

    V telesu funkcije označujejo spremenljivke 1, 2, ... #, *
    parametre funkcije na identičen način, kot v skriptu
    označujejo parametre skripta.

    Klic funkcije z dvema parametroma "abc" in "def":

        FUNCT abc def


Vhod in izhod

    Čitaj s tipkovnice in zapiši v spremenljivke X, Y, Z:

        read X Y Z

    Prva beseda vrstice se zapiše v X, druga v Y, preostanek v
    Z.

    Izpiši na zaslon vsebino spremenljivk X, Y, Z:

        echo $X $Y $Z

    Izpiši na zaslon znak z razširjeno ASCII kodo AB:

        echo -e "\xAB"