UNIX

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 -

MAIL

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 &amp;

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