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)
Veriženje ukazov:
while
mesg=``
n========================
n
n
1.. Logirani
n
2.. Direktorij
n
3.. Listanje
n
4.. Izstop
n
n========================
n
n
Izberi:
c''
do
echo -e $mesg
read ukaz
case $ukaz in
1)
echo -e ``
nLogirani so:''; who ;;
2)
echo -e ``
nSi v direktoriju:
c''; pwd ;;
3)
echo -e ``
nVsebina direktorija:''; ls -al ;;
4)
exit ;;
esac
echo -e ``
nPritisni ENTER
c''; read k
done
1. Uporabnikove spremenljivke:
2. Apostrofi in posebni znaki:
3. Prazne in nepostavljene spremenljivke:
4. Substitucija ukazov: (Razlikuj med: `` '' , ' ' in ` ` !)
6. Standardne spremenljivke lupine:
$HOME, $PATH, $LOGNAME, $MAILCHECK, $SHELL, $PS1, $PS2, $TERM, ...
Stavek if:
if pogoj1
then
ukazi1
[ elif pogoj2
then
ukazi2 ]
[ else
ukazi3 ]
fi
Pogojni izrazi - pogoji:
Stavek if:
Operatorji pri pogoju ([ ]) ali testu pogoja (test):
Stavek if:
Primeri:
$ cat sortiraj $ cat vpisi_ime#!/bin/bash #!/bin/bash
# Komentar echo -e ``Vpisi svoje ime:
c''
if test -f $1 read ime
then if [ -n ``$ime'' ] ; then
sort $1 echo -e ``Vpisal si ime $ime
n''
else else
echo -e ``Datoteke ni
n'' echo -e ``Nisi vpisal imena
n''
fi exit 1
fi
$ cat demo_pomik
#!/bin/bash
echo $# : $1 $2 $3 $4 $5 $6 $7 $8 $9
shift
[ $# -gt 0 ]
demo_pomik $*
$ demo_pomik a b c
3 : a b c
2 : a b
1 : a
$
c,
r,
n,
v,
t,
read field1 field2 field3
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
2 Year
``$year
'' out of range ...
exit 1
;;
esac
echo $years
Stavek case:
Operatorji pri evaluaciji izraza (expr):
case `expr $days % 7` in
0)
echo Mon;;
1)
echo Tue;;
. . .
Zanki while in until:
while pogoj until pogojdo do
ukazi ukazi
done done
Primera:
x=0 x=0while [ $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''
(( x >= y ))
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
n''
done done
num=`ls $dir | wc -w`
num=$(ls
$dir | wc -w)
for i in * for i in ${1:-``.''}/*do do
[ -d $i ]
echo $i [ -d $i ]
echo $i
done done
1. Nastavitev premenljivke DISPLAY (v .profile datoteki):
if [ ``$DISPLAY'' = ``'' ]; then
if tty -s ; then
echo -e ``DISPLAY (`hostname`:0)?
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 ]
> /usr/adm/$day
who | wc -l >> /usr/adm/$day
lastday=$day
sleep 600
done
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
$$count
count=`expr $count - 1`
done
echo
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 ]
set - - .
for i in $1/*
do
[ -f $i ]
echo $i
if [ -d $i ] ; then
echo $i
echo ``List the directory ? [yn] ''
listdir
listaj $i
fi
done