U ovom tekstu ćemo proći kroz pozicione parametre u shell skriptingu. Svaki primer će početi sa komandom cat koja izlistava sadržaj skripte kako bi lakše dočarao ponašanje u realnom radu.
U nekim narednim tekstovima ćemo se i inače malo više pozabaviti shell skriptingom, počevši od uvoda.

$$

daje PID skripte unutar koje se pokreće. Obično se koristi zarad praćenja izvršenja skripte.

[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 status poslednje komande. Ako je 0 skripta ili komanda se dobro izvršila, ako nije nula – postoji neka greška prilikom izvršavanja

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

U ovom primeru smo dobili exit code 127 što predstavlja grešku „command not found“. Standardne exit kodove možete izlistati ovde. Postoje i nestandardni exit kodovi koje vi sami možete definisati a obično se koriste kod debugginga skripte ili praćenja „gde je skripta pukla“. Primer:

# Ako je PID pokrenute skrite jednak nekom bezveze rendom broju 
# neka exit code bude standardna nula a ako nije neka bude 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

$@

Više prosleđenih ulaznih parametara razbija na delove, tako da recimo ./skripta.sh 1 2 3 4 kao ulazne parametre ima „1“, „2“, „3“ i „4“ umesto „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

$*

Sve prosleđene parametre tretira kao jedan (suprotno od prethodnog primera)

[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

$#

Daje broj prosleđenih ulaznih parametara. Obično se koristi kod provere – da li je uneseno dovoljno parametara

[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

Daje naziv programa ili skripte koja se pokreće sa trenutnom putanjom

[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…

Daje parametar koji je dati redni broj (npr, $2 daje drugi prosleđeni parametar)

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

$!

Daje pid najsvežije komande ili skripte. U primeru ispod ćemo izlistati pid koji ćemo na kraju ubiti na mrtvo…pa proveriti vidi li se taj poslednji 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