CATEGORII DOCUMENTE |
Fisierul `.profile' este citit de shell-ul `/bin/sh' la pronire. Pe sistemele, la pornirea shell-ului este citit, de asemenea si fisierul `/etc/profile'. Pe masinile `HPUX' este citit fisierul `/etc/src.sh'
Atat variabilele locale cat si cele globale sunt definite folosind sintaxa:
VARIABLA='Ceva'Este important sa nu introduceti spatii intre numele variabilei si semnul egal. Implicit aceste variabile sunt locale. Pentru a le face globale (astfel incat procesele fiu ale shell-ului respectiv sa le mosteneasca) se foloseste comanda:
export VARIABLAAceasta comanda adauga variabila la mediul de
executie al procesului (environment).
Comanda
face ca, implicit, toate variabilele sa fie create globale.
Tablourile sau listele de variabile sunt simulate prin siruri de caractere despartite de semnul ' . Exemplu:
PATH=/bin:/usr/bin:/etc:/local/bin:.Pentru extragerea elementelor din lista se poate folosi comanda UNIX `cut'
Valoarea unei variabile:
Valoarea unei variabile este data de numele variabilei prefixat de simbolul $.
Este posibila folosirea parantezelor rotunde. pentru a 'proteja'
variabila de interferarea cu un alt text. De exemplu:
In Bourne shell, fisierele standard de intrare/iesire sunt referite prin numere si nu prin nume.
stdin Numar de fisier 0
stdout Numar de fisier 1
stderr Numar de fisier 2
Directionarea implicita a datelor spre aceste fisiere poate fi schimbata prin redirectare. Comenzile de redirectare sunt deosebit de flexibile in Bourne shell. Cateva exemple:
sh DescriereOperatiile aritmetice in Bourne shell sunt realizate printr-un intermediul comenzii expr (sau folosind comanda bc). Iata cateva exemple folosind expr:
a=`expr $a+1` # incrementeaza aObservatie: Comanda `expr'este foarte 'sensibila' la spatii si caractere backslash.
Un script (sau o procedura) shell reprezinta un fisier ce contine comenzi sau macrocomenzi pe care shell-ul le citeste, interpreteaza si excuta. Scripturile pot fi lansate in executie in mai multe moduri:
1. $ chmod a+fisier $ fisier
2. sh < fisier
3. sh fisier
Un fisier ce contine un script shell incepe de obicei cu secventa de caractere:
#!/bin/shAceasta constructie este destul de generala: orice fisier executabil care incepe cu o secventa de tipul:
#!programulmeu -optiuneva determina shell-ul curent sa incerce sa execute comanda
programulmeu -optiune numefisierunde numefisier este numele respectivului fisier executabil.
Daca scriptul shell este lansat cu argumente in linia de
comanda, acestea pot fi referite cu ' este o variabila ce contine chiar numele scriptului.
In continuare prezentam un exemplu simplu de script Bourne shell care isi tipareste toate argumentele. Daca acest script are numele 'exemplul1' si este lansat in executie astfel:
$ exemplul1 maria matei ionel
se va afisa pe ecran:
exemplul1 maria matei ionel Numarul total de argumente a fost 4
Iata continutul fisierului exemplul1:
#!/bin/shSimbolul reprezinta intreaga
lista de argumente iar este numarul total de argumente al liniei de comanda.
Un alt mod de a realiza scriptul de mai sus este prin utilizarea comenzii `shift'. Aceasta comanda sterge primul argument din lista de argumente si deplaseaza toate celelelte argumente la stanga, scazandu-le rangul cu un numar. Comanda `shift' este folosita la manipularea listelor lungi de argumente in Bourne shell.
#!/bin/shToate programele care se executa in UNIX se termina cu o valoare intoarsa de functia C 'return'. Exista o conventie ca o valoare de revenire nula (0) sa insemne ca respectivul program s-a executat cu succes iar orice alta valoare sa indice aparitia unei erori in executie. Codul de revenire este de obicei valoarea returnata in variabila externa de eroare C `errno'.
Scripturile shell pot testa aceasta valoare fie prin plasarea
directa a comenzii intr-un test sau testand valarea variabilei care contine
codul de revenire al ultimei comenzi executate.
Comanda 'test' testeaza indeplinirea unei conditii. Ea poate fi folosita pentru mai multe tipuri de teste:
test -f file
Adevarat daca file este un fisier obisnuit
test -d file
Adevarat daca file este un catalog
test -r file
Adevarat daca asupra lui file exista drept de citire (r)
test -w file
Adevarat daca asupra lui file exista drept de scriere (w)
test -x file
Adevarat daca asupra lui file exista drept de executie (x)
test -s file
Adevarat daca file contine ceva
test -g file
Adevarat daca este setat bitul setgid pentru file
test -u file
Adevarat daca este setat bitul setuid pentru file
test s1=s2
Adevarat daca sirurile de caractere s1 si s2 sunt egale
test s1!=s2
Adevarat daca sirurile de caractere s1 si s2 sunt diferite
test x -eq y
Adevarat daca intregii x si y sunt egali
test x -ne y
Adevarat daca intregii x si y nu sunt egali
test x -gt y
Adevarat daca intregul x este mai mare decat intregul y
test x -lt y
Adevarat daca intregul x este mai mic decat intregul y
test x -ge y
Adevarat daca intregul x este mai mare sau egal decat intregul y
test x -le y
Adevarat daca intregul x este mai mic sau egal decat intregul y
Operator logic NOT
-a
SI logic
-o
SAU logic
O sintaxa alternativa pentru a scrie aceste comenzi este sa folositi paranteze patrate in loc de cuvantul test.
[ $x -lt $y ] '==' test $x -lt $yStructurile conditionale au urmatoarea sintaxa.
if comanda-unixClauza `else' este optionala. Dupa cum s-a observat anterior, prima prima comanda unix poate fi orice, de vreme ce fiecare comanda are un cod de retur. Rezultatul este TRUE daca conditia este evaluata la zero si fals altfel (spre deosebire de conventiile din majoritatea limbajelor). Teste multiple pot fi facute folosind
if comanda-unixunde `elif' inseamna `else-if'.
Echivalentul comenzii `switch' din C este mai mult asemanatoare structurii `case' din PASCAL.
case comanda-unix-sau-variabila inAceasta structura foloseste 'wildcards' pentru a fi comparate cu iesirea comenzii sau variabilei din prima linie. Primul sablon care se potriveste este executat.
In shell puteti citi valoarea unei variabile folosind comanda `read' cu sintaxa:
read variabilaAceasta citeste un sir de la tastatura ce se termina la intilnirea CR/LF. Alta modalitate este folosirea comenzii `input' pentru a accesa un device logic anume. Device-ul tastaturii (pt. terminalul curent) este `/dev/tty', deci scrieti
variabila = `input < /dev/tty`care citeste o singura linie de la tastatura (utilizator).
Iata citeva exemple de folosire a acestor comenzi. Mai intii un program care intreaba da sau nu
#!/bin/shObservati cum se face 'pattern matching' si simbolul `OR'.
#!/bin/shIn shell-ul Bourne buclele au urmatoarea sintaxa.
while comanda-unixPrima comanda va fi mai mult ca sigur un test, dar in principiu poate sa fie orice comanda UNIX. Bucla `until', isi executa corpul pina cind argumentul sau este evaluat TRUE.
until comanda-unixIn final structura `for'
for variabila in listaAdesea dorim sa folosim un vector de valori (de exemplu o lista for), dar shell-ul Bourne nu are vectori. Aceasta problema este de obicei rezolvata creind un sir lung separat de ':' spre exemplu. Astfel variabila $PATH are forma
PATH = /usr/bin:/bin:/local/gnu/binShell-ul Bourne ne permite spargerea unui astfel de string la intilnirea oricarui caracter dorim. In mod normal sint cautate spatii, dar variabila `IFS' poate fi definita cu un inlocuitor. Pentru a face o bucla peste toate directoarele din PATH, vom scrie:
Iata citeva exemple:
#!/bin/shAcesta e un script foarte simplu, exemplu tipic de folosire al buclei while. Preia text de la tastaura pina cind utilizatorul tasteaza 'quit'. Pentru ca read intoarce 'false' numai daca apare o eroare sau daca detecteaza un caracter EOF CTRL-D, nu se va termina niciodata fara o comanda `if' test. Daca primeste un semnal CTRL-D, scriptul tipareste `AJUTOR!'.
#!/bin/shAcest script foloseste `grep' in `silent mode' (-s option), adica nu scrie nimic la terminal. Unicul lucru care ne intereseaza este codul de retur furnizat de comenzile redirectate in pipe. Daca `grep' detecteaza o linie continind numele utilizatorului pe care il cautam, rezultatul este evaluat TRUE si bucla se termina.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1213
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved