Lupine UNIX in njihovo programiranje 

 Lupine
 Programski konstrukti
 Primer ukazne datoteke
 Spremenljivke
 Sestavljeni stavki
 Primeri

Lupine


Lupina je UNIXov interpreter ukazov.

Lupina razbira in izvaja zaporedja ukazov in programirane akcije (spremenljivke, pogojni skoki, ponavljalne strukture) zapisane v ukaznih datotekah (scripts).

Lupine: sh (Bourne), csh (C), ksh (Korn),
bash (Bourne again shell), tcsh (C-shell variant).

/bin/bash
 

Regularni izrazi:

Omogočajo krajše zapise ukazov (``divje'' oznake)


Programski konstrukti


Veriženje ukazov:

\4e o preusmerjanju:
  • Oba, stdout and stderr v datoteko file
  • $ ls -al >file 2 tex2html_wrap_inline1265 1
    $ ls -al tex2html_wrap_inline1267 file
  • Samo stdout v datoteko file
  • $ ls -al 2 tex2html_wrap_inline1265 1 >file

     


    Primer ukazne datoteke


    while
    mesg=`` tex2html_wrap_inline1273 n======================== tex2html_wrap_inline1273tex2html_wrap_inline1273 n
    1.. Logirani tex2html_wrap_inline1273 n
    2.. Direktorij tex2html_wrap_inline1273 n
    3.. Listanje tex2html_wrap_inline1273 n
    4.. Izstop tex2html_wrap_inline1273 n
    tex2html_wrap_inline1273 n======================== tex2html_wrap_inline1273tex2html_wrap_inline1273 n
    Izberi: tex2html_wrap_inline1273 c''
    do
    echo -e $mesg
    read ukaz
    case $ukaz in
    1)
    echo -e `` tex2html_wrap_inline1273 nLogirani so:''; who ;;
    2)
    echo -e `` tex2html_wrap_inline1273 nSi v direktoriju: tex2html_wrap_inline1273 c''; pwd ;;
    3)
    echo -e `` tex2html_wrap_inline1273 nVsebina direktorija:''; ls -al ;;
    4)
    exit ;;
    esac
    echo -e `` tex2html_wrap_inline1273 nPritisni ENTER tex2html_wrap_inline1273 c''; read k
    done


    Spremenljivke (1)
     

    1. Uporabnikove spremenljivke:

  • $ sv=abcd ( črke, številke, podčrtaji )
  • $ echo $sv
    abcd
  • $ sv=``Kristina in Manca''
  • $ echo $sv
    Kristina in Manca
  • $ ux=UNIX
  • $ echo $ux operating system
    UNIX operating system
    $ echo ${ux}os
    UNIXos
    $ echo ``$ux''os
    UNIXos
  • $ export ux
  • $ doc=/home/doc
  • $ ls -al $doc/*.txt

     

    Spremenljivke (2)
     

    2. Apostrofi in posebni znaki:

  • $ echo $HOME
  • /home/franc
  • $ echo '$HOME'
  • $HOME
  • $ echo tex2html_wrap_inline1341 $HOME
  • $HOME
  • $ echo ``$HOME''
  • /home/franc

     


    3. Prazne in nepostavljene spremenljivke:

  • $ echo $name Manca
  • Manca
  • $ echo ${name:-Kristina} Manca
  • Kristina Manca
    $ echo $name Manca
    Manca
  • $ echo ${name:=Kristina} Manca
  • Kristina Manca
    $ echo $name Manca
    Kristina Manca

     

    Spremenljivke (3)
     

    4. Substitucija ukazov: (Razlikuj med: `` '' , ' ' in ` ` !)

  • $ now=`date`
  • $ echo $now
    Mon Mar 8 09:30:14 EST 1999
  • $ count=10
  • $ echo $count
    10
  • $ count=`expr $count + 1`
  • $ echo $count
    11
    5. Avtomatske spremenljivke lupine:


    6. Standardne spremenljivke lupine:

    $HOME, $PATH, $LOGNAME, $MAILCHECK, $SHELL, $PS1, $PS2, $TERM, ...


    Sestavljeni stavki (1)
     

    Stavek if:

    if pogoj1
    then
    ukazi1
    [ elif pogoj2
    then
    ukazi2 ]
    [ else
    ukazi3 ]
    fi

    Pogojni izrazi - pogoji:


    Sestavljeni stavki (2)
     

    Stavek if:

    Operatorji pri pogoju ([ ]) ali testu pogoja (test):

    1.
    Test dostopa do datoteke (-S datoteka):

    -S: -d, -f, -L, -r, -w, -x
    2.
    Primerjava nizov:

    -n s1, -z s1, s1 = s2, s1 != s2
    3.
    Primerjava numeričnih vrednosti:

    -eq, -ne, -gt, -lt, -ge, -le
    4.
    Logični operatorji:

    !, -a, -o

    Sestavljeni stavki (3)
     

    Stavek if:

    Primeri:

     
    $ cat   sortiraj                 $ cat   vpisi_ime
    #!/bin/bash #!/bin/bash

    # Komentar echo -e ``Vpisi svoje ime: tex2html_wrap_inline1341 c''

    if test -f $1 read ime

    then if [ -n ``$ime'' ] ; then

    sort $1 echo -e ``Vpisal si ime $ime tex2html_wrap_inline1341 n''

    else else

    echo -e ``Datoteke ni tex2html_wrap_inline1341 n'' echo -e ``Nisi vpisal imena tex2html_wrap_inline1341 n''

    fi exit 1

    fi

    $ cat demo_pomik
    #!/bin/bash
    echo $# : $1 $2 $3 $4 $5 $6 $7 $8 $9
    shift
    [ $# -gt 0 ] tex2html_wrap_inline1259 demo_pomik $*
    $ demo_pomik a b c
    3 : a b c
    2 : a b
    1 : a
    $

    tex2html_wrap_inline1341 c, tex2html_wrap_inline1341 r, tex2html_wrap_inline1341 n, tex2html_wrap_inline1341 v, tex2html_wrap_inline1341 t, tex2html_wrap_inline1383
    read field1 field2 field3


    Sestavljeni stavki (4)

    Stavek case:

    case niz in
    izraz1)
    ukazi1
    ;;
    izraz2)
    ukazi2
    ;;
    [ *)
    ukazi3
    ;; ]
    esac

    Primer:

    case ``$year'' in
    [0-9][0-9])
    year=19${year}
    years=`expr $year - 1901`
    ;;
    [0-9][0-9][0-9][0-9])
    years=`expr $year - 1901`
    ;;
    *)
    echo 1 tex2html_wrap_inline1265 2 Year tex2html_wrap_inline1273 ``$year tex2html_wrap_inline1273 '' out of range ...
    exit 1
    ;;
    esac
    echo $years


    Sestavljeni stavki (5)
     

    Stavek case:

    Operatorji pri evaluaciji izraza (expr):

    case `expr $days % 7` in
    0)
    echo Mon;;
    1)
    echo Tue;;
    . . .

    1.
    Primerjava številčnih vrednosti ali nizov:

    tex2html_wrap_inline1443tex2html_wrap_inline1445 , =, !=, tex2html_wrap_inline1443 =, tex2html_wrap_inline1445 =
    2.
    Aritmetične operacije:

    +, -, tex2html_wrap_inline1273 *, /, % ( !=0 -> true; =0 -> false )

    Sestavljeni stavki (6)
     

    Zanki while in until:

     
    while pogoj                      until pogoj
    do do

    ukazi ukazi

    done done

    Primera:

     
    x=0                              x=0
    while [ $x -lt 5 ] until [ $x -ge 5 ]

    do do

    let x=x+1 let x=x+1

    echo $x echo $x

    done done

    \2e nastopajo oklepaji, potem: let ``x=x+(1*6)-(3/1)''

    Operatorji pri let:
    ! ; * / % ; + - ; <= >= < > ; == != ; =
    Prioriteta: <-

    let ``x >= y'' tex2html_wrap_inline1481 (( x >= y ))


    Sestavljeni stavki (7)
     

    Zanka for:

    for spremenljivka in lista_besed
    do
    ukazi
    done

    break, continue: for, while, until

    Primeri:

     
    for dir  in   /dev  /usr  /bin           for i in `ls`
    do do

    num=`ls $dir | wc -w` cp $i /users/franc/$i

    echo ``V $dir je $num datotek'' echo ``$i je prekopiran tex2html_wrap_inline1273 n''

    done done

    num=`ls $dir | wc -w`tex2html_wrap_inline1481 num=$(ls $dir | wc -w)

     
    for   i   in   *                         for   i   in   ${1:-``.''}/*
    do do

    [ -d $i ] tex2html_wrap_inline1259 echo $i [ -d $i ] tex2html_wrap_inline1259 echo $i

    done done


    Primeri (1)
     

    1. Nastavitev premenljivke DISPLAY (v .profile datoteki):

    if [ ``$DISPLAY'' = ``'' ]; then
    if tty -s ; then
    echo -e ``DISPLAY (`hostname`:0)? tex2html_wrap_inline250 c'';
    read DISPLAY
    fi
    if [ ``$DISPLAY'' = ``'' ]; then
    DISPLAY=`hostname`:0
    fi
    fi
    export DISPLAY

    2. Spremljanje gostote uporabnikov na sistemu (set):

    #!/bin/bash
    lastday=never
    while true
    do
    set - - `date`
    day=$1
    [ $dat != $lastday ] tex2html_wrap_inline268 > /usr/adm/$day
    who | wc -l >> /usr/adm/$day
    lastday=$day
    sleep 600
    done


    Primeri (2)

    Ukaz set:

    Za prikaz nastavljenih spremenljivk okolja, sicer pa za nastavitev notranjih opcij lupine ali nastavitev vrednosti pozicijskih parametrov lupine.

     
    -a               Avtomatska globalizacija spremenljivk
    -v Izpisuj vhodni tok kot je prečitan

    - - Opcije nimajo učinka

    3. Evaluacija spremenljivk (eval):

    #!/bin/bash
    count=$#
    while test $count -gt 0
    do
    eval echo -e tex2html_wrap_inline284 $$count
    count=`expr $count - 1`
    done
    echo


    Primeri (3)
     

    4. Listanje direktorijev (funkcije):

    #!/bin/bash
    listdir()
    {
    while true
    do
    read ans
    case $ans in
    [yY]) return 0 ;;
    [nN]) return 1 ;;
    *) echo ``Please answer y on n''
    esac
    done
    }
    [ $# -eq 0 ] tex2html_wrap_inline268 set - - .
    for i in $1/*
    do
    [ -f $i ] tex2html_wrap_inline268 echo $i
    if [ -d $i ] ; then
    echo $i
    echo ``List the directory ? [yn] ''
    listdir tex2html_wrap_inline268 listaj $i
    fi
    done