Dupa ce procesul login a aflat numele utilizatorului si a verificat corectitudinea parolei, el schimba catalogul curent cu directorul respectivului utilizator (indicat in fisierul /etc/passwd) si lanseaza in executie programul al carui nume figureaza in ultimul camp al aceleiasi intrari in /etc/passwd. Acest program este, de obicei, un interpretor de comenzi. Lansarea sa in executie are loc fara crearea unui proces nou, procesul login fiind practic inlocuit cu noul program.
Interpretorul de comenzi lucreaza asemanator interpretoarelor de comenzi din sistemele de operare cunoscute deja:afiseaza un prompt, preia comanda si argumentele si, daca acea comanda este comanda interna o executa; in caz contrar numele comenzii este folosit pentru identificarea unui fisier executabil care este incarcat si executat. Dupa terminarea executiei comenzii reapare promptul ce invita utilizatorul sa introduca o noua comanda. In termeni de proces, mecanismul de executie al comenzilor a fost prezentat in capitolul precedent.
Observatie: Spre deosebire de alte sisteme de operare, unde interpretorul de comenzi este un program privilegiat (vezi command.com), in Unix shell-ul este considerat ca fiind un program obisnuit, neavind prioritate mai mare decat alte procese.
Shell-ul nu face parte din nucleul sistemului de operare. Exista mai multe interpretoare disponibile, utilizatorul putand sa ceara incarcarea celul dorit de el. Se poate lansa chiar un interpretor scris de utilizator, daca acesta e capabi de asa ceva Cele mai cunoscute interpretoare de comenzi sunt:sh(shell), csh (C-shell), ksh (KornShell),bash(Borne Again Shell).
Toate comenzile au urmatoarea sintaxa:
$ comanda
Comanda reprezinta o comanda interna (executata direct de shell) sau numele
unui program executabil, cautat in urmatoarea secventa:
Celelalte campuriale comenzii definesc parametrii comenzii si se numesc argumente. Ele sunt separate prin blank-uri. Se pot introduce mai multe comenzi pe aceeasi linie daca le saparam prin ';'
Multe dintre argumentele unei comenzi sunt nume de fisiere, de aceea au fost introduse niste metacaractere (caracterele jocker) pentru a ne putea referi la o multime de fisiere. Metacaracterele sunt urmatoarele:
Exemple de folosire a metacaracterelor:
*.pas -toate fisierele sursa Pascal;
ex?.txt -toate fisierele text care au prefixul 'ex '
ex[1-9] -indica fisierele ex1,ex2,ex8;
prob[37]-indica fisierele prob3 si prob7;
pro[*?] -indica toate fisierele care incep cu 'pro' si se continua cu
un sir de caractere oarecare, precum si fisierele cu numele format din 4
caractere, primele trei fiind 'pro'
Dupa initializarea sesiunii de lucru, Shell deschide 3 fisiere standarad (0,1,2) pentru intrare, iesire si afisarea erorii.Ele sunt atribuite implicit tastaturii si, respectiv, ecanului. In momentul in care interpretorul lanseaza programul asociat unei comenzi, acesta mosteneste si fisierele deschise, deci si pe cele standard. Programele devin astfel independente de dispozitivele fizice asociate de shell fisierelor standard.Interpretorul permite redirectarea fisierelor standard de intrare/iesire spre alte fisiere sau periferice.De exemplu, daca un program are ca iesire standard ecranul, putem trimite datele (prin operatia de redirectare) catre un fisier text specificat.