Sunteți pe pagina 1din 31

SHELL Command Language for Programmers

UNIX sysadmin: Dan-Cristian Jurubita


1 Pre!entare s"e##-uri Shell-ul este un interpretor de comenzi; Linia de comanda este citita din terminal sau dintr-un fisier, interpretata si executata. Care este diferenta dintre un program compilat si un intrepretor de comenzi? In programul compilat, liniile de comanda sunt citite o singura data de compilator. Apoi, compilatorul genereaza un binar care a fi direct executat de catre sistemul de operare. !n program compilat se executa mult mai repede decat un interpretor de comenzi. In schimb, un script scris in shell este mult mai flexibil la iitoarele modificari.

". S"e##-uri dis$onibi#e - #ourne Shell $%usr%bin%sh&' este scris de Ste en #ourne la A()( #ell Laboratories - este inclus in toate sistemele de operare !*I+ - este cel mai larg raspandit ca utilizare - C Shell $%usr%bin%csh& ' este scris de #ill ,o- la !ni ersit- of California ' #er.ele- aduce comanda histor-, /ob control si comanda alias - sintaxa limba/ului shell este similata cu cea a limba/ului C - 0orn Shell $%usr%bin%.sh& ' este scris 1a id 0orn la A()( #ell Laboratories ' aduce cele mai bune functionalitati din 2#ourne Shell3 si 2C Shell3, precum si altele noi ' este compatibil cu 2#ourne Shell3 - Cum aflu ce shell folosesc pe terminal? - 4 echo 5S67LL %usr%bin%&s" - 4 $s -$ '' 8I1 ((9 (I:7 C:1 ;<;=>?@ pts%A ABAA &s" Cum schimb un shell din linia de comanda? 4 sh 4 ps -p 55 $253 intoarce 8I1-ul 2process identification number3 al procesului curent& 8I1 ((9 (I:7 C:1 <?<<?C" pts%A ABAA sh 4 exit 4 csh 4 ps -p 55 8I1 ((9 <?<<?C; pts%A 4 exit (

(I:7 C:1 ABAA csh

Pro)esu#B 8rocesul reprezinta executia imaginii unui process. Imaginea procesului contine programul, en ironmentul sau $un set de ariabile cu alorile lor&, un set de registri, o lista de file descriptori $contin informatii despre cum sunt deschise fisierele&, numele directorului current si a radacinei de directoare 2%3 si alte informatii, precumB 8I1, 88I1, !I1, DI1 etc !n proces este la fel ca si ciclul unei ietiB o comanda este pornita, executa /obul sau, apoi se termina. :ai multe procese pot fi pornite in acelasi timp.

Cum erificam procesele pe !nix? $s *ef -E F-eF selects e er- process and F-fF chooses the FfullF output format $s au+ -E FaFGlists all processes on a terminal;FxF lists all processes Hithout controlling terminals;FuF adds a column for the controlling user for each process ps aux I head -=; ps aux I sort -rn J" I head -"A -E top "A C8! processes , C"i#d - Parent $ro)ess - !n nou process este creat folosind primiti a de s-stem ' 2for.3 si ii este asignat un 2!niKue 8rocess Identification *umber3 8I1 - 8rocesul care este citit din linia de comanda se numeste procesul parinte. - 8rocesul care executa linia de comanda rezultata este cunoscut ca procesul copil. - 8rocesul parinte asteapta pana cand se termina cel copil. Copilul trimite catre parinte un semnal ca si-a terminat /obul. - 8rocesul 2.ombi/ sau 2Defun)t/ ' este acel process care si-a terminat executia dar care are inca inregistrarea sa in tabela de procese. Aceasta inregistare este necesara pentru a permite procesului parinte sa citeasca statusul 2exit3 al copilului sau. 7liminarea acestor procese Lombi se poate rezol a prin omorarea lor $&i## -0 PID& sau reboot-ul sistemului de operare. - 8roces 21rfan/ ' este un proces care inca se executa, dar parintele sau a murit. Acestea nu or de eni procese .ombi, in schimb or fi adopate de catre procesul initial al sistemului 2init3 $$ro)ess ID 1&, care a astepta terminarea executiei noului process copil. 4 ps -ef !I1 8I1 88I1 C S(I:7 ((9 (I:7 C:1 root 1 A A :a- A" AB;" %et)%init - Miecare process copil mostenesteB - imaginea programului - informatii despre directorul curent si root % - en ironment - ariabile - signal handling information - semnalul de gestionare al informatiei - umas. setting $default file permission&; grep umas. %etc%securit-%user; 2umas. A"" -E ACNN file permission3 $fisiere @@@-A""; directoare CCC-A""& - ulimit setting $maximum file size&; ulimit -a - file descriptor information $open files& - !n - !n 2 proces nu poate fi creat daca se atinge limita maxima definita in sistem. lsattr -7 -l s-sA -a maxuproc process nu poate fi creat daca s-a atins limita maxima per user. Aceasta se poate schimba. ulimit -a

Pro)ese#e din 3a)&ground - Sunt procese asincrone - Standard inputul este %de4%nu## - 8rocesele din bac.ground ignora semnnalele de intrerupere si iesire - Output-ul $standard output sau standard error& unui process care se lanseaza in bac.ground se redirecteaza catre un fisier, altfel a/unge pe ecranul terminalului Cum se lanseaza un /ob in bac.gruod?B no"u$ s)ri$t s" 5 Cand se lanseaza in bac.grond se prezinta pe ecran 8I1-ul procesului Se pot lansa cu prioritate micaB nice -=A m-Pscript 8rocesul parinte nu asteapta dupa procesul copil no"u$ 6"i#e s" 57 nu"u$ nu permite ca un alt user sa ne opreasca executia scriptului dintr-o alta sesiune

