Proces
PID
Adresový prostor
Uživatelské rozhraní
Shell
Obecný formát příkazového řádku
Druhy příkazů
Ukončovací kód
Lexikální analýza příkazového řádku
Operátory přesměrování
Rezervovaná slova
Řídící znaky
Backslash
Apostrof
Uvozovky
příklad
Přesměrovávání vstupů a výstupů
File deskriptor number
Deskriptor souboru
Implicitní varianty
Přesměrovávání vstupů
Přesměrovávání výstupů
Příklad
Příklady
Připojení souboru na konec výstupu
Vstup dokumentu ze stejného zdroje jako příkazy
Přesměrování vstupu a výstupu 3
n>&m
Zavření vstupu nebo výstupu
Otevření deskriptoru pro vstup a výstup
Filtry, roury
Filtr
Roura
Kolona
Kolony
Kolona
Spouštění příkazu na pozadí
Démon
Parametry
Proměnné
Výpis nastavených proměnných - set
Proměnné 2
Zrušení proměnných
Dědění proměnných potomky - export proměnná
Čtení obsahu proměnných ze standardního vstupu - read
touch
Proměnné 3
Některé proměnné
užívané shellem
Poziční parametry
Zvláštní parametry
Zvláštní parametry
Shell Script
Čtení skriptu
Čtení a provádění scriptu
Spuštění skriptu
Proces
Proces je prováděný program včetně jeho dat (image).
*Každé spuštění téhož programu vytvoří jiný proces. Procesy jsou jednoznačně evidovány podle jejich pid.
Jádro přidělí pid procesu při jeho vytvoření.
Nový proces vznikne na základě volání jádra
pid = fork()
tak, že jádro vytvoří kopii volajícího procesu. Vytvořený proces vrací svůj pid volajícímu procesu.
Mezi kopií a původním procesem je rozdíl pouze v proměnné pid.
Ke každému procesu se váží
· reálné UID - identifikace uživatele, který je zodpovědný za proces
· efektivní UID ke kontrole přístupových práv
Jádro pro správu procesu zabezpečuje jejich dynamické vytváření a rušení, jejich synchronizaci a plánování a přidělování paměti.
Provádění procesu má dvě fáze
· uživatelskou - kde se provádějí instrukce podle programu.
· systémovou - do které se přepne po volání jádra - systém se přepne do adresového prostoru jádra a provádí se instrukce uložené v tomto jádře.
Jádro eviduje procesy pomocí datových struktur
· tabulka struktur (vytvořených a dosud nezrušených)
· tabulka textů programů
· kontext procesu
· adresový prostor procesu - jediný viditelný uživatelem (ostatní jsou pouze záležitostí jádra
Adresový prostor se skládá z
· kód programu - textová část nebo programový segment - obsahující neměnné instrukce a konstanty
· datová část - proměnné globálního charakteru
· zásobník (vytváří se od konce prostoru proti datům) * jádro reaguje na překročení hranice s daty
Volání fork jádra vytvoří novému procesu kopii všech datových struktur, tedy i adresového prostoru. Nový proces zdědí jak programový segment tak i datový a zásobník.
Volání exec jádra, kterým se spustí proces, umožní procesu výměnu adresového prostoru ale datové struktury jádra zůstávají stejné - tj. pid zůstává mění se program
Pokud nový proces provádí exec, starý shell-rodič čeká voláním jádra wait na dokončení práce potomka.
Shell potomek zdědí po rodičích otevřené soubory, deskriptory souborů
Uživatelské rozhraní
Shell
neboli interpret programovacího jazyka. Čte příkazy ze souboru nebo terminálu a provádí je.
Verze shellu
· Bourne shell (sh)
· C-shell (csh)
· Korn shell (ksh)
· Bourne-again shell (bash)
Uživateli se spustí shell, který má uvedený v /etc/passwd
( při spuštění jiného shellu než je login shell se v domovském adresáři hledá soubor .bashrc)
Obecný formát příkazového řádku:
arg0 arg1 arg2 ...
kde řetězec arg0 je vždy jméno příkazu. Jsou odděleny mezerou
Druhy příkazů:
· vnitřní
· vnější
arg0 se nejprve hledá v seznamu vnitřních příkazů a potom podle seznamu cest proměnné PATH
Ukončovací kód (exit status):
Každý příkaz při svém ukončení vrací numerický stav.
· Hodnota 0 znamená OK.
· Nenulová hodnota značí chybu.
Lexikální analýza příkazového řádku
Shell čte ze vstupu slova (posloupnost znaků jako nedělitelná jednotka) vzájemně oddělená
· bílým místem (mezera, tabulátor) - oddělovače argumentů
· operátory:
o Řídicí operátory:
§ &
§ (oddělovač seznamu)
§ (práce na pozadí)
§ && (oddělovač seznamu - logický AND (pokud první skončil OK))
§ ( ) (seznam se provede jen v kopii shellu)
;
§ (ukončení seznamu)
§ (oddělovač seznamu - provádění sekvenční)
§ ;; (oddělovač seznamu)
§ | (kolona)
§ || (oddělovač seznamu - log OR - druhý jen když první skončil False)
§ nový řádek
o Operátory přesměrování:
§ <
>
§ >| (povolení přesměrování - násl. stránka)
<<
>>
§ <& (přesměrovávání spojené s deskriptory)
§ >& (přesměrovává stand. výstup i chybová hlášení)
§ <<- (přesměrování s vynecháním tabulátorů na začátku řádku (viz přesměrování))
§ <> (otevření deskriptoru pro vstup i výstup)
Bílá místa a řídící operátory tvoří tzv. metaznaky,
Rezervovaná slova
mají v shellu zvláštní význam, pokud není jejich význam potlačen (apostrofy, ..). Jsou to
! (negace) case do done elif else fi for function if in select then until while { } (provede se jen v aktuálním shellu, nikoli v kopii)
Řídicí znaky
Obrácené lomítko (backslash)
Znak následující za \ ztrácí svůj řídicí charakter a stává se normálním znakem.
Výjimka: \ na konci řádku (\nový řádek) sděluje, že další řádek je pokračováním tohoto.
Apostrof (single quote)
Uzavřením znaků mezi dva apostrofy ‚...‘ znaky ztrácejí svůj řídicí význam (vyjma ‚).
Uvozovky (double quotes)
Uzavřením znaků do dvojice uvozovek „...“ ztrácejí znaky svůj řídicí význam vyjma:
· $ (dolar)
· ‚ (obrácený apostrof)
· \ (obrácené lomítko)
· Obrácené lomítko uvnitř dvojice uvozovek lze použít pouze pro:
\$ \‚ \“ \\ \nový řádek
Jinak se \ interpretuje jako normální znak.
Přiklad:
Vyzkoušejte si příkazem echo
echo \‘
echo ‚\‘
echo \\
echo „ ‚ „
echo „\‘ „
touch muj\ soubor
:
Přesměrování vstupu a výstupu
Přesměrování znamená převod dat ze/do standardních vstupů a výstupů do jiného vstupu/výstupu
Každý proces má k dispozici parametrem jádra 50 - 60 komunikačních kanálů pro manipulaci se soubory. Otevření souboru znamená alokaci kanálu. Každý proces dědí tabulku otevřených kanálů.
Standardní kanály jsou 0 - vstup, 1 - výstup, 2 - chybový výstup. Tato čísla jsou čísla souborových deskriptorů.
Shell požadované přesměrování-propojení zajistí před provedením příkazu.
File descriptor number (n)
Proces od svého rodiče dědí i vlastnosti. Na otevřený proces se shell odvolává deskriptorem. Souborový deskriptor je celé nezáporné číslo. Přiděluje se při otvírání nebo vytváření souboru.
Při interpretaci příkazu shell rozděluje příkaz do řetězců.
Přesměrování má tvar
příkaz n>soubor
příkaz n<soubor
kde n je číslo deskriptoru
Deskriptor souboru
Každý proces má nastaven deskriptor na :
· 0 tzv. standardní vstup - vstup z klávesnice
· 1 tzv. standardní výstup - výstup na obrazovku
· 2 tzv. standardní chybový výstup - výstup na obrazovku
· 3 ... Další si nastavuje programátor.
První 3 deskriptory mají výsadní postavení.
Implicitní varianty:
· 1> je totéž co > přesměrování standardního výstupu
· 0< je totéž co < přesměrování standardního vstupu
Přesměrování vstupu:
· příkaz n< soubor soubor musí existovat
obecně n<&m
Přesměrování výstupu:
· příkaz n> soubor
o Pokud soubor neexistuje, vytvoří se
o Pokud soubor existuje, v okamžiku otevření se zkrátí na velikost 0 a bude se přepisovat
o Pokud však byl proveden příkaz „set -C“ (nebo „export noclobber=“), potom nelze přesměrovat výstup do existujícího souboru. Toto omezení odstraní operátor „>|“
Příklad:
sort < netrid > trid
vstup netrid, provede se příkaz sort a výstup se uloží do trid
jiný zápis
sort O<netrid 1>trid 2>error
Přesměrování vstupu a výstupu (2)
Příklady:
Potřebujeme vytvořit chybové hlášení - neexistující soubor :neni“
Vytvořit jeden existující soubor „text „
$ ls neni text
ls: neni: No such file or directory
text
Přesměrování do souborů
$ ls neni text > a 2> b
Nesmí se použít: ls > a > b
Soubor ‚a‘ zůstane prázdný (prvně se vytvoří přesměrování a tedy ls se přesměruje přímo do souboru b) , soubor ‚b‘ se naplní stand. výstupem.
Problém lze řešit např.:
ls | tee a > b
kde příkaz tee (téčko) kopíruje standardní vstup na standardní výstup a do všech zadaných souborů
Příkaz
time ls > mereni 2>&1
1 | 2 | 3 příkazy č.
time změří čas potřebný pro vykonání příkazu ls a zapíše ho do souboru merení včetně chybových výpisů, tj. informaci o čase.
Připojení výstupu na konec souboru
· příkaz n>>soubor
o Pokud soubor neexistuje, vytvoří se.
o n je deskriptor
Vstup dokumentu ze stejného zdroje jako příkazy
· příkaz n<<ukončení
o ‚ukončení‘ je symbol konce vstupu (řetězec označující konec vstupu)
o Řetězec ‚n<<ukončení‘ musí být bez mezer.
Příklad: mail novak<<EOF
První řádek dopisu
Druhý řádek dopisu
EOF
o Ve variantě ‚n<<-ukončení‘ se vypouštějí všechny znaky TAB na začátku čtených řádků.
Příklad: mail novak<<-EOF
První řádek dopisu
Druhý řádek dopisu
EOF
:
Následující
Přesměrování vstupu a výstupu (3)
Přesměrován výstupu e výhodné používat při opakovaném spuštění programu (např. s různými parametry) a analýze výsledků.
Přesměrovací znaky > >> nelze použít pro přesměrování chybových hlášení, které jsou také standardní výstupy.
V tomto případě se za přesměrovátko přidává ampersand.
Použití souboru spojeného s jiným deskriptorem:
n>&m
Použije se soubor spojený s deskriptorem ‚m‘ i pro výstup deskriptoru ‚n‘.
‚n‘ je implicitně 1 (stand. výstup).
Příklad:
ls neni text 2>&1 > dirlist
Deskriptoru 2 se přiřadí terminál a deskriptoru 1 se přiřadí soubor dirlist.
Není-li uvedeno ‚n‘ a ‚m‘, potom >& slouží jako operátor přesměrování stand. výstupu současně stand. chybového výstupu do jednoho souboru:
Příklad:
ls neni text>& vse
n>&m
Totéž, ale pro vstup:
Použije se soubor spojený s deskriptorem ‚m‘ i pro vstup z deskriptoru ‚n‘.
‚n‘ je implicitně 0 (stand. vstup).
Zavření vstupu nebo výstupu:
n<&-
n>&-
Otevření deskriptoru pro vstup i výstup:
n<>soubor
Filtry, roury
Oblíbenými programy jsou roury, které vystačí se standardními vstupy a výstupy. Proto se často používají s přesměrováním
Filtr
· čte data ze standardního vstupu
· ukládá data na standardní výstup
· synchronizaci zajišťuje shell
Příklad:
Příkaz ls vypisuje z pracovního adresáře na terminál seznam souborů. jejich počet lze určit příkazem wc
Příkaz wc -l spočte řádky vstupního souboru a vypíše je na obrazovku
$ ls >temp
$ wc -l <temp
16
$ rm temp
Přednosti filtrů jsou vidět až ve spojení s rourou.
Roura
Mechanismus odstraňující používání pomocných souborů se nazývá roura - pipe. Roura je prostředek pro spojení dat dvou procesů.
· je to systémová vyrovnávací paměť
· jeden proces - program do ní ukládá - PRODUCENT , druhý proces odebírá data - KONZUMENT
· jádro zajišťuje jejich synchronizaci
· operátor | propojuje standardní výstup příkazu předchozího (producentu) se standardním vstupem následujícího příkazu (konzumentu). To znamená, že jednotlivé příkazy se oddělují operátorem |
Příklad:
stejný příklad jako u filtru
$ ls | wc -l
15
$
Programy spojené rourou se nazývají kolona, tzn. že i celý příkazový řádek nazýváme kolonou.
:
Kolony
Programy spojené rourou se nazývají kolona.
Kolona
syntaxe
příkaz1 | příkaz2 [| příkaz3 ...]
· jednotlivé příkazy jsou propojeny rourou
· kolonu mohou tvořit dva nebo více příkazů
· ukončovacím - návratovým kódem kolony je ukončovací - návratový kód posledního příkazu
· kolona se utvoří před přesměrováním
· každý příkaz kolony se provádí jako separátní proces a provádí se ve vlastní kopii shellu. Kopie vzniká voláním fork
· pro sousední příkazy zřizuje rouru
· zápisem
! příkaz1 | příkaz2 [| příkaz3 ... ]
se ukončovací kód kolony neguje
· Negace ukončovacího kódu znamená
o 0 se mění na 1
o nenulová hodnota se mění na 0
· zápisem
příkaz1 2>&1 | příkaz2
se na standardní vstup příkazu2 předá jak standardní výstup, tak i standardní výstup 2 příkazu1. (V tomto případě nelze číslo deskriptoru za ampersandem vypustit.)
Příklad:
ls |more
Některé příkazy jsou typickým zdrojem dat (příkaz1 - začátek kolony)
ls, who, ps (výpis seznamu aktivních procesů),
jiné jsou používány uprostřed kolony
sort, wc (výpis počtu řádků) grep (výpis určitého řádku), pr (formátování textu pro tiskárnu), lpr (dá data do fronty tiskárny)
tyto příkazy jsou naprogramovány jako filtry
Spuštění příkazu na pozadí
příkaz1 &| příkaz2 & [| příkaz3 & ...]
· shell příkaz spustí asynchronně - tj. nečeká na dokončení
· Standardní vstup takto spuštěného procesu je napojen na /dev/null
· Na takto spuštěný proces se nevztahuje znak intr
:
Démon
neboli daemon
je
· systémový proces řízený programem
· čeká v paměti na určitou událost, kterou se aktivuje
· nesouvisí s žádným terminálem
· vytvořen při počátečním spuštění OS
· jejich seznam (serverových démonů) je uložen v /etc/inittab a /etc/ined.conf
Typickým příkladem démona je
· lpd zařazuje do tiskové fronty ( -m si vyžádá zprávu)
· /etc/atrum (aktivuje příkazy v určitém čase)
· zápis vyrovnávací paměti na disk
· ftpd démon zajišťující žádost o spojení
Parametry
Pod pojmem parametr chápeme entitu, ve které je uložena hodnota.
Parametry jsou
· proměnné
· poziční parametry
· zvláštní parametry
Proměnné
jsou implicitně jednoho typu - textové proměnné (pro interpretační jazyk shell). Nerozlišují se textové a numerické. Všechny hodnoty se ukládají jako řetězce
· skládá se ze jména (VELKÝMI PÍSMENY) a obsahu, který může být i prázdný řetězec. I v tomto případě je proměnná definována. Proměnné bez přiřazené hodnoty fungují např. jako přepínače
· je uložena v paměťovém prostoru jako dvojice jméno - obsah
· tvoří prostředí shellu
· Deklarace a přiřazení hodnoty proměnné (uživatel vytváří současně jak proměnnou, tak i její hodnotu):
o jméno=[hodnota]
kde hodnota je řetězec (i prázdný) podléhající všem dosud popsaným expanzím (nepodléhá ‚*‘ expanzi, viz dále).
Pokud se nezadá hodnot, je hodnotou prázdný řetězec
o jméno=‘příkaz‘
naplnění proměnné pomocí příkazu shellu
např.:
DIR=‘pwd‘
naplní obsah proměnné dir cestou do pracovního adresáře
o JMENO=$JMENO2
naplní proměnnou JMENO obsahem proměnné JMENO2
Před a za operátorem = nesmí být mezery
· Vyvolání proměnné je možné dvěma způsoby:
o $jméno
Používá se tam, kde je jasný konec jména proměnné
o ${jméno}
složené závorky se používají tam, kde je to nutné pro jasnou identifikaci proměnné.
Příklad.
ADRESAR=/home/novak/vyuka/unix
ls $ADRESAR
mkdir $ADRESAR/projekt
ls ${ADRESAR}
vytvoří adresář /home..../unix
mkdir ${ADRESAR}NEW
vytvoří adresář /home..../unixNEW
zde je nutné použít pro jméno proměnné závorky
Výpis nastavených proměnných:
syntaxe
o set
o set|more
· Řada proměnných je nastavena automaticky při spuštění shellu
· některé z automaticky nastavených proměnných nelze měnit ani rušit
Proměnné (2)
Zrušení proměnných:
syntaxe vestavěného příkazu
unset proměnná ...
některé systémové proměnné nelze rušit ani měnit
Označení proměnných určených k exportování do potomků:
Spuštěním shellu ze shellu vzniklý potomek-shell vždy po rodiči dědí i prostředí. Pro dědění proměnných potomky musí být proměnné explicitně označené. Jinak se nedědí.
Při skončení shellu-potomka se jeho prostředí ztrácí Pokud v shellu-potomkovi změníme nebo vytvoříme proměnnou, změny se s ukončením shellu ztrácí
Syntaxe
export proměnná ...
V některých shellech lze současně nastavovat a exportovat:
export proměnná=[hodnota]
Načítání obsahu proměnných ze standardního vstupu:
syntaxe
read proměnná ...
Příkaz čte ze standardního vstupu slova a přiřazuje je do proměnných. Při čtení se provedou všechny expanze vyjma ‚*‘.
Příklad:
echo Zadej adresář a soubor, \
které se mají vytvořit:
dlouhý příkaz
read ADRESAR SOUBOR
mkdir $ADRESAR 2>/dev/null||\
echo Chyba při vytváření $ADRESAR
opět dlouhý příkaz. Pokud se adresář nevytvořil, není ani chybový výpis a tedy || tj. O Rem se musí zadat chybový výpis
touch $ADRESAR/$SOUBOR
Příkaz touch je příkaz pro nastavování časových údajů souboru. Většinou se používá jeho vedlejší efekt - tj. pro zakládání prázdných souborů (viz zde)
Proměnné (3)
Některé proměnné užívané shellem
HOME
Domovský adresář pro příkaz „cd bez parametru“ apod.
PWD
Běžný (pracovní) adresář; pwd (echo $PWD).
OLDPWD
Předchozí běžný adresář; cd -
Jméno souboru s poštovní schránkou uživatele.
PATH
Seznam (posloupnost) adresářů prohledávaných při spouštění souboru. Jedná se tedy o cesty k binárním souborům. Implicitně je nastavena cesta
PATH=:/bin:/usr/bin
tzn. první je pracovní adresář pak adresář /bin a nakonec /usr/bin,
MANPATH
Seznam adresářů prohledávaných příkazem man
PS1
Řetězec primárního promptu (implicitně $).
PS2
Řetězec sekundárního promptu - pokračovací prompt - (implicitně >), tj. prompt pokračovacích řádků; vypíše se, pokud shell nerozezná z dosavadního řádku příkaz.
IFS
Internal Field Separator - oddělovače polí (argumentů) v příkazu. Proměnná normálně (implicitně) obsahuje: mezeru, tabulátor, nový řádek.
USER jméno uživatele
Poziční parametry
Poziční parametr je pojmenován číslem větším než 0. Parametr s číslem 0 patří do zvláštních parametrů, a značí jméno souboru.
Zápis pozičních parametrů je dvojím způsobem
$1 $2 $3 ... $9
${1} ${2} ${3} ... ${9} ${10} ${11} ...
Shell poziční parametry implicitně nastavuje na hodnoty argumentů
uvedených na spouštěcím řádku při svém spuštění a nebo příkazem set.
Tzn. že prostřednictvím pozičních parametrů se přebírají ve skriptech argumenty z příkazového řádku jako proměnné skriptu.
Příklad:
Nechť je vytvořen skript s obsahem
echo $1 $2 $9 ${10}
Voláním
$skript a b c
a b
$
Vypsaly se pouze parametry 1 a 2
Explicitně se poziční parametry nastavují příkazem set následovně:
set—a b c
echo $1 $2 $3
Příkaz pro změnu pozice parametrů je
shift [n]
Příkaz „posune“ obsahy pozičních parametrů o n míst (popř.o jedno doleva). Počet pozičních parametrů ($#) se sníží o n (jeden).
Zvláštní parametry
Shell zpracovává některé parametry zvláštním způsobem. Do těchto parametrů nelze zapisovat, jejich obsah se dá jenom číst.
Jedná se o tyto parametry
$* vyvolá všechny parametry
$@ cca dtto
$# udává počet aktivních parametrů
$? vytvoří návratový kód posledního příkazu
$- seznam aktuálních voleb shellu
$$ číslo aktuálního procesu
$! číslo procesu běžícího na pozadí
$0 jméno běžícího souboru
$_ poslední argumend expandovaného předcházejícího příkazu
Zvláštní parametry
Shell zpracovává některé parametry zvláštním způsobem. Do těchto parametrů nelze zapisovat, jejich obsah se dá jenom číst. Tyto proměnné jsou aktualizovány podle současného stavu.
Jedná se o tyto parametry
$* Expanduje se do pozičních parametrů od prvního do posledního zadaného, tj. nahrazuje všechny zadané posiční parametry
Je-li parametr uveden uvnitř dvojice uvozovek, expanduje se do jednoho slova tak, že se parametry oddělí prvním znakem uvedeným v IFS (nebo mezerou, není-li IFS).
Voláním skript 1 2 ‚3 4‘ 5 skriptu
#!/bin/sh
IFS=! oddělovač nastaven na !
echo „$*“
Vypíše 1!2!3 4!5
$# Expanduje se do počtu pozičních parametrů, tj. udává počet pozičních parametrů
#!/bin/sh
if [ $# = 0 ]; then
echo Příkaz se spouští s těmito parametry ... výpis nápovědy
exit 1
fi
$? Expanduje se (vypíše) do návratového kódu posledního dokončeného procesu.
#!/bin/sh
mkdir adresar 2> /dev/null
if [ $? != 0 ]; then
echo Chyba ...
fi
$- Expanduje se do řetězce znaků zadaných jako volby (tohoto interpretu).
$$ Expanduje se do čísla procesu shellu, který provádí expanzi (viz typický příklad na vytvoření pomocného souboru jedinečného jména).
#!/bin/sh
TEMP=/tmp/pomocny.$$
touch $TEMP
...
rm $TEMP
$! Expanduje se do čísla nejposlednějšího procesu spuštěného na pozadí.
yes &
sleep 2
kill $!
$0 Expanduje se do uživatelem zadaného jména skriptu.
Shell skript - scénář
Příkazy pro shell nemusí být zadávány z terminálu.
Proveditelný textový program obsahující příkazy pro shell - obdoba batch v DOS.
Soubor s příkazy pro shell se nazývá skript.
Soubor ‚skript‘ lze číst
· Přístupové právo ‚r‘
· Spuštění ve vnořeném shellu:
sh skript
Soubor ‚skript‘ se hledá v běžném adresáři a $PATH
· Spuštění v běžném shellu:
. skript
Souboru ‚skript‘ se hledá v $PATH a v běžném adresáři.
Soubor ‚skript‘ lze číst a provést
musí se přidat právo proveditelnosti, pak se nemusí volat sh, ale spouští se přímo
· Přístupová práva ‚rx‘
· Spuštění ve vnořeném shellu:
skript
Soubor ‚skript‘ se hledá v $PATH
Shell skript se provede vždy tím programem (shellem), ze kterého byl spuštěn.
Program, kterým se shell skript má provést, lze specifikovat na prvním řádku od prvního sloupce:
#!/bin/sh
· Soubor se shell skriptem musí být vždy čitelný ®.
· Shell skript <B>nelze SUID, SGID.
Komentáře (poznámky) lze psát za znak ‚#‘ (znak je buď na začátku řádku, nebo jej bezprostředně předchází bílé místo).
Argumenty ve scriptu se označují prefixem $ posiční parametry.
Příklad:
vytvořen tel seznam
Antonín Doušek 345
....
Pak skriptem se jménem tel obsahujícím
grep $1 telefony
a voláním
tel Antonín
se vypíší všechny řádky tel. seznamu kde je Antonín.
Spuštění skriptu
Skript se v nastaveném shell spouští „.“ na místě příkazu
. tel