[Bourne Shell]
[Pagina anterioara] [Pagina de continut] [Pagina urmatoare]

Gramatica Shell


Comenzi simple


O comanda este o secventa de atribuiri (optionale) urmate de cuvinte separate de spatii si redirectari, terminate cu un operator de control (||, &, &&, ; , ;; , ( , ) , | , <newline>). Primul cuvant reprezinta comanda ce va fi executata, celelalte sunt interpretate ca argumente ale comenzii. Valoarea intoarsa de o comanda este exit status, sau 128+n daca respectiva comanda se incheie cu semnalul n.

Conducte (pipelines)


O secventa pipeline este aceea in care una sau mai multe comenzi sunt separate de simbolul |. Formatul general al unei secvente pipeline este:
[!] comanda1 [| comanda2 ...]
Iesirea standard a comenzii 1 este conectata la intrarea standard a comenzii 2. Daca apare caracterul de negare !, exit status-ul pipeline-ului este valoarea negata a exit status-ului ultimei comenzi. Shell-ul asteapta terminarea tuturor comenzilor din pipeline inainte de a intoarce un rezultat. Fiecare comanda dintr-o secventa pipeline este executata ca un proces separat (intr-un subshell).

Redirectare


Redirectarea fisierelor standard de intrare si de iesire catre alte dispozitive periferice sau fisiere se face folosind operatorii > , >> , < , << .
  • operatorul > si >> se folosesc pentru redirectarea fisierului standard de iesire (output-ului). Exemple:
    $ls -al > f1 - aceasta comanda redirecteaza afisarea comenzii ls in fisierul f1 in loc de afisarea pe ecran.
    $ls -al >> f1 - aceasta comanda redirecteaza afisarea comenzii ls in fisierul f1 prin adaugare la sfirsitul lui f1.
  • operatorul < se foloseste pentru redirectarea fisierului standard de intrare (input-ului). Exemple:
    $mail i97aaa < mesaj - aceasta comanda realizeaza trimiterea unui mesaj prin mail utilizatorului i97aaa preluat din fisierul mesaj.

    Liste


    O lista este o secventa de una sau mai multe pipelines separate de unul sau mai multi operatori ; , & , && sau || si terminata cu ; , & sau <newline>.
    Daca o comanda se termina cu operatorul de control &, shell-ul executa comanda in background intr-un subshell. Shell-ul nu asteapta terminarea comenzii si intoarce valoarea zero.
    Comenzile separate de ; sunt executate secvential, shell-ul asteapta terminarea fiecareia dintre comenzi, iar valoarea intoarsa este exit status-ul ultimei comenzi executate.
    Operatorul && se foloseste sub forma:
    comanda1 && comanda2 si in acest caz comanda2 este executata ddaca comanda1 intoarce un exit status zero.
    Operatorul || se foloseste astfel:
    comanda1 || comanda2 , comanda2 executindu-se ddaca comanda1 returneaza un exit status diferit de zero.
    Exit status-ul returnat este acela al ultimei comenzi executate.

    Comenzi compuse


    Exista doua modalitati de grupare a mai multor comenzi: prin folosirea parantezelor rotunde () si prin folosirea acoladelor {}. Astfel, constructia urmatoare:
    (lista_de_comenzi) face ca modificarile aduse mediului de comenzile respective sa nu aiba efect dupa terminarea comenzii (se ruleaza intr-un subshell).
    Constructia {lista_de_comenzi;} face ca modificarile sa aiba efect asupra mediului existent deoarece lista de comenzi este executata in mediul shell existent.

    Comentarii intr-un shell script


    Comentariile intr-un shell script se introduc folosindu-se caracterul #, care face sa se ignore caracterele existente dupa # si pina la sfarsitul liniei respective.

    Caracterul escape


    Caracterul escape (\) are o semnificatie speciala in shell, fiind folosit de regula pentru a se ignora semnificatia speciala a unor caractere. Spre exemplu, folosit la sfirsitul unui rind si urmat de caracterul <newline>, \ este considerat ca si continuator de linie, astfel incit comanda se poate continua pe linia urmatoare. Se poate folosi aceasta facilitate atunci cind avem de-a face cu comenzi foarte lungi pe care le putem scrie mai convenabil pe mai doua sau chiar mai multe linii.
    Caracterul backslash isi pastreaza semnificatia speciala daca este urmat de $ , ` , " , \ sau <newline>.

    Variabile


    O variabila este o entitate ce memoreaza valori intr-un mod asemanator unei variabile intr-un limbaj de programare conventional. O variabila este setata atunci cind i se atribuie o valoare (variabila=valoare), putind fi dezactivata folosind comanda unset.
    Variabilele shell pot fi modificate in mod dinamic de catre interpretor sau atribuite la intrarea in sesiune.
    Dintre variabilele modificate dinamic enumeram:
    • $# - reprezinta numarul parametrilor pozitionali ai unui program shell
    • $? - reprezinta exit status-ul (codul de revenire) celei mai recente comenzi executate
    • $- - reprezinta optiunea curenta cu care a fost lansat shell-ul
    • $$ - reprezinta identificatorul de proces al shell-ului
    • $! - reprezinta identificatorul de proces al celei mai recente comenzi lansate in background
    • $0 - reprezinta numelele shell-ului sau al shell script-ului
    • $1..$9 - reprezinta argumentele (parametrii) ultimei comenzi lansate in executie la linia de comanda
    • $_ - reprezinta ultimul argument al comenzii anterioare

    Dintre variabilele atribuite la intrarea in sesiune enumeram:
    • $HOME - reprezinta directorul atribuit utilizatorului (directorul implicit) la intrarea in sesiune
    • $PATH - reprezinta lista directorilor ce sunt parcursi de shell la cautarea unui fisier executabil corespunzator comenzii introduse
    • $PS1 - reprezinta prompter-ul asociat interpretorului
    • $PS2 - reprezinta al doilea prompter (pentru continuarea liniei de comanda, implicit este >)
    • $MAIL - reprezinta numele directorului implicit pentru posta electronica
    • $LOGNAME - reprezinta numele de login al utilizatorului
    • $SHELL - reprezinta numele interpretorului de comenzi implicit atribuit la intrarea in sesiune (acesta se poate schimba folosind comanda chsh)
    • $TERM - reprezinta tipul de terminal folosit de editorul vi si de alte editoare orientate pe ecran
  • [Previous page] [Section contents page] [Next page]