Cum controlam aceste /oburi? - 8obs ' prezinta /oburile din bac.ground in executie $8obs *#B long listing& - 9C:;L<-! ' suspenda /obul care se executa in foreground - sto$ =jobid ' suspenda /obul din bac.ground - fg =jobid ' reia executia jobid-lui din foreground - bg =jobid ' reia executia jobid-lui din bac.groud > @ A 0 1B ?i## PID; default 2.ill -=N 8I13 $termina 2elegant3 un proces&; 2.ill -> $halt& 8I13; 2.ill -> A3 $log off& No"u$ - ignora semnalele de 6A*D!8, I*(Q7Q!8( si R!I($delogarea din sesiune&B SID6!8, SIDI*(, si SIDR!I( Editor de te+tB gmacs, emacs, 4i; set -o 4i; $Ss%aaa%bbb%g; Bset number; HKT; cautare %& History - ultimele =N comenzi executate Pro)edura de CLogin/ D%usr%bin%#oginEB ne referim la procedura de logare in ocata pentru stabilirea drepturilor de acces a userului in sistem - Citirea userului pentru logareB %usr%lib%saf%tt-mon - Citirea parolei din %etc%shadoH pentru userul respecti %et)%$ass6d $contine userii& ; %et)%s"ado6 $contine parolele criptate&; %et)%grou$ $contine grupurile de useri& set !8 default en ironmentB H1FE: reprezinta directorul curent in care a/ungem imediat dupa logare; pozitia @ in %etc%passHd; 2cd3 ne duce in 56O:7 PG:HB reprezinta calea de cautare a comenzilor in s-stem; este definita in 5U6O:7V%.profile SHELLB reprezinta shell-ul asociat userului; se afla pe ultima pozitie din %etc%passHd FGILB % ar%mail%your_login_name; daca este setat, shell-ul erifica 5:AIL si informeaza daca a sosit un mail nou :.B timezone_specification L1HNGFEB your_login_name; se afla pe prima pozitie in %etc%passHd IIS: este folosita de Shell pentru a separa o linie de comanda in cu inte. Walorile default suntB s$a)e, tab si ne6#ine PS1: reprezinta primul prompt. 1e obicei userul root are PS1J/K/ si ceilalti useri PS1J/'/ 7xB 8S=GFXYuname -nYBrootZ [58\1 4 F PSL: reprezinta al doilea prompt. 1e obicei PSLJ/</ PS(: reprezinta al treilea prompt. Waloarea default este ]4?^ :E;F: reprezinta tipul sau modelul terminalului utilizat de user - ENMI;1NFEN:-u# $ alorile asignate ariabilelor de sistem&B se erifica cu FsetF; FunsetF - In #ourne%0orn Shell procesul setarii profilului unui user reprezinta executia scripturilorB %et)%$rofi#e J 'NH1FEO% $rofi#e Cele doua scripturi se executa inainte sa apara promptul userului. - &s"r)B contine de obicei comenzi care sunt executate in momentul logarii userului 11 Creare $ro)edura%s)ri$t in s"e## - creati un fisier folosind editorul i - se seteaza permisiunea de readPexec asupra fisierului - fisierul trebuie adaugat in ariabila 5U8A(6V - KP%bin%&s" -E definim la inceputul scriptului ce shell chmod CN; fisier chmod ugJx fisier $default ugo& ;-read "-Hrite =-execute

a interpreta si executa scriptul

1L 1(

G#ias name=value; exemplu alias llG_ls -la_ ;edire)tare in fisierB Inputul si outputul pot fi redirectionate folosind 2`3, 2E3, respecti 2EE3 pentru ]append^. cat ` 5U6O:7V%Hhile.sh -E cu a/utorul operatorului de redirectionare 2`3, shell-ul citeste din fisier in loc de terminal cat file= E file"; cat file= EE file"; m file= file< 7xB 5 cat ``E1I E 6ello \orldT E E1I 6ello \orldT Qedirectare pentru scrierea in mailB 7xB mail -s test dan./urubitaametros-stems.net 6ello \orldT . 7xB 5 mail dan./urubitaametros-stems.net ``T E Salut :ihaiT E Astazi ne intalnim la ora =@, la clubul de muzica. E (e rog sa aduci cu tine chitara. E T

1, 12

ComentariiB 4 Mariabi#eB - in #ourne Shell toate ariabilele sunt de un singur tipB de tipul string $caractere& - in 0orn Shell sunt premise mai multe tipuri de ariabile. 7le se seteaza cu a/utorul lui Cty$eset/ t-peset 'u $upercase& t-peset 'l $loHercase& t-peset 'i $integer& - *umele ariabilei - poate a ea orice lungime - caracterele premise pot fi alfabetice, numerice sau underscore. 8rimul caracter nu poate fi numarT - nu sunt premise caractere speciale - 0orn Shell-ul permite utilizarea de ariabile e tip 2Arra-3B A:8:XAZ, A:8:X=Z, etc; unde primul element este A:8:XAZ. - Operatorul de atribuire a unei alori pentru o ariabila esteB CJ/ - 8entru a sterge aloarea unei ariabile folosim comanda Cunset/ 7xB =. director-G%home%hutch%doc ". :AILG%usr%spool%mail%root <. setarea de ariabile intr-un arra-B setare indi idualaB A:8:XAZGA.:. setare tuturor alorilor odataB set -A A:8: A A A A 8 8 8 ;. pentru dealocarea unor ariabile folosimB Cunset 4ar1 4arL dire)tory/ E)"oB isi printeaza argumentele catre standard output 7xB 5 echo 8lease enterB 5 echo b.txt - caractere specialeB [n -neH line; [t -neH tab; [b -bac.space; [c -no neHline 7xB 5 echo 7nter -our nameB _[c_

1>

1@ 1A

Print: comanda specifica in 0orn Shell, similara cu comanda echo Substitutia 4ariabi#e#or: aloarea ariabilei poate fi prezentata cu a/utorul semnului 253 pus direct inaintea 7xB 5 +G6ello 5 echo 5U+V Horld 6ello Horld 7xB 5 echo 5UA:8:XAZV A 7xB 5 echo 5UA:8:XbZV A A A A 8 8 8 7xB 5 echo 5UA:8:X;ZV 8 ;eadB citeste cu inte din standard input si le depoziteaza in 7xB 5 read + 6ello Horld 5 echo 5U+V 6ello Horld 7xB 5 read ar= ar" ar< hello cristi ali gigi 5 echo 5 ar= 5 ar" 5 ar< hello cristi ali gigi ariabile

ariabilei

10

LB

Se#e)t: este present doar in 0orn Shell si ne a/uta sa cream un meniu numerotat, de selectare, generat pe baza unei liste de cu inte. 8romptul CPS(/ este prezentat si ne cere sa introducem un numar din meniul numerotat. Waloarea numarului selectat este sal ata in ariabila ;EPLQ. 1in meniul creat de S7L7C( se poate iesi cu `C(QLEJc. 7xB 5 cat select.sh select C6OIS7 in MIQS( S7CO*1 (6IQ1 do echo I actuall- t-ped [F5UQ78L9V[F echo echo In the compound-list C6OIS7 has done

alue [F5UC6OIS7V[F from the Horld list. ariabile. 1aca executam comanda Creadon#y/ fara parametri, ne listeaza toate

L1

;eadon#yB ne a/uta sa e itam suprascrierea unei ariabilele de tip readonl-. 7xB 5 readonl- ar=G6ello 5 readonl- ar=GHorld 5 readonlLOD*A:7Gadminc/ ar=G6ello ar"GHorld

LL

Comanda C /: este o metoda alternati a de a executa un script shell. 7xecutia comenzii C / nu genereaza un process copil. Cel mai adesea este utilizata la rularea fisierului $rofi#e,atunci cand este modificat $adaugare sau schimbare de ariabile&. Aduce nou faptul ca a permite executia unui fisier fara drept de executie. E+: $ $rofi#e&

L(

Po!itionarea $arametri#orB script..sh par= par" par< par; ... par> 7xB 5 cat /ump.list cd 5U=V echo director- listing of [[c pHd ls -l

5 .%/ump.list %home%adminc/ director- listing of %home%adminc/ total ;? -rH-r--r-= adminc/ :DIPS9S( -rH-r--r-= adminc/ :DIPS9S( L,

== :a- <= =<B=" file=.txt "A :a- <= =<B=" file".txt

Cara)tere s$e)ia#eB - Rn -neH line; Rt -neH tab; Rb -bac.space; R) -no neHline - 7 D E N O S < 9 5 ' T U R V W X Y Z K [ - technici de folosireB - R -dupa slach se pun numai litere - V V -toate caracterele dintre apostroafe sunt litere - U U -Aproape toate caracterele dintre ghilimele sunt litere cu exceptiaB $' si V& - caractrele speciale nu pot fi alori ptr ariabile $ inainte ', V, U& Substituirea 4ariabi#e#orB 5 startdateG=%=%A> 5 enddateG@%<A%>A 5 export startdate enddate 5 echo FQeportB 5UstartdateV to 5UenddateVF QeportB =%=%A> to @%<-%>A 5 echo QeportB 5UstartdateV to 5UenddateV QeportB =%=%A> to @%<-%>A 5 echo _QeportB 5UstartdateV to 5UenddateV_ QeportB 5UstartdateV to 5UenddateV

L2

L>

Substituirea )omen!i#orB Output-ul unei comenzi poate fi argumentul altei comenzi =. 5 echo (he curent time is Ydate JS(Y (he curent time is =NB"<B"N GYHhoIHc -lY ". 5 echo (he curent time is 5$date JS(& (he curent time is =NB"<B<> <. ls -l Yfind %home%adminc/ -t-pe f -printY find %home%adminc/ -t-pe f -print I xargs ls -l

L@

Cum $utem fo#osii $arametrii intr-o #inie de )omandaB 5 HhotoGf=.txt msgGf".txt m=<..sh 5 cat m=<..sh mail Ycat 5HhotoY ` 5msg In4o)area e+$#i)ita a s"e##-#ui intr-un s)ri$tB .sh /ump.list %tmp sh /ump.list %tmp Fodu# Merbose intr-un s)ri$tB - sh - /ump.list %tmp - in script se poate in oca modul

LA

L0

(B

E+e)ution tra)e intr-un s)ri$t - sh -x /ump.list %tmp - in procedura se poate in oca modul execution traceB set -x set Jx S"e## ne-e+e)utabi#B - sh -n /ump.list %tmp Hasirea de 4ariabi#e nesetate intr-un s)ri$t - sh -u /ump.list %tmp - set Ju % set -u E+$ortu# automat a# 4ariabi#e#or in s)ri$t - sh -a /ump.list %tmp e+it imediat din s"e## in )a!u# unui status non!ero Not Nu## 4a#ue 'N4ar: -6ordO 5 echo 5UC18A(6V 5 echo 5UC18A(6B-undefinedV undefined

erboseB set set J

(1 (L

(( (, (2

(> (@ (A (0

5 ls -l 5U=B-.V Not Nu## 4a#ue 'N4ar:J6ordO. 1aca ar a a ut o aloare initiala atunci ar nu a lua aluarea Horld. Nu## 4a#ue generator errorB 'N4ar:XerrorO Da)a 4ar este not nu## 4ariabi#a 4a #ua 4a#uarea U6ordU: 'N4ar:-6ordO Mariabi#e de s"e## $resetate 'NKO si 'NXO 5U4V - numarul de parametrii dati scriptului 5U?V - intoarce codul de eroare al ultimei comenzi executate in foreground - A successfull - intre = si "NN -E unsuccescessfull 5U5V - intoarce 8I1 ultimei comenzi executate 5UTV - intoarce 8I1-ul ultimului proces executat in bac.ground 5UbV - intoarce aloarea parametrilor dati scripului. 1iffB F5UbVF - intoarce un singur argument F5U=V 5U"VF 5UaV - intoarce aloarea parametrilor dati scripului. 1iffB F5UaVF - intoarce argumente separate F5U=VF F5U"VF

,B

Constru)tori de )ontro# $entru )onditionareB (7S( statementB - erifica statusul fisierului - compara stringuri - compara alori numerice din stringuri - intoarce aloarea A ptr true - intoarce aloarea = ptr false test -r file 4exists and readable test -H file 4exists and Hriteable test -x file 4exists and executable test -s file 4exists and nonzero size test -f file 4exists and ordinartest -d file 4exists and directortest -h file 4exists and s-mbolic lin. test -c file 4exists and character special file test -b file 4exists and bloc. special file test -p file 4exists and named pipe line test -u file 4exists and setuid bit set test -g file 4exists and setgid bit set test -. file 4exists and stic.- bit set

5 test -f select 5 echo 5U?V A ,1 3oo#ean e+$resion 5 test [$ -d select -a -x select [& 5 echo 5U?V = 5 test T [$ -d select -a -x select [& 5 echo 5U?V A ,L Com$aratia stringuri#or - egal $G& - diferit $TG& - argumentul pentru FtestF trebuie sa fie dat intre ghilimele 5 test F5U(7Q:VF G Fxterm-rNF 5 echo 5U?V A ,( Merifi)area #ungimii unui string DString si!eE -z lungimea stringului A -n lungimea stringului nonzero fara reo optiune, implicit aloarea -n 5 cat test.args test -z F5U=VF echo 5U?V 5 test.args hello there =

,,

Com$ararea numeri)a - compara doar numarul de la inceputul strigului - daca apar si litere in cadrul numarului se determina numarul String Waloarea aritmetica --------------------------------F=NF =N F="< main stF ="< F=<".;<F =<" F;<?C@"bbF ;<?C@" Operatori de comparatie numericaB test Fstring=F -eK Fstring"F test Fstring=F -ne Fstring"F test Fstring=F -gt Fstring"F test Fstring=F -ge Fstring"F test Fstring=F -lt Fstring"F test Fstring=F -le Fstring"F 5 test FYdate 5 echo 5U?V = Constru)torii - $& - pentru - T - pentru - )) - in loc - II - in loc JS-YF -eK = de e+$resii UtestU in ?orn S"e##B grupare de conditii negatie de FandF de ForF XX ZZ

,2

Alte conditionale specifice 0orn ShellB -L file -(rue if file exists and is a s-mbolic lin. -O file -(rue if file exists and its oHner is the efefcti e user id -D file -(rue if file exists and its group is the effecti e group id -S file -(rue if file exists and it is a special file of t-pe soc.et -o option -(rue if the option is on file= -nt file" -(rue if file file= is neHer than the file" file= -ot file" -(rue if file file= is older than the file" file= -ef file" -(rue if file= is another name for file file" ,> II II-ELSE II-ELII EXI: statemanetsB IM command command testingPcomand (67* comamnd comamnd MI

Comenzile dintre FthenF si FfiF se executa daca statusul comenzii FtestingPcommandF este A 7xB 5 cat is.directorif test -d 5U=B?FMile name expectedFV then echo 5U=V is a directorfi 5 .%is.director.%is.director-X"ZB =B Mile name expected 5 .%is.director- %tmp %tmp is a director-

,@

EXI: - este fo#osit $tr a termina o $ro)edura s"e## $A-succes; =-"NN errors& 5 cat is.dir 4 command nameB is.dir 4 exit statusB " -no filePname specified 4 A -normal completion 4 purposeB chec. to see if the 4 specified filePname 4 is a directorif X F5U=VF G FF Z then echo FMor the 5UAV command should be gi en the name of a file and Hill tell -ou if the file is is director-.F exit " fi if X -d F5U=VF Z then echo F5U=V is a director-.F fi

,A

:esting )ommand ' )at testing\)ommand if 6"o S gre$ admin)8 < %de4%nu## t"en e)"o admin)8 is #ogged on fi

10

,0

:est )ondition 7xB 5 cat finder if test F5U=VF G FF -o T -r F5U"VF then echo usage 5UAV missing file exit " fi if grep F5U=VF F5U"VF E %de %null then echo F5U=V found in file 5U"VF exit A fi exit = ---5 finder dan f=.txt

2B

II-ELSE statement if commamnd commamnd testing command command command

then else fi

--commandP= arg= arg" II commandP" arg= arg"

11

7xB

5 cat telephone if test 5U4V -lt = then echo F7nter nameB [cF read name else nameGF5U=VF fi if then else test F5UnameVF G FF echo FA name must be suppliedF exit < grep -i F5UnameVF 5U6O:7V%f=.txt fi --5 telephone 7nter nameB dan dan./urubitaametros-stems.net

21

II-ELII-ELSE statement if then elif then else fi command testingPcommand command command command testingPcommand command command command command

---7xB 5 .%nl 7nter nameB dan dan./urubitaametros-stems.net

12

2L

CGSE case alue in pattern& command command ;; pattern."& command command ;; pattern.<Ipattern.;& command command ;; esac ----

7xB 5 menu.dri er 5 cat menu.dri er cat `` 7OM In entor- Control S-stem update - !pdate In etor- :aster Miles report - In entor- On-6and Qeport reorder - In entor- Qeorder Qeport 8lease enter -our choise 7OM read choise case F5UchoiseVF in update & 4 4code to perform in entor- updates echo Fcode to perform in entor- updatesF 4 ;; report & 4 4code to generate on-hand report echo Fcode to generate on-hand reportF 4 ;; reorder & 4

13

4code to generate reorder report echo Fcode to generate reorder reportF 4 ;; esac ---- Feta)ara)tere in CGSE statement b inlocuieste orice numer de caractere ASCII ? un singur caracter $orice& X...Z un caracter dintr-un set de caractere date 5 cat casePselect 8S<GF7nter a numberB F select C6OIC7 in Fchoice oneF Fchoice tHoF Fchoice threeF Fchoice fourF Fchoice fi eF FKuitF FexitF do case F5Q78L9F in 40orn Shell puts actual response in Q78L9 KIKuIKuiIKuit& brea.;; exit& exit;; esac case F5C6OIC7F in 40orn Shell puts FHorldF in the named identifier Fchoice oneF& echo a one-derful choise;; Fchoice tHoF& echo this choise is tHo much;; Fchoice threeF& echo the frog sa-s this choise is three-deep;; Fchoice fourF& echo four a good time choose this one;; Fchoice fi eF& echo fee fi e oh fum this choise is better than onl- some;; Kuit& brea.;; 4(he Q78L79 FKuitF abo e is another Ha4to lease select. (o reach this case, 4the *!:7QIC choise corresponding to 4FKuitF must ha e been entered. exit& exit;; b& esac done --.%casePselect echo F9ou entered [F5Q78L9[F Hhich didnt ma.e an- sense to (6IS programF;;

14

2(

Loo$ing in S"e##: 6"i#e] unti#] for \hile --este folosita ptr executia repetiti a a comenzilor command command testingPcommand command comamnd

do done

- daca inainte de FdoF statusul lui exit este FtrueF atunci se executa comenzile dintre FdoF si FdoneF - daca statusul este FfaulseF atunci se iese din Hhile si se continue scriptul dupa FdoneF 5 cat phone Hhile echo F7nter nameB [cF read name test F5UnameVF TG FF do echo F8lease call 5UnameVF done --5 .%phone 7nter nameB ,ohn 8lease call ,ohn 2, EXP; )ommand - se utilizeaza ptr a performa functii matematice - Com$aratie: expresie G expresie expresie [E expresie expresie [` expresie expresie [`G expresie expresie [EG expresie - \ill print = if true, A if false 5 cat expr= iG= Hhile test F5UiVF -le =A do echo iteration number 5i iGYexpr 5i J =Y done 5 iG; 5 expr 5i G N A --false

15

5 expr 5i [EG A = --true - Ca#)u#e aritmeti)e: expresie expresie expresie expresie expresie 5 iG; 5 expr 5UiV J ; ? -5 iGYexpr 5UiV J =Y 5 echo 5i N -5 /GYexpr 5i [b NY 5 echo 5/ "N - 0orn Shell introduceB iGi J = - Comparatia stringului in 0ornShell se face prion XX...ZZ 5 read S(QI*D?F7nter .e-B F 7nter .e-B hello 5 if XX 5US(QI*DV G FdddF ZZ; then echo match; else echo Fno matchF;fi no match - 1$eratii aritmeti)e in ?ornS"e## 5 cat arith t-peset -i *!:GA Hhile XX *!: -lt =A ZZ do print F(his is loop number 5U*!:VF $$*!:G*!:J=&& done --5 .%arith (his is loop number A (his is loop number = (his is loop number " ... J expresie - expresie [b expresie % expresie S expresie

16

22 2>

S"ift - folosit ptr a muta ordinea parametrilor intr-un script; shift 5U4V - decrementare cu FnF pozitii Heto$ts erifica alabilitatea optiunilor unui script

7x =B 5 cat tr-.getopts Hhile getopts abc x do case 5UxV in a& echo option a found ;; b& echo option b found ;; c& echo option c found ;; esac done --5 tr-.getopts -b -a option b found option a found 7x "B 5 cat gen.report Hhile getopts oBrBnt ar do case F5U arVF in o & outputPfileGF5UO8(AQDVF ;; r & reportPfileGF5UO8(AQDVF ;; n & numberPoptionGF-esF ;; t & headingGFnoF ;; [? & exit " ;; esac done echo FOutput file G 5UoutputPfileVF echo FQeport file G 5UreportPfileVF echo F*umbering option G 5UheadingB--esVF echo FArgs before shiftB 5UbVF echo F5UO8(I*1VF shift Yexpr 5UO8(I*1V - =Y echo FArgs after shiftB 5UbVF echo 5U4V 5 .%gen.report -tn -o f=.txt -r f".txt unit.=< Output file G f=.txt Qeport file G f".txt *umbering option G no

17

Args before shiftB -tn -o f=.txt -r f".txt unit.=< @ Args after shiftB unit.=< = 2@ Continue ZnY statement - se intoarce la inceputul de FloopF fara a continua cu executia comenzilor din loop 5 cat tr-.continue Hhile echo echo F7nter name $control d to end&B [cF read name do if then else fi if then fi test 5U?V TG A echo F*ame not foundF test F5UnameVF G FF continue echo F(he name isB 5UnameVF

done echo F[n7nd of director- inKuir-F

18

2A

3rea& ZnY statement - #rea. termina imediat executia loop-lui sau termina dupa a XnZ executie a loop-lui 5 cat tr-.brea. Hhile echo F[n7nter name $FdoneF to end&B [cF read name do if test F5UnameVF G FdoneF then brea. fi if test F5UnameVF G FF then continue else echo F(he name isB 5UnameVF fi if test 5U?V TG A then echo F*ame not foundF fi

done echo F[n7nd of director- inKuir-F

19

20

:rue and fa#se )ommands - principalul scop al acestor comenzi este de a crea un FloopF nesfarsit - true - comanda in principiu nu face nimic; intoarce statusul Fsuccessfull-F - false - deasemenea nu face nimc si intoarce statusul Funsuccessfull-F 5 cat tr-.true Hhile true do echo F[n7nter name$FdoneF to end&B [cF read name if test F5UnameVF G FdoneF then brea. fi if test F5UnameVF G FF then continue else echo F(his is the nameB 5UnameVF fi if test 5U?V TG A then echo F*ame not foundF fi

done echo F[n7nd of director- inKuir-

>B

I1; statement for ariablePname in alue ... alue do command . . . command 5U ariablePnameV . . . command done

20

5 for i in = " < ;; do echo F5UiV.6ello \orldTF;done =.6ello \orldT ".6ello \orldT <.6ello \orldT ;.6ello \orldT ---5 for i in Ycat f<.txtY;do echo 5UiV F[cF;done 6ello Horld. aaa Horld bbb zzz 6ello ... hello Horld 5 --5 cat nroff.mult for filePname in 5UbV do nroff 5UfilePnameV E nroff.5UfilePnameV done 5 .%nroff.mult f=.txt f".txt f<.txt --5 cat Hhere IMSGF5UIMSVBF for name in 5U8A(6V do if test -x F5UnameV%5U=VF then echo F5UnameV%5U=VF elif test -f F5UnameV%5U=VF then echo F5UnameV%5U=V ---not executable---F fi done 5 Hhere f<.txt .%f<.txt ---not executable---

--F[c no neH lineF

- IMS - internal field separator ; b- default is space - in mod normal ariabila IMS contine < caractereB `spaceE, `6(E horizontal tab, `*LE neH line

21

>1

UN:IL )ommand until command . . testingPcommand command . command este opusul statement-lui \6IL7 executa comenzile dintre FuntilF si FdoF executa comenzile dintre FdoF si FdoneF numai daca exit status al ultimei comenzi este false se termina cand return code al lui testingPcommand este zero

do

done -

!*(IL !*(IL !*(IL !*(IL

5 cat find.records until echo F1o -ou Hish to loo. up another person? X9 or *ZF read ansHer test F5UansHerVF TG F9F -a F5UansHerVF TG F-F do echo F8lease enter name.F read name grep 5UnameV database done >L LINE )ommand - este folosita ptr a citi o linie din input si sa o scrie in standard output 5 cat get.first nameGYgrep 5U=V database I line I cut -f= -dBY echo echo 5UnameV is the first person in database in 5U=V 5 get.first mar.eting >( Iun)tia D3orn S"e##E - similara unui script shell cu diferenta ca este stocata in memorie - se executa mai repede deoarece este stocata in memorie name$& U cmd=; cmd"; ..; return n; V or 4 8referata

22

name$& cmd= cmd" return n Argumentele functiei sunt similare parametrilor scriptului $5U=V,5U"V,etc& FreturnF este analog cu FexitF; utilizarea este optionala Munctia nu se exporta. Atunci cand se creaza se exporta automat Munctia se poate sterge prin FunsetF Cu FsetF se pot lista toate functiile definite Hhoon$& HhoIgrep F5U=VF Hhoon$& Hho I grep F5U=VF Hhoon$& U Hho I grep F5U=VF V $=A."<.==."C& $dusAaHstC;?AC.de.madm.net& $=A."<.=<.=?"&

V 5 E E 5 E 5 E E E

5 Hhoon admin adminoc pts%A ,un "A =AB=@ adminss pts%= ,un "A ==BA? adminc/ pts%" ,un =? =AB;; --- Iun)tia in ?orn S"e## 5 function Hhoon E U E Hho I grep F5U=VF E V -

5 functions 4 alias pentru t-peset -f -E listeaza functiile definite unset -f Hhoon -E sterge functia Autoload - citeste functia dint-un fisier prima oara cand este folosita t-peset -fu functionPname sau aliasul FautoloadF M8A(6 - aceasta ariabila este ptr a defini directoarele unde se gasesc functiile t-peset - ptr definirea ariabilelor locale

5 autoload HherePfn $t-peset -fu HherePfn& 5 M8A(6G%home%adminc/ 5 export M8A(6 5 functions -E listam functiile stocate in memorie $alias cu t-peset -f& 5HherePfn i %usr%bin% i

23

>,

;edire)tarea in genera# - file descriptor A - standard input 5 command ` file - file descriptor = - standard output 5 command E file 5 command EE file $append& - file descriptor " - standard error 5 command "E file 5 command "EE file - redirectarea se foloseste ptr a altera sursa sau destinatia unei comenzi - ptr a scrie mesa/ele de eroare catre Fstandard error output3 - ptr a redirectiona mai multe surse catre o singura destinatie - ) se foloseste ptr a descrie file descriptorul $ex. echo F6ello HorldF E )"; am trimis mesa/ul catre std.output& --5 echo F6ello HorldF E)" -E se face con ersia din std.output in std error 6ello Horld --5 echo F6ello HorldF E output.log -E redirectare std.output catre un fisier --5cat E)" ``7OM E (he 5UAV command - options E -h full help message E -p specif- directorE -s no error messages E 7OM (he -.sh command - options -h full help message -p specif- director-s no error messages --cat database E)" "Ebac.up -E mai intai std output este directionat catre std error iar apoi std error este directionat catre fisierul bac.up cat databese "Ebac.up E)" -E mai intai std error este directionat catre fisierul bac.up iar apoi std output catre std error --5cat file.des echo FStart of :enuF cat 5U6O:7V%f<.txt E); echo F7nd of :enuF 5file.des ;E temp --N "< b b b . %h=N>%ser icemanager%.profile;%h=N>%ser icemanager%Q!*%smstop -f "E%de %null =E)"

24

>2

;edire)tarea - )itirea din fisiere - citirea dintr-un fisier cu comanda 2lineF iar semnul de directionare este F`F - FE test.txtF -E crearea unui fisier gol ) trunchierea unui fisier echo 6ello E test.txt -E scriere si creare de fisier cat %de %null E test.txt -E trunchiere touch test.txt -E creare fisier gol ` file.txt -E echi alentul lui cat file.txt 7xB 5cat maintain Hhile fileGYline `)<Y test F5UfileVF TG FF do cat ``7OM :7*! =. ". <. ;. 7OM S7L7C(IO*S 7dit Mile 1elete Mile (runcate Mile R!I(

echo F[n7nter selection for file 5UfileVB [cF read option case F5UoptionVF in =& i 5UfileV ;; "& rm 5UfileV ;; <& E 5UfileV ;; b& exit esac

done --5maintain <`update.files >> - std.input A, std.output =, std.error " au asociat in mod normal acelasi Fterminal fileF tt- $pe ecran& ;edire)tarea - s)rierea in fisiere - folosim redirectarea catre output ptr. a scrie in mai multe fisiere din aceasi procedura shell - semnul de directarea este FEF - scrierea in fisiere se face cu comenzile echo, catB 5echo F6elloF E test.txt 5cat ``7OM E output.txt E aaaaa E bbbbb E ccccc E 7OM

25

- FexecF statement este folosit ptr a deschide un fisier in cadrul unui script shell exec "E filePname -E se deschide fisierul FfilePnameF si se inlocuieste terminalul ca destinatie ptr std.error 7xB 5cat exec.test exec <E 5U=B-f@.logV

4open file; daca nu se da nici un fisier ca si parametru 4atunci se a scrie in fisierul f@.log

>@

echo FLog succesfullF E)< echo F*ameB 5ULOD*A:7VF E)< echo F(7Q:B 5U(7Q:VF E)< date E)< echo F7nd of log informationF E)< exec <E)4close file --5 exec.test PIPE - este un FtoolF foarte folositor pentru a atasa inputul unei comenzi de output-ul altei comenzi - FpipeF este folositor pentru transferul informatiei dintr-un proces in altul - FpipeF este o structura de tipul MIMO - first in first out - FpipeF foloseste doi Ffile descriptoriF deschisi in acelasi timp ptr. citire si scriere 5cat %etc%passHd I grep root --5cat f<.txt I cut -c=-< --5cat line.number linePnumberG= cat 5U=V I Hhile read name do echo F5UlinePnumberVB 5UnameVF linePnumberGYexpr 5UlinePnumberV J =Y done --5line.number f@.log --5nl f<.txt = 6ello Horld. " aaa Horld bbb < zzz 6ello ... ; hello Horld --5$ cat fN.log; grep -i hello f<.txt & I sort --5ps I $ line E%de %null; cat & I sort ---

--Einput catre FpipeF de la un grup de comenzi --Eline citeste prima linie iar apoi cat citeste --Erestul outpului de la FpsF

26

>A

Semna#e de $ro)esare DSigna# $ro)essingE Semnalele sunt e enimente externe asupra unui program, care ii pot afecta executia Aceste e enimente pot fi initiate de un user, de s-stemul de operare sau de o alta comanda Aceste semnale pot intrerupe un program daca nu sunt interceptate Interceptarea se face prin comanda FtrapF Semnalele pot fiB ignorate, executate comenzi cand semnalele sunt interceptate sau resetate Cate a semnale folosite in mod curentB AA - 7+I( - normal program termination A= - 6!8 - hangup $line disconnect& A" - I*( - intrerrupt $delete .e-& A< - R!I( - Kuit $MS character& A; - ILL - illegal instruction& A> - 0ILL - *oncatchable .ill =N - (7Q: - termination signal - trap Xse executa comandaZ Xptr urmatoarele semnaleZ 7xB trap Yecho Fintrerrupted routineF; rm tmp5U5V; exit ;Y = " < - atunci cand nu se specifica comanda de executat sau este nulaB trap __ " < 4ID*OQ7 trap _B_ " " 41O *O(6I*D - Qesetting trapB trap = " < -E in cazul in care nu se specifica comanda atunci se re ine la setarea default a semnalului 7xB cat %etc%profile trap FF = " < -E ignora orice tip de intrerupere in timpul executiei acestui script .... trap = " < -E se re ine la alorile default ale semnalelor $se permit intreruperile&

>0

PG:H - organi!area 4ariabi#ei 8A(6G%usr%binB%home%hutch%shellB. - adaugam un nou director la ariabila 8A(6 5 8A(6G58A(6B%home%adminc/ 5 export 8A(6

@B

:IFEX )ommand - masoara timpul de executie al comenzii - raporteazaB - realB timpul total - userB timpul de executie al comenzii - s-stemB timpul de executie in .ernel

27

@1

IIND 5 find 5 find 5 find 5 find 5 find 5 find 5 find 5 find 5 find 5 find 5 find 5 find

. . . . . . . . . . . .

-name FtestbF -t-pe f -exec ls -l UV [; -name FtestbF -t-pe f -mtime J= -exec ls -l _UV_ [; -E mtime J= $fisiere mai echi de = zi& -name FtestbF -t-pe f -mtime -= -exec chmod oJr _UV_ [; -E mtime -= $fisiere mai noi de = zi& -name FtestbF -t-pe f -mtime J= -exec rm _UV_ [; -name FtestbF -t-pe f -perm CNN -E perm CNN $permisiunea CNN& -name Fb.tmpF -print I xargs rm 'f -E stergerea de fisire cu xarg -name Fb./a aF -print I xargs grep ':emor-Cache -E cauta in fisiere b/a a cu inte -:emor-Cache -depth = -t-pe f -neHer firstPfile -E cauta doar in primul subdirector fisiere mai noi decat 2firstPfile3 -t-pe f -cmin =N 'prune -E last modified =N minutes ago, onl- loo. at the current director-. -size J=AAAc -exec ls -l UV [; -E cauta fisiere mai mari de =AAA b-tes -mtime J=A -size JNAAAAc -exec ls -l UV [; -E cauta fisiere mai echi de =A zile si mai mari de NAAAA b-tes -t-pe f -print I xargs ls -l I aH. _Uprint 5>V_ -E executa 2ls 'l3 si listeaza prin aH. numele fisierului -E -E -E -E schimba numele fisierului din 2bbb3 in 2ccc3 omoara procesul dupa nume sterge numai fisiere $fara directoare& sterge numai directoarele

@L

G^? 5 ls -= bbbbb I aH. _Uprint Fm F5=F F5=V_ I sed s%bbb%ccc%" I sh 5 .ill Yps auxHH I grep netscape I grep - grep I aH. _Uprint 5"V_Y 5 ls -l b I grep - drHx I aH. _Uprint Frm F5>V_ I sh 5 ls -l I grep _cd_ I aH. _Uprint Frm -r F5>V_ I sh SED 5 cat aaaIsed s%bbbb%oo%g E aaa 5 perl -i -pe _s%pp%mm%g_ aaa

@(

-E inlocuieste pe 2bbbb3 cu ]oo^ global in fisierul aaa -E inlocuieste 3pp3 cu 2mm3 global in fisierul aaa

@,

S1;: 5 cat numbers.txt I aH. _Uprint 5<V_ I sort 'nr E numbers".txt 5 sort -nr -.< numbers.txt E numbers".txt SUF 5 cat numbers.txt I aH. _U sumJG5=V 7*1 Uprint sumV_ 5 aH. _U sum JG 5=; nJJ; V 7*1 U print sum%n; V_ numbers.txt 4mstat L (B << %usr%#o)a#%a)me%#ogs%4mstat '' #og -E ariabila 55 contine 8Id-ul ultimei comenzi executate

@2

@> @@ @0

s#ee$ 'NIN:E;MGLO MI C"eat S"eet

-E intarziem executia scriptului cu n secunde

"tt$:%%666 #agmonster org%do)s%4i "tm#

28

@0

Uti#i!area unui s)ri$t )u o fun)tie ing#obata in e#: 5 i m-PsecondPscript..sh 4T%bin%.sh 444444444444444444444444444444444444444444444444444 4 \ritten #-B ,ason (homas 4 8urposeB (his script Has Hritten to shoH users hoH to de elop their first script 4 :a- =, "AA? 444444444444444444444444444444444444444444444444444 41efine Wariables 6O:7GF%home%/thomasF 4Simple home director(I:7G5$date JS6S:& 4 Set 1A(7 eKual to the output of running the shell command date 6OS(*A:7G5$hostname& 4 Set 6OS(*A:7 eKual to the output of the hostname command 444444444444444444 function ifPerror 444444444444444444 U if XX 5? -ne A ZZ; then 4 chec. return code passed to function print F5=F 4 if rc E A then print error msg and Kuit exit 5? fi V if XX -e %tmp%file ZZ; then 4Chec. to see if the file exists first rm 'rf %tmp%file 41elete file ifPerror F7rrorB Mailed remo ing file %tmp%fileF else print F%tmp%file doesn^t existF fi if XX -e %tmp%test ZZ; then m.dir %tmp%test 4Create the director- test ifPerror F7rrorB Mailed tr-ing to create director- %tmp%testF else print F1irector- exists, no need to create director-F fi case 5(I:7 in F""AAF& rm 'rf %tmp%file= ;; F"<AAF&

29

rm 'rf %tmp%file= ;; 7sac AB A1 Hre$ ;egu#ar E+$ressions httpB%%HHH.c-berciti.biz%faK%grep-regular-expressions% E+em$#u de e+er)itiu in ?ornS"e##

4T%bin%.sh " # The Party ProgramInvitations to friends from the guest file < guestfileGd%shell%guests ; if XX T 'e F5guestfileF ZZ then print F5Uguestfile44b%V non'existentF exit = fi N export 8LAC7GFSarotini_sF @ $$ (imeG5$date JS6& J = && C set -A foods cheese crac.ers shrimp drin.s Fhot dogsF sandHiches ? t-peset -i nGA > for person in 5$` 5guestfile& do =A if XX 5person G root ZZ then continue else # !tart of here document == mail ' 's F8art-F 5person ``- MI*IS 6i 5UpersonVT 8lease /oin me at 58LAC7 for a part-T :eet me at 5(ime o_cloc.. I_ll bring the ice cream. \ould -ou please bring 5UfoodsX5nZV and an-thing else -ou Hould li.e to eat? Let me .noH if -ou can ma.e it. 6ope to see -ou soon. 9our pal, ellieaYhostnameY MI*IS =" nGnJ= =< =; if $$ 5U4foodsXbZV GG 5n && then set -A foods cheese crac.ers shrimp drin.s Fhot dogsF sandHiches fi

fi =N done print F#-e...F

30

1. This line lets the kernel know that you are running a Korn shell script. 2. This is a co ent. !t is ignore" #y the shell$ #ut i portant %or anyone trying to un"erstan" what the script is "oing. 3. The &aria#le guestfile is set to the %ull pathna e o% a %ile calle" guests. 4. This line rea"s' !% the %ile guests "oes not e(ist$ then print to the screen )guests nonexistent) an" e(it %ro 5. *n en&iron ent &aria#le is assigne" a &alue an" e(porte" + a"e a&aila#le to su#shells,. 6. The output o% the -.!/01inu( co an"$ the hour o% the "ay$ is assigne" to the &aria#le calle" (ime. 2aria#les are assigne" the &alues %or the place an" ti e. an". 3ach ite on the list can #e accesse" with an in"e( starting at 0. the script.

7. The list o% %oo"s to #ring is assigne" to an array calle" foods with the set 'A co 8. The t-peset 'i co an" is use" to create an integer &alue. ail

9. 4or each person on the guest list a #ring.

essage will #e create" in&iting the person to a party at a gi&en place an" ti e$ an" assigning a %oo" %ro

the list to

10. The con"ition tests %or the user root. !% the user is root$ control will go #ack to the top o% the loop an" assign the ne(t user in the guest list to the &aria#le$ person. 11. The ail essage is sent. The essage #o"y is containe" in a here document.

12. The &aria#le n is incre ente" #y 1. 13. !% the nu #er o% ele ents in the array is e5ual to the &alue o% the &aria#le$ then the en" o% the array has #een reache". 14. This arks the en" o% the looping state ents.

31

S-ar putea să vă placă și