Shell скриптинг – позициони параметри

У овом тексту ћемо проћи кроз позиционе параметре у shell скриптингу. Сваки пример ће почети са командом „cat“ која излистава садржај скрипте како би лакше дочарао понашање у реалном раду.

$$

даје PID скрипте унутар које се покреће. Обично се користи зарад праћења извршења скрипте.

[test@kompjuteras ~]$ cat skripta.sh
#!/bin/bash
echo $$ ; sleep 20
[test@kompjuteras ~]$ ./skripta.sh &
[1] 2118
[test@kompjuteras ~]$ 2118

[test@kompjuteras ~]$ ps aux | grep skripta.sh | grep -v grep
test      2118  0.0  0.0 106112  1196 pts/1    S    09:41   0:00 /bin/bash ./skripta.sh

$?

Даје exit code последње команде. Ако је 0 скрипта или команда се добро извршила, ако није нула – постоји нека грешка приликом извршавања

[test@kompjuteras ~]$ hostname -I
192.168.11.101
[test@kompjuteras ~]$ echo $?
0
[test@kompjuteras ~]$ hstnаme -I
-bash: hstname: command not found
[test@kompjuteras ~]$ echo $?
127

У овом примеру смо добили exit code 127 што представља грешку „command not found“. Стандардне exit кодове можете излистати овде. Постоје и нестандардни exit кодови које ви сами можете дефинисати а обично се користе код дебaгинга скрипте или праћења „где је скрипта пукла“. Пример:

# Ако је PID покренуте скрите једнак неком безвезе рендом броју
# нека exit code буде стандардна нула а ако није нека буде 66

[test@kompjuteras ~]$ cat skripta.sh
#!/bin/bash
if [ `echo $$` -ne 8732198732 ] ; then
exit 66
fi

exit 0
[test@kompjuteras ~]$ ./skripta.sh
[test@kompjuteras ~]$ echo $?
66

$@

Више прослеђених улазних параметара разбија на делове, тако да рецимо ./skripta.sh 1 2 3 4 као улазне параметре има „1“, „2“, „3“ и „4“ уместо „1 2 3 4“

[test@kompjuteras ~]$ cat skripta.sh
#!/bin/bash
# Ispisi mi sve ulazne parametre
for i in "$@"
do
        echo "Parametar: "$i
done
[test@kompjuteras ~]$ ./skripta.sh
[test@kompjuteras ~]$ ./skripta.sh jedan dva 3 9
Parametar: jedan
Parametar: dva
Parametar: 3
Parametar: 9

$*

Све прослеђене параметре третира као један (супротно од претходног примера)

[test@kompjuteras ~]$ cat skripta.sh
#!/bin/bash
# Ispisi mi sve ulazne parametre
for i in "$*"
do
        echo "Parametar: "$i
done
[test@kompjuteras ~]$ ./skripta.sh jedan dva 3 9
Parametar: jedan dva 3 9

$#

Даје број прослеђених улазних параметара. Обично се користи код провере – да ли је унесено довољно параметара

[test@kompjuteras ~]$ cat skripta.sh
#!/bin/bash
echo "Skripta ima $# ulaznih parametara"
[test@kompjuteras ~]$ ./skripta.sh
Skripta ima 0 ulaznih parametara
[test@kompjuteras ~]$ ./skripta.sh nč df 3 5 fefe
Skripta ima 5 ulaznih parametara

$0

Даје назив програма или скрипте која се покреће са тренутном путањом

[test@kompjuteras ~]$ cat skripta.sh
#!/bin/bash
echo "Skripta se zove $0"
[test@kompjuteras ~]$ ./skripta.sh
Skripta se zove ./skripta.sh
[test@kompjuteras ~]$ /home/test/skripta.sh
Skripta se zove /home/test/skripta.sh

$1, $2…

Даје параметар који је дати редни број (нпр, $2 даје други прослеђени параметар)

[test@kompjuteras ~]$ cat skripta.sh
#!/bin/bash
echo "Drugi parametar je $2"
[test@kompjuteras ~]$ ./skripta.sh nj ihf asfs
Drugi parametar je ihf

$!

Даје pid најсвежије команде или скрипте. У примеру испод ћемо излистати pid који ћемо на крају убити на мртво…па проверити види ли се тај последњи pid

[test@kompjuteras ~]$ cat skripta.sh
#!/bin/bash
echo "Pid ove skripte je: $$"
sleep 200
[test@kompjuteras ~]$ ./skripta.sh &
[1] 5586
[test@kompjuteras ~]$ Pid ove skripte je: 5586

[test@kompjuteras ~]$ echo $!
5586
[test@kompjuteras ~]$ kill -9 5586
[test@kompjuteras ~]$ echo $!
5586