UNIX je interaktivní operační systém, podporuje zejména sezení uživatele u terminálu. Je to od chodu systému neoddělitelný víceuživatelský stav systému, kdy všechny výpočetnímu systému známé terminály jsou dostupné pro komunikaci s uživatelem. Při vstupu systému do víceuživatelského režimu podle tabulky připojených terminálů je pro každý terminál procesem init (proces s PID=1) startován proces nazývaný getty, který na obrazovku terminálu vypisuje oznámení o připojení k systému, výzvu k přihlášení se. Je to řetězec login:, kterému obvykle předchází jméno konkrétní instalace UNIXu pro odlišení v rámci sítí.
Pokud uživatel napsal správně svoje jméno i heslo, operační systém jej registruje jako přihlášeného, proces login startuje komunikaci pomocí příkazového interpretu Bourne shell.
Proces init jako otec všech procesů v systému vytváří procesy getty, jejichž počet odpovídá logicky existujícím periferiím, přes které uživatel vstupuje do systému; každý getty přepisuje sám sebe (mechanizmem exec) na proces login, a ten následovně opět pomocí exec na proces sh (shell). Ukončí-li uživatel komunikaci (klávesou Ctrl-d), končí činnost procesu sh, proces init tuto skutečnost registruje a vytváří nový proces getty (pomocí fork a pak teprve exec), který vypíše na obrazovku řetězec končící na login:.
Jako výsledný proces v úvodní sekvenci je sh, shell, příkazový interpret. Může jím být i jiný libovolný program např. sběru dat. Jaký program je uživateli po přihlášení pro komunikaci spuštěn, je jednoznačně spojeno se jménem uživatele. V daném okamžiku je v tabulce evidovaných uživatelů oprávněných přihlásit se do systému v souboru /etc/passwd s jedním jménem spojen pouze jeden příkazový interpret. Záměnou jména programu v této tabulce lze dosáhnout jiné komunikace uživatele se systémem.
Nejznámějšími variantami shellu jsou (řazeny dle data vzniku):
emacs
Avšak C-shell nejen připodobnil zápis řídících struktur jazyku C, zavedl numerické proměnné a proměnné typu pole textových řetězců atd., ale pokusil se odstranit i jiné problémy, které Bourne shell neřešil.
> v Bourne shellu na obyčejný soubor znamená vytvoření tohoto souboru, a pokud soubor existuje, jeho zkrácení má nulovou délku a poté naplnění standardním výstupem. Každému takovému nebo jakémukoliv jinému přepisu existujícího souboru přesměrováním můžeme v C-shell zabránit příkazem:
% set noclobber ;: znak vyzvy v C-shell je '%'
který vytvoří proměnnou se jménem noclobber. Takže
% who > kdo
kdo : file exists.
% who >> kdo ;: soubor je chranen i proti rozsireni
kdo : file exists.
% who >>! kdo ;: znak '!' za presmerovanim rusi ochranu
% unset noclobber ;: rusi zamezeni prepisu
&.
% cc program.c >& chyby
je zápis přesměrování standardního chybového výstupu překladače jazyka C do souboru chyby. Přitom je zápis ekvivalentní obdobě ... 2>&1, protože i zde je kanál 1 a 2 spojen. A analogicky platí pro >>& připojení ke standardnímu chybovému výpisu.
Ctrl-z. Pro pokračování v běhu slouží vnitřní příkazy bg (background, na pozadí) a fg (foreground, na popředí), přitom může být příkaz následován číslem práce. Práce (job) je příkaz nebo kolona.
history. Proměnná stejného jména musí být nastavena na hodnotu odpovídající počtu posledních zapamatovaných řádků. Příkaz vypisuje seznam posledních (v našem případě dvaceti) dosud použitých příkazových řádků:
% set history = 20
...
% history
10 who
...
18 ls -l
19 pwd
%
kde v uvedeném výpisu je každý dříve použitý příkaz očíslován. Opakovat některý z příkazů lze pomocí znaku !:
% !128
ls -l
alias má formát
alias [ jmeno [definice] ]
a např.
% alias l "ls -l"
definuje nový příkaz se jménem l, přitom jeho obsah je dán definiční částí ls -l, kterou C-shell jméno nahradí a provede. Může se jednat i o sekvnci příkazů, protože jde o textovou substituci.
tcsh je zdokonalená verze Berkeley C-shellu. Chová se přesně stejně jako standardní C-shell, má však několik desítek nových příkazů, které výrazně zpříjemňují uživatelské prostředí. TC-shell je často označován jako C-shell s kompletací jmen souborů a editací příkazů. Nejpodstatnějšími změnami v porovnání s C-shellem jsou:
man tcsh.
$ jmeno=obsah
kde jmeno je jméno proměnné a obsah je textový řetězec, kterým bude proměnná naplněna. Před a za operátorem "=" nesmějí být mezery. Obsah proměnné je textově substituován na místě, kde jménu proměnné předchází znak $:
$ echo $jmeno
obsah
A může-li nastat kolize, je jméno proměnné uzavřeno mezi znaky { a }:
$ data=/usr/data
$ echo $databaze ${data}baze
informix /usr/databaze
Obsah proměnné lze naplnit také standardním výstupem některého programu. V příkladu
$ dir=`pwd`
je proměnná dir naplněna textovým řetězcem, který za normálních okolností program pwd vypisuje na standardní výstup. Příkaz je uzavřen mezi znaky obráceného apostrofu ` `.
Obsah proměnné můžeme dále naplnit vstupem z klávesnice, to jest ze standardního vstupu, příkaz
$ read vstup
očekává na následujícím řádku vstupu textový řetězec ukončený znakem nového řádku, kterým naplní obsah proměnné vstup. Proměnná vstup nemusela být dříve inicializována.
Vnitřním příkazem set můžeme získat seznam všech proměnných včetně výpisu jejich obsahu:
$ set
HOME=/usr/jan
IFS=
MAIL=/usr/spool/mail/jan
MAILCHECK=600
PATH=/bin:/usr/bin:.
PS1=$
PS2=>
SHELL=/bin/sh
TERM=ansi
TZ=MET-1
jmeno=obsah
databaze=informix
data=/usr/data
dir=/usr/jan
$
Z příkladu vidíme námi definované proměnné jmeno, databaze, data a dir na konci výpisu. Předchází jim seznam proměnných (jejichž jména jsou označena velkými písmeny), které jsme jako uživatelé nedefinovali, ale které byly definovány v okamžiku startu příkazového interpretu. Jejich význam je důležitý pro práci shellu a je následující:
| Proměnná | Její obsah |
| HOME | domovský adresář, |
| IFS | znak pro ukončení vstupu z klávesnice (je nastaven na znak nového řádku, |
| poštovní schránka elektronické pošty uživatele (viz příkaz mail(1)), | |
| MAILCHECK | časový interval, po jehož uplynutí shell hledá změnu v poštovní schránce, |
| MAILPATH | seznam jmen souborů, dalších poštovních schránek uživatele, |
| PATH | seznam cest k programům vnějších příkazů; standardně "/bin", "/usr/bin" a pracovní adresář, |
| PS1 | výzva pro zápis příkazového řádku, |
| PS2 | druhá, pokračovací výzva; uživateli je nabídnuta, pokračuje-li příkaz na více řádcích; uživatel může explicitně stanovit následující řádek jako pokračovací znakem výluky '\' na místě před znakem nového řádku; PS2 bývá nastavena na "> ", |
| SHELL | cesta k programu běžícího interpretu, |
| TERM | typ terminálu, |
| TZ | časová zóna, označení a relativita vzhledem k Greenwitch poledníku. |
Proměnné, které už dále nebudeme potřebovat, lze zrušit vnitřním příkazem unset:
$ unset jmeno databaze data dir
Běžící proces řízený programem /bin/sh vytváří synovské procesy pro uspokojení požadavků uživatele. Synovské procesy pracují v rámci prostředí, kde jsou prováděny (prostředí uživatele), tj. jsou jim pro čtení dostupné obsahy proměnných shellu. Implicitně ale není dostupná žádná z nich, dostupnost je nastavována vnitřním příkazem export, např.
$ databaze=ingres
$ export databaze
stanovujeme viditelnost obsahu proměnné databaze v synovských procesech. Příkaz export bez argumentů vypíše seznam všech exportovaných proměnných.
/etc/termcap.
Informace o nastavení některých speciálních kláves terminálu lze získat příkazem
$ stty -a
Týkají se pouze následujících funkcí:
erase, kill, werase, rprnt, flush, lnext, susp, intr, quit, stop, eof
Jestliže nám aktuální stav na daném terminálu nevyhovuje, můžeme v případě potřeby výše zmíněné funkce terminálu predefinovat a přiřadit jim jiné klávesy.
Implicitní hodnoty speciálních znaků se liší systém od systému. Nastavují se jako `name hodnota', kde jména jsou popsána níže a hodnoty mohou být zadány buď doslovně, nebo pomocí zápisu `^c' (stříška-znak), nebo jako celé číslo, které může začínat `0x' pokud je v šestnáctkové soustavě, `0' pokud je osmičkové soustavě nebo libovolnou jinou číslicí, pokud je v desítkové soustavě. Nastavením hodnoty `^-' nebo `undef' se příslušný speciální znak zakáže.
Předdefinovanou hodnotu , která odpovídá eof, lze změnit na znak [ příkazem
stty eof [
Novou klávesu pro backspace lze nadefinovat příkazem
stty erase vybraná_klávesa
| Bourne shell | C-shell | |
| deklarace lokální proměnné | jméno=hodnota |
set jméno=hodnota |
| deklarace globální proměnné | setenv jméno hodnota |
|
| exportování proměnné | export jméno |
|
| odkaz na proměnnou | $jméno |
$jméno |
| seznam lokálních proměnných | set |
set |
| seznam globálních proměnných | export |
setenv |
| zrušení lokální proměnné | unset jméno |
unset jméno |
| zrušení lokální proměnné | unset jméno |
unsetenv jméno |
| C Shell | .cshrc a pak .login |
| Bourne Shell | .profile |
| Korn Shell | .profile a pak .kshrc |
| TC shell | .tcshrc |
| Bourne Again Shell | .profile a pak .bashrc |