<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ro">
		<id>https://wiki.lug.ro/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Xsimio</id>
		<title>Wiki.lug.ro - Contribuții utilizator [ro]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.lug.ro/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Xsimio"/>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php/Special:Contribu%C8%9Bii/Xsimio"/>
		<updated>2026-09-23T16:13:33Z</updated>
		<subtitle>Contribuții utilizator</subtitle>
		<generator>MediaWiki 1.27.7</generator>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=5604</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=5604"/>
				<updated>2010-01-06T21:28:22Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu=DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este $numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatie:&lt;br /&gt;
&lt;br /&gt;
* in exemplul de mai jos executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folosind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; - tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' - tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` - sunt folosite pentru a executa comanda aflata intre acestea&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #echo &amp;quot;Astazi este data&amp;quot;&lt;br /&gt;
 #echo &amp;quot;Astazi este `date`&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Se observa ca in primul caz a fost afisat sirul de caractere &amp;quot;Astazi este data&amp;quot; iar in cel de-al doilea caz este afisata data de astazi.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b&amp;gt;Exit Status&amp;lt;/b&amp;gt; - Starea de exit===&lt;br /&gt;
&lt;br /&gt;
De obicei, in Linux, daca o anumita comanda sau script au fost executatate, ele returneaza doua tipuri de valori, care sunt folosite pentru a vedea daca comanda sau scriptul au fost executate corect sau nu.&lt;br /&gt;
&lt;br /&gt;
Daca valoarea returnata este 0 atunci comanda a fost executata cu succes iar daca valoarea returnata este diferita de 0 atunci a aparut o eroare in executarea comenzii sau a scriptului.&lt;br /&gt;
&lt;br /&gt;
Pentru a avea valoarea starii de exit, se foloseste variabila speciala $?. Urmatoarele exercitii sper sa va lamureasca in legatura cu folosirea acestei variabile speciale.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # expr 1 + 2&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echo Buna ziua&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # wildwest sunt_obosit?&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # date&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echon $?&lt;br /&gt;
 # echo $?&lt;br /&gt;
&lt;br /&gt;
===Declaratia de citire (&amp;lt;b&amp;gt;read&amp;lt;/b&amp;gt;)===&lt;br /&gt;
&lt;br /&gt;
Aceasta declaratie este folosita pentru preluarea datelor de la utilizator prin intermediul tastaturii si memorarea datelor in variabile.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 read variabila1, variabila2,... variabilaN&lt;br /&gt;
&lt;br /&gt;
Urmatorul script ii cere utilizatorului numele si apoi asteapta introducerea acestuia de la tastatura. Utilizatorul introduce numele la tastatura (dupa scrierea numelui trebuie apasata tasta ENTER) si numele introdus prin intermediul tastaturii este memorat in variabila &amp;lt;b&amp;gt;fname&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #mcedit script.sh&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 #script pentru citirea numelui de la tastatura&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numele dumneavoastra va rog:&amp;quot;&lt;br /&gt;
 read fname&lt;br /&gt;
 echo &amp;quot;Buna $fname, ma bucur de cunostinta!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Rularea acestuia se va face in felul urmator:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Numele dumneavoastra va rog:&amp;lt;b&amp;gt;adrian&amp;lt;/b&amp;gt;&lt;br /&gt;
 Buna adrian, ma bucur de cunostinta!&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Meta caracterele (folosite pentru specificarea globala a numelui unui fisier)===&lt;br /&gt;
&lt;br /&gt;
Meta caracterul:&lt;br /&gt;
&lt;br /&gt;
 * - potriveste orice caracter sau grup de caractere&lt;br /&gt;
 ? - potriveste orice caracter dar numai unul&lt;br /&gt;
 [...] - inlocuieste doar cu caracterele aflate intre paranteze&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls /bin/[a-c]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin care incep cu litera a, b sau c&lt;br /&gt;
&lt;br /&gt;
 #ls /bin/[!a-f]*   sau   #ls /bin/[^a-f]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin cu exceptia celor care incep cu un caracter aflat in seria mentionata&lt;br /&gt;
&lt;br /&gt;
===Mai multe comenzi intr-o singura linie de comanda===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1; comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 #date; who&lt;br /&gt;
&lt;br /&gt;
Comanda de mai sus va afisa data de astazi urmata de userul cu care suntem logati. In exact acelasi scop poate fi folosita si urmatoarea linie de comanda:&lt;br /&gt;
&lt;br /&gt;
 #date who&lt;br /&gt;
&lt;br /&gt;
===Procesarea liniei de comanda===&lt;br /&gt;
&lt;br /&gt;
Incercati urmatoarea comanda (se presupune ca fisierul &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; nu exista pe sistemul dumneavoastra):&lt;br /&gt;
&lt;br /&gt;
 #ls script.sh&lt;br /&gt;
&lt;br /&gt;
Va fi afisat un mesaj asemanator cu urmatorul:&lt;br /&gt;
&lt;br /&gt;
 - script.sh: No such file or directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; este numele unei comenzi efective si shell-ul o executa in momentul in care aceasta este tastata la prompter. Acum ia nastere o alta intrebare &amp;lt;b&amp;gt;Ce sunt comenzile?&amp;lt;/b&amp;gt;. Ce se intampla cand tastam &amp;lt;b&amp;gt;#ls script.sh&amp;lt;/b&amp;gt;?&lt;br /&gt;
Primul cuvant al liniei de comanda este &amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; - numele comenzii ce urmeaza sa fie executata. Orice altceva pe acea linie este citit ca fiind un argument pentru comanda respectiva.&lt;br /&gt;
&lt;br /&gt;
 #tail +10 script.sh&lt;br /&gt;
&lt;br /&gt;
Numele comenzii este &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; iar &amp;lt;b&amp;gt;+10&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; sunt considerate argumente ale acestei comenzi.&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; detine numarul de argumente specificate in linia de comanda. Iar &amp;lt;b&amp;gt;$*&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;$@&amp;lt;/b&amp;gt; se refera la toate argumentele date scriptului.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare argumentele in linia de comanda===&lt;br /&gt;
&lt;br /&gt;
1. Pentru a spune comenzii sau utilitarului ce optiuni sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
2. Pentru a informa comanda sau utilitarul ce fisier sau grup de fisiere sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
Sa luam de exemplu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; care este folosita pentru stergerea unui fisier, dar cum ii vom spune noi acestei comenzi ce fisier sa stearga (ea nu ne va intreba ce fisier dorim sa stergem). Ceea ce vom face este sa rulam comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #rm {numele fisierului}&lt;br /&gt;
&lt;br /&gt;
In acest exemplu &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; este comanda iar &amp;lt;b&amp;gt;numele-fisierului&amp;lt;/b&amp;gt; este fisierul pe care dorim sa il stergem. In acest mod ii precizam explicit comenzii &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; ce fisier sa stearga. Astfel noi comunicam cu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; specificand numele fisierului. De asemenea pot fi transmise prin intermediul liniei de comanda anumite argumente scriptului pe care il rulam.&lt;br /&gt;
&lt;br /&gt;
In cazul scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
 #script.sh unu doi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; este numele scriptului rulat&lt;br /&gt;
&amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt; reprezinta primul argument trecut scriptului prin intermediul liniei de comanda&lt;br /&gt;
&amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt; reprezinta cel de-al doilea argument.&lt;br /&gt;
&lt;br /&gt;
In cadrul scriptului nostru, daca dorim sa ne referim la aceste argumente o vom face in felul urmator:&lt;br /&gt;
&amp;lt;b&amp;gt;$0&amp;lt;/b&amp;gt; reprezinta numele scriptului&lt;br /&gt;
&amp;lt;b&amp;gt;$1&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$2&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In acest exemplu variabila predefinita &amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; deoarece au fost introduse doar doua argumente scriptului nostru. Trebuie notat faptul ca la un moment dat pot fi folosite un numar de maxim 9 argumente notate de la $1 la $9. Notatiile $1...$9 reprezinta parametrii de pozitie.&lt;br /&gt;
Urmatorul script va fi folosit pentru afisarea si prelucrarea argumentelor liniei de comanda:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 #folosirea argumentelor&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numarul de argumente din linia de comanda este de $#&amp;quot;&lt;br /&gt;
 echo &amp;quot;$0 este numele scriptului&amp;quot;&lt;br /&gt;
 echo &amp;quot;$1 reprezinta primul argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;$2 reprezinta cel de al doilea argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;toate argumentele sunt: $* sau $@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pentru rulare se vor folosi comenzile:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Nota&amp;lt;/b&amp;gt;&lt;br /&gt;
Nu se pot atribui alte valori parametrilor de pozitie in cadrul scriptului.&lt;br /&gt;
&lt;br /&gt;
Urmatoarele declaratii sunt invalide:&lt;br /&gt;
&lt;br /&gt;
 $1 = doi&lt;br /&gt;
 $2 = unu&lt;br /&gt;
&lt;br /&gt;
===Redirectarea intrarilor si iesirilor standard===&lt;br /&gt;
&lt;br /&gt;
In cea mai mare parte comenzile au iesirile spre monitor iar intrarile sunt luate de la tastatura, dar in Linux, ca si in alte sisteme de operare, se pot trimite iesirile catre fisiere sau de asemenea citirea intrarilor din fisiere.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #ls&lt;br /&gt;
&lt;br /&gt;
comanda de mai sus afiseaza rezultatul pe monitor. Pentru directionarea rezultatului intr-un fisier va fi folosita comanda:&lt;br /&gt;
&lt;br /&gt;
 #ls &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Exista trei mari simboluri de redirectare:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;, &amp;gt;&amp;gt; si &amp;lt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Rezultatul rularii comenzii respective va fi trimis catre fisier. Trebuie mentionat faptul ca daca fisierul in care este trimis rezultatul nu exista, atunci acesta este creat iar daca exista, continutul acestuia va fi inlocuit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt;&amp;gt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Daca fisierul nu exista atunci el este creat iar daca exista, continutul rezultat in urma rularii comenzii va fi pus la sfarsitul fisierului fara a se pierde nimic din informatia continuta initial in fisier.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;lt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Acest simbol este folosit pentru preluarea informatiilor necesare rularii comenzii nu din tastatura ci din fisierul respectiv.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #cat &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
De asemenea pot fi folosite mai multe simboluri de redirectare in aceeasi linie de comanda, la fel ca in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 #cat &amp;gt; source_name&lt;br /&gt;
 alina&lt;br /&gt;
 linux&lt;br /&gt;
 daniel&lt;br /&gt;
 mele&lt;br /&gt;
 #sort &amp;lt; source_name &amp;gt; sorted_name&lt;br /&gt;
 #cat sorted_name&lt;br /&gt;
 alina&lt;br /&gt;
 daniel&lt;br /&gt;
 linux&lt;br /&gt;
 mele&lt;br /&gt;
&lt;br /&gt;
In exemplul anterior comanda sort a preluat datele de intrare din fisierul source_name iar rezultatul a fost redirectat catre fisierul sorted_name.&lt;br /&gt;
Un alt exemplu ar putea fi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tr &amp;quot;[a-z]&amp;quot; &amp;quot;[A-Z]&amp;quot; &amp;lt; sorce_name &amp;gt; majuscule_name&lt;br /&gt;
 #cat majuscule_name&lt;br /&gt;
 ALINA&lt;br /&gt;
 DANIEL&lt;br /&gt;
 LINUX&lt;br /&gt;
 MELE&lt;br /&gt;
&lt;br /&gt;
Comanda &amp;lt;b&amp;gt;tr&amp;lt;/b&amp;gt; a fost folosita aici pentru transformarea minusculelor in majuscule dupa care rezultatul a fost scris in fisierul &amp;lt;i&amp;gt;majuscule_name&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Semnul PIPE===&lt;br /&gt;
&lt;br /&gt;
Acesta reprezinta modalitatea de conectare a iesirii unei comenzi de intrarea unei alte comenzi fara folosirea unui fisier temporar. Acestea sunt folosite pentru rularea a doua sau mai multe comenzi in aceeasi linie de comanda.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1 | comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #who | sort&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda va returna o lista a utilizatorilor logati pe masina respectiva intr-o ordine sortata.&lt;br /&gt;
&lt;br /&gt;
 #who | wc -l&lt;br /&gt;
&lt;br /&gt;
Va returna numarul de useri total logati in sistem.&lt;br /&gt;
&lt;br /&gt;
 #who | grep root&lt;br /&gt;
&lt;br /&gt;
Va returna doar logarile cu userul root.&lt;br /&gt;
&lt;br /&gt;
===Filtrele===&lt;br /&gt;
&lt;br /&gt;
Daca in linux o comanda isi accepta intrarea din intrarea standard si rezultatul acesteia este o iesire standard atunci comanda respectiva este cunoscuta sub numele de filtru. Ca exemplu presupunem ca avem fisierul &amp;lt;i&amp;gt;nume.txt&amp;lt;/i&amp;gt; care contine 100 de linii si din acesta am dori sa scoatem liniile de la 20 la 30 iar rezultatul sa il punem in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Pentru aceasta vom folosi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tail +20 &amp;lt; nume.txt |head -n 30 &amp;gt; flist&lt;br /&gt;
&lt;br /&gt;
In acest comanda &amp;lt;b&amp;gt;head&amp;lt;/b&amp;gt; este un filtru deoarece intrarea acesteia este preluata din rezultatul comenzii &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; si rezultatul acesteia este directionat in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Un alt exemplu il reprezinta comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #sort &amp;lt; snume | uniq &amp;gt; u_snume&lt;br /&gt;
&lt;br /&gt;
===Ce sunt procesele===&lt;br /&gt;
&lt;br /&gt;
Procesul este un fel de program sau sarcina pentru calculatorul nostru. Un exemplu ar putea fi:&lt;br /&gt;
&lt;br /&gt;
 #ps fax&lt;br /&gt;
&lt;br /&gt;
Aici apare o lista a tuturor proceselor de pe sistemul nostru in momentul de fata. Fiecarui proces in linux ii este asociat un PID sau process-id format dintr-un numar care ia valori intre 0 si 65535.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare procesele===&lt;br /&gt;
&lt;br /&gt;
Dupa cum se stie linuxul este un sistem de operare pe care poate rula mai mult de o singura sarcina la un moment dat daca se doreste acest lucru.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls / -R | wc -l&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda va afisa numarul total de fisiere existe pe sistemul dumneavoastra, doar ca ii va lua o anumita perioada de timp sa faca acest lucru. Pentru a nu fi nevoiti sa asteptam finalizarea comenzii curente si abia apoi sa putem executa o noua comanda, se poate rula comanda curenta in background. Acest lucru se poate face in felul urmator.&lt;br /&gt;
&lt;br /&gt;
 #ls / R | wc -l &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Se observa folosirea caracterului ampersand (&amp;amp;) la finalul comenzii, avand ca efect executarea comenzii in background si oferindu-ne imediat posibilitatea de executie a unei noi comenzi.&lt;br /&gt;
&lt;br /&gt;
===Comenzi linux referitoare la procese===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ps&amp;lt;/b&amp;gt; - pentru afisarea proceselor care ruleaza in momentul respectiv&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;kill {PID}&amp;lt;/b&amp;gt; - pentru oprirea procesului identificat prin pid-ul din cadrul comenzii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;killall {numele-procesului}&amp;lt;/b&amp;gt; - pentru oprirea procesului cu numele respectiv.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt; atentie sa nu dati kill procesului &amp;lt;b&amp;gt;sshd.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;ps -ag&amp;lt;/b&amp;gt; - pentru aflarea de informatii despre toate procesele care ruleaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;kill 0&amp;lt;/b&amp;gt; - pentru oprirea tuturor proceselor cu exceptia propriei conexiuni pe sistem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ps aux&amp;lt;/b&amp;gt; - pentru afisarea proceselor si o lista a userilor carora apartin aceste procese&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;top&amp;lt;/b&amp;gt; - pentru obtinerea unei liste a proceselor cu utilizarea memoriei si a procesorului de catre acestea, cu update in timp real&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;pstree&amp;lt;/b&amp;gt; - pentru obtinerea unei structuri arborescente a proceselor&lt;br /&gt;
&lt;br /&gt;
==Constructii in programarea structurata BASH shell==&lt;br /&gt;
&lt;br /&gt;
===Introducere===&lt;br /&gt;
&lt;br /&gt;
Luarea deciziilor este foarte importanta atat in viata de zi cu zi cat si in programarea calculatoarelor. Acest capitol face o scurta introducere in constructiile programarii bash, cum ar fi:&lt;br /&gt;
&lt;br /&gt;
* Luarea deciziilor&lt;br /&gt;
* Cicluri&lt;br /&gt;
&lt;br /&gt;
Exista diferente intre luarea deciziilor in viata de zi cu zi fata de deciziile pe care le iau calculatoarele? Deciziile sunt complicate pentru noi, oamenii, pe cand tot ceea ce intelege un calculator este sub forma de 0 (zero) si 1 care reprezinta Da sau Nu. Pentru a putea intelege toate acestea vom folosi in continuare &amp;lt;b&amp;gt;bc&amp;lt;/b&amp;gt; - Calculator pentru linux.&lt;br /&gt;
&lt;br /&gt;
 #bc&lt;br /&gt;
&lt;br /&gt;
Dupa pornirea acestui program bc este pornit si asteapta introducerea comenzilor de la tastatura. Daca vom tasta &amp;lt;b&amp;gt;5 + 2&amp;lt;/b&amp;gt; vom observa:&lt;br /&gt;
&lt;br /&gt;
 #5 + 2&lt;br /&gt;
 #7&lt;br /&gt;
&lt;br /&gt;
7 este raspunsul pe care l-am primit de la acest program, adica rezultatul adunarii dintre 5 si 2. Puteti incerca in continuare:&lt;br /&gt;
&lt;br /&gt;
 #5 - 2&lt;br /&gt;
 #5 / 2&lt;br /&gt;
 #5 &amp;gt; 2&lt;br /&gt;
&lt;br /&gt;
Vom observa ca rezultatul ultimei operatii va fi 1. bc compara cele doua valori si daca raspunsul este afirmativ (YES) ne va afisa valoarea 1. Puteti incerca acum:&lt;br /&gt;
&lt;br /&gt;
 #5 &amp;lt; 2&lt;br /&gt;
 #0&lt;br /&gt;
&lt;br /&gt;
0 indica faptul ca valoarea expresiei de mai sus este falsa. Pentru a ne clarifica mai bine raspunsurile date de acest program, pute incerca comparatiile de mai jos:&lt;br /&gt;
&lt;br /&gt;
 #5 &amp;gt; 12&lt;br /&gt;
 #5 == 10&lt;br /&gt;
 #5 != 2&lt;br /&gt;
 #5 == 5&lt;br /&gt;
 #12 &amp;lt; 2&lt;br /&gt;
&lt;br /&gt;
===Conditia if===&lt;br /&gt;
&lt;br /&gt;
Conditia if este folosita pentru luarea deciziilor in scripturile shell, daca valoarea conditiei este 1 sau YES atunci comanda este executata.&lt;br /&gt;
&lt;br /&gt;
 Syntax:&lt;br /&gt;
 &lt;br /&gt;
 if condition&lt;br /&gt;
    then&lt;br /&gt;
        command1 if condition is true or if exit status&lt;br /&gt;
        of condition is 0 (zero)&lt;br /&gt;
        ...&lt;br /&gt;
        ...&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
O definitie a conditiei ar putea fi urmatoare:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;quot;Conditia nu este decat o simpla comparatie intre doua valori&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expresia poate fi definita astfel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;quot;O expresie este o combinatie de valori, operatori relationali (cum ar fi &amp;gt;, &amp;lt;, &amp;lt;&amp;gt; etc.) si operatori matematici (cum ar fi +, -, / etc.)&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In continuare sunt prezentate cateva exemple de expresii:&lt;br /&gt;
&lt;br /&gt;
 5 &amp;gt; 2&lt;br /&gt;
 3 + 6&lt;br /&gt;
 3 * 65&lt;br /&gt;
 a &amp;lt; b&lt;br /&gt;
 c &amp;gt; 5&lt;br /&gt;
 c &amp;gt; 5 + 30 -1&lt;br /&gt;
&lt;br /&gt;
Tastati urmatoare comenzi, presupunand ca exista fisierul numit &amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #cat file&lt;br /&gt;
 #echo $?&lt;br /&gt;
&lt;br /&gt;
Comanda cat returneaza starea de exit 0, daca a fost executata cu succes, iar aceasta poate fi folosita in cazul conditiei if dupa cum se poate vedea in scriptul urmator:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; fisier&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 #Script pentru printarea fisierul&lt;br /&gt;
 #&lt;br /&gt;
 if cat $1&lt;br /&gt;
 then&lt;br /&gt;
 echo -e &amp;quot;\n\nFisierul $1, a fost gasit si afisat cu succes...&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Rulati scriptul de mai sus dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # chmod 755 fisier&lt;br /&gt;
 # ./fisier file&lt;br /&gt;
&lt;br /&gt;
Numele scriptului este &amp;lt;b&amp;gt;fisier&amp;lt;/b&amp;gt; ($0) si &amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt; este argumentul (care este $1). &lt;br /&gt;
&lt;br /&gt;
Explicatii detaliate:&lt;br /&gt;
&lt;br /&gt;
Daca comanda &amp;lt;b&amp;gt;cat&amp;lt;/b&amp;gt; gaseste fisierul &amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt; si il afiseaza pe ecran, inseamna ca aceasta comanda a fost executata cu succes si starea ei de exit este 0. Astfel conditia noastra if este de asemenea adevarata si declaratia &amp;lt;b&amp;gt;echo -e &amp;quot;\n\nFisierul $1, a fost gasit si afisat cu succes...&amp;quot;&amp;lt;/b&amp;gt; este executata cu succes. Daca comanda &amp;lt;b&amp;gt;cat&amp;lt;/b&amp;gt; nu este executata cu succes atunci valoarea starii de exit returnata de aceasta este diferita de zero si declaratia &amp;lt;b&amp;gt;echo -e &amp;quot;\n\nFisierul $1, a fost gasit si afisat cu succes...&amp;quot;&amp;lt;/b&amp;gt; nu este executata de catre shell.&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;test&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;[ expresie ]&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Comanda teste sau [ expresie ] este folosita pentru a vedea daca o expresie este adevarata, si daca aceasta este adevarata este returnata valoarea zero(0). Altfel, este returnat nonzero pentru fals.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 test expresie SAU [ expresie ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Exemplu&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Urmatorul script &amp;lt;b&amp;gt;ispositive&amp;lt;/b&amp;gt; verifica daca argumentul care ii este dat este pozitiv sau nu.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 # Script to see whether argument is positive&lt;br /&gt;
 #&lt;br /&gt;
 if test $1 -gt 0&lt;br /&gt;
 then&lt;br /&gt;
 echo &amp;quot;numarul $1 este pozitiv&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Se ruleaza in modul urmator:&lt;br /&gt;
&lt;br /&gt;
 # chmod 755 ispositive&lt;br /&gt;
 # ./ispositive 5&lt;br /&gt;
 numarul 5 este pozitiv&lt;br /&gt;
&lt;br /&gt;
 # ./ispositive -45&lt;br /&gt;
 Nu este afisat nimic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Test&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;[ expresie ]&amp;lt;/b&amp;gt; opereaza cu:&lt;br /&gt;
&lt;br /&gt;
 * Intregi (Numere fara punct zecimal)&lt;br /&gt;
 * Tipuri de fisiere&lt;br /&gt;
 * Caractere ale stringurilor&lt;br /&gt;
&lt;br /&gt;
Operatori matematici sunt urmatorii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-eq&amp;lt;/b&amp;gt; (este egal cu)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-ne&amp;lt;/b&amp;gt; (nu este egal cu)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-lt&amp;lt;/b&amp;gt; (mai mic decat)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-le&amp;lt;/b&amp;gt; (mai mic sau egal decat)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-gt&amp;lt;/b&amp;gt; (mai mare decat)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-ge&amp;lt;/b&amp;gt; (mai mare sau egal decat)&lt;br /&gt;
&lt;br /&gt;
Operatori pentru stringuri:&lt;br /&gt;
&lt;br /&gt;
stringul1 &amp;lt;b&amp;gt;=&amp;lt;/b&amp;gt; stringul2 (stringul1 este egal cu stringul2)&lt;br /&gt;
&lt;br /&gt;
stringul1 &amp;lt;b&amp;gt;!=&amp;lt;/b&amp;gt; stringul2 (stringul1 nu este egal cu stringul 2)&lt;br /&gt;
&lt;br /&gt;
stringul1 (stringul1 este ne null sau nedefinit)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-n&amp;lt;/b&amp;gt; stringul1 (stringul1 este ne null si exista)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-z&amp;lt;/b&amp;gt; stringul1 (stringul1 este nul si exista)&lt;br /&gt;
&lt;br /&gt;
Pentru fisiere si directoare tipurile de operatori sunt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-s&amp;lt;/b&amp;gt; fisier (fisierul care nu este gol)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-f&amp;lt;/b&amp;gt; fisier (fisierul exista si nu este un director)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-d&amp;lt;/b&amp;gt; fisier (este director, exista si nu este fisier)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-w&amp;lt;/b&amp;gt; fisier (fisierul are drepturi de scriere)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-r&amp;lt;/b&amp;gt; fisier (fisierul are atributul doar de citire, read-only)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-x&amp;lt;/b&amp;gt; fisier (fisierul are atribut de executie)&lt;br /&gt;
&lt;br /&gt;
Operatorii logici sunt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;!&amp;lt;/b&amp;gt; expresie (logic NOT)&lt;br /&gt;
&lt;br /&gt;
expresie1 &amp;lt;b&amp;gt;-a&amp;lt;/b&amp;gt; expresie2 (logic AND)&lt;br /&gt;
&lt;br /&gt;
expresie1 &amp;lt;b&amp;gt;-o&amp;lt;/b&amp;gt; expresie2 (logic OR)&lt;br /&gt;
&lt;br /&gt;
===if...else...fi===&lt;br /&gt;
&lt;br /&gt;
Daca conditia data este adevarata atunci comanda1 este executata, altfel comanda2 este executata.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 if condition&lt;br /&gt;
 then&lt;br /&gt;
 	conditia este zero (adevarata - 0)&lt;br /&gt;
 	se vor executa toate comenzile pana la else&lt;br /&gt;
 else&lt;br /&gt;
 	daca conditia nu este adevarata&lt;br /&gt;
 	se executa toate comenzile pana la fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Spre exemplu, scrieti si rulati scriptul urmator: #mcedit este_poz.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 # Script pentru a observa daca argumentul este pozitiv sau negativ&lt;br /&gt;
 #&lt;br /&gt;
 if [ $# -eq 0 ]&lt;br /&gt;
 then&lt;br /&gt;
 echo &amp;quot;$0 : Trebuie sa introduceti un intreg&amp;quot;&lt;br /&gt;
 exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 if test $1 -gt 0&lt;br /&gt;
 then&lt;br /&gt;
 echo &amp;quot; $1 este un numar pozitiv&lt;br /&gt;
 else&lt;br /&gt;
 echo &amp;quot; $1 este un numar negativ&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Il puteti rula dupa cum urmeaza:&lt;br /&gt;
 #chmod +x este_poz.sh&lt;br /&gt;
 #./este_poz.sh 5&lt;br /&gt;
 5 este un numar pozitiv&lt;br /&gt;
&lt;br /&gt;
 #./este_poz&lt;br /&gt;
 ./este_poz : Trebuie sa introduceti un intreg&lt;br /&gt;
&lt;br /&gt;
 #./este_poz.sh -5&lt;br /&gt;
 -5 este un numar negativ&lt;br /&gt;
&lt;br /&gt;
Explicatii detaliate:&lt;br /&gt;
Prima parte a scriptului verifica daca argumentul este dat in linia de comanda, si daca acesta nu este dat afiseaza un mesaj de eroare. If-ul testeaza daca numarul de argumente este sau nu egal cu 0. Daca au fost date scriptului argumente in linia de comanda atunci declaratia din if devine falsa, iar daca a fost dat un argument scriptului, aceasta cpata valoarea de adevar true.&lt;br /&gt;
Mai jos se verifica daca argumentul, care acum exista este pozitiv sau negativ si se afiseaza un mesaj corespunzator.&lt;br /&gt;
&lt;br /&gt;
Se pot folosi de asemenea si if-uri grupate:&lt;br /&gt;
&lt;br /&gt;
 #mcedit if_grupat.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 os=0&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;1. Windows (XP)&amp;quot;&lt;br /&gt;
 echo &amp;quot;2. Linux (Debian)&amp;quot;&lt;br /&gt;
 echo -n &amp;quot;Alegeti sistemul preferat de operare [1 or 2]? &amp;quot;&lt;br /&gt;
 read os&lt;br /&gt;
 &lt;br /&gt;
 if [ $os -eq 1 ] ; then&lt;br /&gt;
 	echoo &amp;quot;Ai ales Windows (XP)&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
 	if [ $os -eq 2 ] ; then&lt;br /&gt;
 		echo &amp;quot;Ai ales Linux (Debian)&amp;quot;&lt;br /&gt;
 	else&lt;br /&gt;
 		echo &amp;quot;Astazi esti foarte nehotarat&amp;quot;&lt;br /&gt;
 	fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
 #chmod +x if_grupat.sh&lt;br /&gt;
&lt;br /&gt;
Se poate observa foarte bine in scriptul de mai sus folosirea grupata a if-ului.&lt;br /&gt;
&lt;br /&gt;
Sintaxa acestui tip de declaratie este urmatoarea:&lt;br /&gt;
&lt;br /&gt;
 if conditie&lt;br /&gt;
 then&lt;br /&gt;
 	if conditie&lt;br /&gt;
 	then&lt;br /&gt;
 		...&lt;br /&gt;
 		...&lt;br /&gt;
 		comenzi&lt;br /&gt;
 	else&lt;br /&gt;
 		...&lt;br /&gt;
 		...&lt;br /&gt;
 		comenzi&lt;br /&gt;
 	fi&lt;br /&gt;
 else&lt;br /&gt;
 	...&lt;br /&gt;
 	...&lt;br /&gt;
 	comenzi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Articol original in limba engleza: http://www.freeos.com/guides/lsst/&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Traducere a fost inceputa de catre Simionov Daniel Adrian.&amp;lt;/i&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=5603</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=5603"/>
				<updated>2010-01-06T21:26:05Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Despre acest articol===&lt;br /&gt;
&lt;br /&gt;
este o  traducere? facuta de catre cine, dupa ce material?&lt;br /&gt;
&lt;br /&gt;
sau un articol original? scris de cine? cind? autor? data? in lucru? terminat?&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu=DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este $numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatie:&lt;br /&gt;
&lt;br /&gt;
* in exemplul de mai jos executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folosind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; - tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' - tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` - sunt folosite pentru a executa comanda aflata intre acestea&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #echo &amp;quot;Astazi este data&amp;quot;&lt;br /&gt;
 #echo &amp;quot;Astazi este `date`&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Se observa ca in primul caz a fost afisat sirul de caractere &amp;quot;Astazi este data&amp;quot; iar in cel de-al doilea caz este afisata data de astazi.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b&amp;gt;Exit Status&amp;lt;/b&amp;gt; - Starea de exit===&lt;br /&gt;
&lt;br /&gt;
De obicei, in Linux, daca o anumita comanda sau script au fost executatate, ele returneaza doua tipuri de valori, care sunt folosite pentru a vedea daca comanda sau scriptul au fost executate corect sau nu.&lt;br /&gt;
&lt;br /&gt;
Daca valoarea returnata este 0 atunci comanda a fost executata cu succes iar daca valoarea returnata este diferita de 0 atunci a aparut o eroare in executarea comenzii sau a scriptului.&lt;br /&gt;
&lt;br /&gt;
Pentru a avea valoarea starii de exit, se foloseste variabila speciala $?. Urmatoarele exercitii sper sa va lamureasca in legatura cu folosirea acestei variabile speciale.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # expr 1 + 2&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echo Buna ziua&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # wildwest sunt_obosit?&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # date&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echon $?&lt;br /&gt;
 # echo $?&lt;br /&gt;
&lt;br /&gt;
===Declaratia de citire (&amp;lt;b&amp;gt;read&amp;lt;/b&amp;gt;)===&lt;br /&gt;
&lt;br /&gt;
Aceasta declaratie este folosita pentru preluarea datelor de la utilizator prin intermediul tastaturii si memorarea datelor in variabile.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 read variabila1, variabila2,... variabilaN&lt;br /&gt;
&lt;br /&gt;
Urmatorul script ii cere utilizatorului numele si apoi asteapta introducerea acestuia de la tastatura. Utilizatorul introduce numele la tastatura (dupa scrierea numelui trebuie apasata tasta ENTER) si numele introdus prin intermediul tastaturii este memorat in variabila &amp;lt;b&amp;gt;fname&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #mcedit script.sh&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 #script pentru citirea numelui de la tastatura&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numele dumneavoastra va rog:&amp;quot;&lt;br /&gt;
 read fname&lt;br /&gt;
 echo &amp;quot;Buna $fname, ma bucur de cunostinta!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Rularea acestuia se va face in felul urmator:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Numele dumneavoastra va rog:&amp;lt;b&amp;gt;adrian&amp;lt;/b&amp;gt;&lt;br /&gt;
 Buna adrian, ma bucur de cunostinta!&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Meta caracterele (folosite pentru specificarea globala a numelui unui fisier)===&lt;br /&gt;
&lt;br /&gt;
Meta caracterul:&lt;br /&gt;
&lt;br /&gt;
 * - potriveste orice caracter sau grup de caractere&lt;br /&gt;
 ? - potriveste orice caracter dar numai unul&lt;br /&gt;
 [...] - inlocuieste doar cu caracterele aflate intre paranteze&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls /bin/[a-c]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin care incep cu litera a, b sau c&lt;br /&gt;
&lt;br /&gt;
 #ls /bin/[!a-f]*   sau   #ls /bin/[^a-f]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin cu exceptia celor care incep cu un caracter aflat in seria mentionata&lt;br /&gt;
&lt;br /&gt;
===Mai multe comenzi intr-o singura linie de comanda===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1; comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 #date; who&lt;br /&gt;
&lt;br /&gt;
Comanda de mai sus va afisa data de astazi urmata de userul cu care suntem logati. In exact acelasi scop poate fi folosita si urmatoarea linie de comanda:&lt;br /&gt;
&lt;br /&gt;
 #date who&lt;br /&gt;
&lt;br /&gt;
===Procesarea liniei de comanda===&lt;br /&gt;
&lt;br /&gt;
Incercati urmatoarea comanda (se presupune ca fisierul &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; nu exista pe sistemul dumneavoastra):&lt;br /&gt;
&lt;br /&gt;
 #ls script.sh&lt;br /&gt;
&lt;br /&gt;
Va fi afisat un mesaj asemanator cu urmatorul:&lt;br /&gt;
&lt;br /&gt;
 - script.sh: No such file or directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; este numele unei comenzi efective si shell-ul o executa in momentul in care aceasta este tastata la prompter. Acum ia nastere o alta intrebare &amp;lt;b&amp;gt;Ce sunt comenzile?&amp;lt;/b&amp;gt;. Ce se intampla cand tastam &amp;lt;b&amp;gt;#ls script.sh&amp;lt;/b&amp;gt;?&lt;br /&gt;
Primul cuvant al liniei de comanda este &amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; - numele comenzii ce urmeaza sa fie executata. Orice altceva pe acea linie este citit ca fiind un argument pentru comanda respectiva.&lt;br /&gt;
&lt;br /&gt;
 #tail +10 script.sh&lt;br /&gt;
&lt;br /&gt;
Numele comenzii este &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; iar &amp;lt;b&amp;gt;+10&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; sunt considerate argumente ale acestei comenzi.&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; detine numarul de argumente specificate in linia de comanda. Iar &amp;lt;b&amp;gt;$*&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;$@&amp;lt;/b&amp;gt; se refera la toate argumentele date scriptului.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare argumentele in linia de comanda===&lt;br /&gt;
&lt;br /&gt;
1. Pentru a spune comenzii sau utilitarului ce optiuni sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
2. Pentru a informa comanda sau utilitarul ce fisier sau grup de fisiere sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
Sa luam de exemplu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; care este folosita pentru stergerea unui fisier, dar cum ii vom spune noi acestei comenzi ce fisier sa stearga (ea nu ne va intreba ce fisier dorim sa stergem). Ceea ce vom face este sa rulam comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #rm {numele fisierului}&lt;br /&gt;
&lt;br /&gt;
In acest exemplu &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; este comanda iar &amp;lt;b&amp;gt;numele-fisierului&amp;lt;/b&amp;gt; este fisierul pe care dorim sa il stergem. In acest mod ii precizam explicit comenzii &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; ce fisier sa stearga. Astfel noi comunicam cu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; specificand numele fisierului. De asemenea pot fi transmise prin intermediul liniei de comanda anumite argumente scriptului pe care il rulam.&lt;br /&gt;
&lt;br /&gt;
In cazul scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
 #script.sh unu doi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; este numele scriptului rulat&lt;br /&gt;
&amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt; reprezinta primul argument trecut scriptului prin intermediul liniei de comanda&lt;br /&gt;
&amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt; reprezinta cel de-al doilea argument.&lt;br /&gt;
&lt;br /&gt;
In cadrul scriptului nostru, daca dorim sa ne referim la aceste argumente o vom face in felul urmator:&lt;br /&gt;
&amp;lt;b&amp;gt;$0&amp;lt;/b&amp;gt; reprezinta numele scriptului&lt;br /&gt;
&amp;lt;b&amp;gt;$1&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$2&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In acest exemplu variabila predefinita &amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; deoarece au fost introduse doar doua argumente scriptului nostru. Trebuie notat faptul ca la un moment dat pot fi folosite un numar de maxim 9 argumente notate de la $1 la $9. Notatiile $1...$9 reprezinta parametrii de pozitie.&lt;br /&gt;
Urmatorul script va fi folosit pentru afisarea si prelucrarea argumentelor liniei de comanda:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 #folosirea argumentelor&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numarul de argumente din linia de comanda este de $#&amp;quot;&lt;br /&gt;
 echo &amp;quot;$0 este numele scriptului&amp;quot;&lt;br /&gt;
 echo &amp;quot;$1 reprezinta primul argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;$2 reprezinta cel de al doilea argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;toate argumentele sunt: $* sau $@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pentru rulare se vor folosi comenzile:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Nota&amp;lt;/b&amp;gt;&lt;br /&gt;
Nu se pot atribui alte valori parametrilor de pozitie in cadrul scriptului.&lt;br /&gt;
&lt;br /&gt;
Urmatoarele declaratii sunt invalide:&lt;br /&gt;
&lt;br /&gt;
 $1 = doi&lt;br /&gt;
 $2 = unu&lt;br /&gt;
&lt;br /&gt;
===Redirectarea intrarilor si iesirilor standard===&lt;br /&gt;
&lt;br /&gt;
In cea mai mare parte comenzile au iesirile spre monitor iar intrarile sunt luate de la tastatura, dar in Linux, ca si in alte sisteme de operare, se pot trimite iesirile catre fisiere sau de asemenea citirea intrarilor din fisiere.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #ls&lt;br /&gt;
&lt;br /&gt;
comanda de mai sus afiseaza rezultatul pe monitor. Pentru directionarea rezultatului intr-un fisier va fi folosita comanda:&lt;br /&gt;
&lt;br /&gt;
 #ls &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Exista trei mari simboluri de redirectare:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;, &amp;gt;&amp;gt; si &amp;lt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Rezultatul rularii comenzii respective va fi trimis catre fisier. Trebuie mentionat faptul ca daca fisierul in care este trimis rezultatul nu exista, atunci acesta este creat iar daca exista, continutul acestuia va fi inlocuit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt;&amp;gt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Daca fisierul nu exista atunci el este creat iar daca exista, continutul rezultat in urma rularii comenzii va fi pus la sfarsitul fisierului fara a se pierde nimic din informatia continuta initial in fisier.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;lt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Acest simbol este folosit pentru preluarea informatiilor necesare rularii comenzii nu din tastatura ci din fisierul respectiv.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #cat &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
De asemenea pot fi folosite mai multe simboluri de redirectare in aceeasi linie de comanda, la fel ca in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 #cat &amp;gt; source_name&lt;br /&gt;
 alina&lt;br /&gt;
 linux&lt;br /&gt;
 daniel&lt;br /&gt;
 mele&lt;br /&gt;
 #sort &amp;lt; source_name &amp;gt; sorted_name&lt;br /&gt;
 #cat sorted_name&lt;br /&gt;
 alina&lt;br /&gt;
 daniel&lt;br /&gt;
 linux&lt;br /&gt;
 mele&lt;br /&gt;
&lt;br /&gt;
In exemplul anterior comanda sort a preluat datele de intrare din fisierul source_name iar rezultatul a fost redirectat catre fisierul sorted_name.&lt;br /&gt;
Un alt exemplu ar putea fi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tr &amp;quot;[a-z]&amp;quot; &amp;quot;[A-Z]&amp;quot; &amp;lt; sorce_name &amp;gt; majuscule_name&lt;br /&gt;
 #cat majuscule_name&lt;br /&gt;
 ALINA&lt;br /&gt;
 DANIEL&lt;br /&gt;
 LINUX&lt;br /&gt;
 MELE&lt;br /&gt;
&lt;br /&gt;
Comanda &amp;lt;b&amp;gt;tr&amp;lt;/b&amp;gt; a fost folosita aici pentru transformarea minusculelor in majuscule dupa care rezultatul a fost scris in fisierul &amp;lt;i&amp;gt;majuscule_name&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Semnul PIPE===&lt;br /&gt;
&lt;br /&gt;
Acesta reprezinta modalitatea de conectare a iesirii unei comenzi de intrarea unei alte comenzi fara folosirea unui fisier temporar. Acestea sunt folosite pentru rularea a doua sau mai multe comenzi in aceeasi linie de comanda.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1 | comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #who | sort&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda va returna o lista a utilizatorilor logati pe masina respectiva intr-o ordine sortata.&lt;br /&gt;
&lt;br /&gt;
 #who | wc -l&lt;br /&gt;
&lt;br /&gt;
Va returna numarul de useri total logati in sistem.&lt;br /&gt;
&lt;br /&gt;
 #who | grep root&lt;br /&gt;
&lt;br /&gt;
Va returna doar logarile cu userul root.&lt;br /&gt;
&lt;br /&gt;
===Filtrele===&lt;br /&gt;
&lt;br /&gt;
Daca in linux o comanda isi accepta intrarea din intrarea standard si rezultatul acesteia este o iesire standard atunci comanda respectiva este cunoscuta sub numele de filtru. Ca exemplu presupunem ca avem fisierul &amp;lt;i&amp;gt;nume.txt&amp;lt;/i&amp;gt; care contine 100 de linii si din acesta am dori sa scoatem liniile de la 20 la 30 iar rezultatul sa il punem in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Pentru aceasta vom folosi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tail +20 &amp;lt; nume.txt |head -n 30 &amp;gt; flist&lt;br /&gt;
&lt;br /&gt;
In acest comanda &amp;lt;b&amp;gt;head&amp;lt;/b&amp;gt; este un filtru deoarece intrarea acesteia este preluata din rezultatul comenzii &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; si rezultatul acesteia este directionat in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Un alt exemplu il reprezinta comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #sort &amp;lt; snume | uniq &amp;gt; u_snume&lt;br /&gt;
&lt;br /&gt;
===Ce sunt procesele===&lt;br /&gt;
&lt;br /&gt;
Procesul este un fel de program sau sarcina pentru calculatorul nostru. Un exemplu ar putea fi:&lt;br /&gt;
&lt;br /&gt;
 #ps fax&lt;br /&gt;
&lt;br /&gt;
Aici apare o lista a tuturor proceselor de pe sistemul nostru in momentul de fata. Fiecarui proces in linux ii este asociat un PID sau process-id format dintr-un numar care ia valori intre 0 si 65535.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare procesele===&lt;br /&gt;
&lt;br /&gt;
Dupa cum se stie linuxul este un sistem de operare pe care poate rula mai mult de o singura sarcina la un moment dat daca se doreste acest lucru.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls / -R | wc -l&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda va afisa numarul total de fisiere existe pe sistemul dumneavoastra, doar ca ii va lua o anumita perioada de timp sa faca acest lucru. Pentru a nu fi nevoiti sa asteptam finalizarea comenzii curente si abia apoi sa putem executa o noua comanda, se poate rula comanda curenta in background. Acest lucru se poate face in felul urmator.&lt;br /&gt;
&lt;br /&gt;
 #ls / R | wc -l &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Se observa folosirea caracterului ampersand (&amp;amp;) la finalul comenzii, avand ca efect executarea comenzii in background si oferindu-ne imediat posibilitatea de executie a unei noi comenzi.&lt;br /&gt;
&lt;br /&gt;
===Comenzi linux referitoare la procese===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ps&amp;lt;/b&amp;gt; - pentru afisarea proceselor care ruleaza in momentul respectiv&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;kill {PID}&amp;lt;/b&amp;gt; - pentru oprirea procesului identificat prin pid-ul din cadrul comenzii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;killall {numele-procesului}&amp;lt;/b&amp;gt; - pentru oprirea procesului cu numele respectiv.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt; atentie sa nu dati kill procesului &amp;lt;b&amp;gt;sshd.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;ps -ag&amp;lt;/b&amp;gt; - pentru aflarea de informatii despre toate procesele care ruleaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;kill 0&amp;lt;/b&amp;gt; - pentru oprirea tuturor proceselor cu exceptia propriei conexiuni pe sistem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ps aux&amp;lt;/b&amp;gt; - pentru afisarea proceselor si o lista a userilor carora apartin aceste procese&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;top&amp;lt;/b&amp;gt; - pentru obtinerea unei liste a proceselor cu utilizarea memoriei si a procesorului de catre acestea, cu update in timp real&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;pstree&amp;lt;/b&amp;gt; - pentru obtinerea unei structuri arborescente a proceselor&lt;br /&gt;
&lt;br /&gt;
==Constructii in programarea structurata BASH shell==&lt;br /&gt;
&lt;br /&gt;
===Introducere===&lt;br /&gt;
&lt;br /&gt;
Luarea deciziilor este foarte importanta atat in viata de zi cu zi cat si in programarea calculatoarelor. Acest capitol face o scurta introducere in constructiile programarii bash, cum ar fi:&lt;br /&gt;
&lt;br /&gt;
* Luarea deciziilor&lt;br /&gt;
* Cicluri&lt;br /&gt;
&lt;br /&gt;
Exista diferente intre luarea deciziilor in viata de zi cu zi fata de deciziile pe care le iau calculatoarele? Deciziile sunt complicate pentru noi, oamenii, pe cand tot ceea ce intelege un calculator este sub forma de 0 (zero) si 1 care reprezinta Da sau Nu. Pentru a putea intelege toate acestea vom folosi in continuare &amp;lt;b&amp;gt;bc&amp;lt;/b&amp;gt; - Calculator pentru linux.&lt;br /&gt;
&lt;br /&gt;
 #bc&lt;br /&gt;
&lt;br /&gt;
Dupa pornirea acestui program bc este pornit si asteapta introducerea comenzilor de la tastatura. Daca vom tasta &amp;lt;b&amp;gt;5 + 2&amp;lt;/b&amp;gt; vom observa:&lt;br /&gt;
&lt;br /&gt;
 #5 + 2&lt;br /&gt;
 #7&lt;br /&gt;
&lt;br /&gt;
7 este raspunsul pe care l-am primit de la acest program, adica rezultatul adunarii dintre 5 si 2. Puteti incerca in continuare:&lt;br /&gt;
&lt;br /&gt;
 #5 - 2&lt;br /&gt;
 #5 / 2&lt;br /&gt;
 #5 &amp;gt; 2&lt;br /&gt;
&lt;br /&gt;
Vom observa ca rezultatul ultimei operatii va fi 1. bc compara cele doua valori si daca raspunsul este afirmativ (YES) ne va afisa valoarea 1. Puteti incerca acum:&lt;br /&gt;
&lt;br /&gt;
 #5 &amp;lt; 2&lt;br /&gt;
 #0&lt;br /&gt;
&lt;br /&gt;
0 indica faptul ca valoarea expresiei de mai sus este falsa. Pentru a ne clarifica mai bine raspunsurile date de acest program, pute incerca comparatiile de mai jos:&lt;br /&gt;
&lt;br /&gt;
 #5 &amp;gt; 12&lt;br /&gt;
 #5 == 10&lt;br /&gt;
 #5 != 2&lt;br /&gt;
 #5 == 5&lt;br /&gt;
 #12 &amp;lt; 2&lt;br /&gt;
&lt;br /&gt;
===Conditia if===&lt;br /&gt;
&lt;br /&gt;
Conditia if este folosita pentru luarea deciziilor in scripturile shell, daca valoarea conditiei este 1 sau YES atunci comanda este executata.&lt;br /&gt;
&lt;br /&gt;
 Syntax:&lt;br /&gt;
 &lt;br /&gt;
 if condition&lt;br /&gt;
    then&lt;br /&gt;
        command1 if condition is true or if exit status&lt;br /&gt;
        of condition is 0 (zero)&lt;br /&gt;
        ...&lt;br /&gt;
        ...&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
O definitie a conditiei ar putea fi urmatoare:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;quot;Conditia nu este decat o simpla comparatie intre doua valori&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expresia poate fi definita astfel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;quot;O expresie este o combinatie de valori, operatori relationali (cum ar fi &amp;gt;, &amp;lt;, &amp;lt;&amp;gt; etc.) si operatori matematici (cum ar fi +, -, / etc.)&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In continuare sunt prezentate cateva exemple de expresii:&lt;br /&gt;
&lt;br /&gt;
 5 &amp;gt; 2&lt;br /&gt;
 3 + 6&lt;br /&gt;
 3 * 65&lt;br /&gt;
 a &amp;lt; b&lt;br /&gt;
 c &amp;gt; 5&lt;br /&gt;
 c &amp;gt; 5 + 30 -1&lt;br /&gt;
&lt;br /&gt;
Tastati urmatoare comenzi, presupunand ca exista fisierul numit &amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #cat file&lt;br /&gt;
 #echo $?&lt;br /&gt;
&lt;br /&gt;
Comanda cat returneaza starea de exit 0, daca a fost executata cu succes, iar aceasta poate fi folosita in cazul conditiei if dupa cum se poate vedea in scriptul urmator:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; fisier&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 #Script pentru printarea fisierul&lt;br /&gt;
 #&lt;br /&gt;
 if cat $1&lt;br /&gt;
 then&lt;br /&gt;
 echo -e &amp;quot;\n\nFisierul $1, a fost gasit si afisat cu succes...&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Rulati scriptul de mai sus dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # chmod 755 fisier&lt;br /&gt;
 # ./fisier file&lt;br /&gt;
&lt;br /&gt;
Numele scriptului este &amp;lt;b&amp;gt;fisier&amp;lt;/b&amp;gt; ($0) si &amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt; este argumentul (care este $1). &lt;br /&gt;
&lt;br /&gt;
Explicatii detaliate:&lt;br /&gt;
&lt;br /&gt;
Daca comanda &amp;lt;b&amp;gt;cat&amp;lt;/b&amp;gt; gaseste fisierul &amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt; si il afiseaza pe ecran, inseamna ca aceasta comanda a fost executata cu succes si starea ei de exit este 0. Astfel conditia noastra if este de asemenea adevarata si declaratia &amp;lt;b&amp;gt;echo -e &amp;quot;\n\nFisierul $1, a fost gasit si afisat cu succes...&amp;quot;&amp;lt;/b&amp;gt; este executata cu succes. Daca comanda &amp;lt;b&amp;gt;cat&amp;lt;/b&amp;gt; nu este executata cu succes atunci valoarea starii de exit returnata de aceasta este diferita de zero si declaratia &amp;lt;b&amp;gt;echo -e &amp;quot;\n\nFisierul $1, a fost gasit si afisat cu succes...&amp;quot;&amp;lt;/b&amp;gt; nu este executata de catre shell.&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;test&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;[ expresie ]&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Comanda teste sau [ expresie ] este folosita pentru a vedea daca o expresie este adevarata, si daca aceasta este adevarata este returnata valoarea zero(0). Altfel, este returnat nonzero pentru fals.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 test expresie SAU [ expresie ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Exemplu&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Urmatorul script &amp;lt;b&amp;gt;ispositive&amp;lt;/b&amp;gt; verifica daca argumentul care ii este dat este pozitiv sau nu.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 # Script to see whether argument is positive&lt;br /&gt;
 #&lt;br /&gt;
 if test $1 -gt 0&lt;br /&gt;
 then&lt;br /&gt;
 echo &amp;quot;numarul $1 este pozitiv&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Se ruleaza in modul urmator:&lt;br /&gt;
&lt;br /&gt;
 # chmod 755 ispositive&lt;br /&gt;
 # ./ispositive 5&lt;br /&gt;
 numarul 5 este pozitiv&lt;br /&gt;
&lt;br /&gt;
 # ./ispositive -45&lt;br /&gt;
 Nu este afisat nimic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Test&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;[ expresie ]&amp;lt;/b&amp;gt; opereaza cu:&lt;br /&gt;
&lt;br /&gt;
 * Intregi (Numere fara punct zecimal)&lt;br /&gt;
 * Tipuri de fisiere&lt;br /&gt;
 * Caractere ale stringurilor&lt;br /&gt;
&lt;br /&gt;
Operatori matematici sunt urmatorii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-eq&amp;lt;/b&amp;gt; (este egal cu)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-ne&amp;lt;/b&amp;gt; (nu este egal cu)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-lt&amp;lt;/b&amp;gt; (mai mic decat)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-le&amp;lt;/b&amp;gt; (mai mic sau egal decat)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-gt&amp;lt;/b&amp;gt; (mai mare decat)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-ge&amp;lt;/b&amp;gt; (mai mare sau egal decat)&lt;br /&gt;
&lt;br /&gt;
Operatori pentru stringuri:&lt;br /&gt;
&lt;br /&gt;
stringul1 &amp;lt;b&amp;gt;=&amp;lt;/b&amp;gt; stringul2 (stringul1 este egal cu stringul2)&lt;br /&gt;
&lt;br /&gt;
stringul1 &amp;lt;b&amp;gt;!=&amp;lt;/b&amp;gt; stringul2 (stringul1 nu este egal cu stringul 2)&lt;br /&gt;
&lt;br /&gt;
stringul1 (stringul1 este ne null sau nedefinit)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-n&amp;lt;/b&amp;gt; stringul1 (stringul1 este ne null si exista)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-z&amp;lt;/b&amp;gt; stringul1 (stringul1 este nul si exista)&lt;br /&gt;
&lt;br /&gt;
Pentru fisiere si directoare tipurile de operatori sunt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-s&amp;lt;/b&amp;gt; fisier (fisierul care nu este gol)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-f&amp;lt;/b&amp;gt; fisier (fisierul exista si nu este un director)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-d&amp;lt;/b&amp;gt; fisier (este director, exista si nu este fisier)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-w&amp;lt;/b&amp;gt; fisier (fisierul are drepturi de scriere)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-r&amp;lt;/b&amp;gt; fisier (fisierul are atributul doar de citire, read-only)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-x&amp;lt;/b&amp;gt; fisier (fisierul are atribut de executie)&lt;br /&gt;
&lt;br /&gt;
Operatorii logici sunt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;!&amp;lt;/b&amp;gt; expresie (logic NOT)&lt;br /&gt;
&lt;br /&gt;
expresie1 &amp;lt;b&amp;gt;-a&amp;lt;/b&amp;gt; expresie2 (logic AND)&lt;br /&gt;
&lt;br /&gt;
expresie1 &amp;lt;b&amp;gt;-o&amp;lt;/b&amp;gt; expresie2 (logic OR)&lt;br /&gt;
&lt;br /&gt;
===if...else...fi===&lt;br /&gt;
&lt;br /&gt;
Daca conditia data este adevarata atunci comanda1 este executata, altfel comanda2 este executata.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 if condition&lt;br /&gt;
 then&lt;br /&gt;
 	conditia este zero (adevarata - 0)&lt;br /&gt;
 	se vor executa toate comenzile pana la else&lt;br /&gt;
 else&lt;br /&gt;
 	daca conditia nu este adevarata&lt;br /&gt;
 	se executa toate comenzile pana la fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Spre exemplu, scrieti si rulati scriptul urmator: #mcedit este_poz.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 # Script pentru a observa daca argumentul este pozitiv sau negativ&lt;br /&gt;
 #&lt;br /&gt;
 if [ $# -eq 0 ]&lt;br /&gt;
 then&lt;br /&gt;
 echo &amp;quot;$0 : Trebuie sa introduceti un intreg&amp;quot;&lt;br /&gt;
 exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 if test $1 -gt 0&lt;br /&gt;
 then&lt;br /&gt;
 echo &amp;quot; $1 este un numar pozitiv&lt;br /&gt;
 else&lt;br /&gt;
 echo &amp;quot; $1 este un numar negativ&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Il puteti rula dupa cum urmeaza:&lt;br /&gt;
 #chmod +x este_poz.sh&lt;br /&gt;
 #./este_poz.sh 5&lt;br /&gt;
 5 este un numar pozitiv&lt;br /&gt;
&lt;br /&gt;
 #./este_poz&lt;br /&gt;
 ./este_poz : Trebuie sa introduceti un intreg&lt;br /&gt;
&lt;br /&gt;
 #./este_poz.sh -5&lt;br /&gt;
 -5 este un numar negativ&lt;br /&gt;
&lt;br /&gt;
Explicatii detaliate:&lt;br /&gt;
Prima parte a scriptului verifica daca argumentul este dat in linia de comanda, si daca acesta nu este dat afiseaza un mesaj de eroare. If-ul testeaza daca numarul de argumente este sau nu egal cu 0. Daca au fost date scriptului argumente in linia de comanda atunci declaratia din if devine falsa, iar daca a fost dat un argument scriptului, aceasta cpata valoarea de adevar true.&lt;br /&gt;
Mai jos se verifica daca argumentul, care acum exista este pozitiv sau negativ si se afiseaza un mesaj corespunzator.&lt;br /&gt;
&lt;br /&gt;
Se pot folosi de asemenea si if-uri grupate:&lt;br /&gt;
&lt;br /&gt;
 #mcedit if_grupat.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 os=0&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;1. Windows (XP)&amp;quot;&lt;br /&gt;
 echo &amp;quot;2. Linux (Debian)&amp;quot;&lt;br /&gt;
 echo -n &amp;quot;Alegeti sistemul preferat de operare [1 or 2]? &amp;quot;&lt;br /&gt;
 read os&lt;br /&gt;
 &lt;br /&gt;
 if [ $os -eq 1 ] ; then&lt;br /&gt;
 	echoo &amp;quot;Ai ales Windows (XP)&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
 	if [ $os -eq 2 ] ; then&lt;br /&gt;
 		echo &amp;quot;Ai ales Linux (Debian)&amp;quot;&lt;br /&gt;
 	else&lt;br /&gt;
 		echo &amp;quot;Astazi esti foarte nehotarat&amp;quot;&lt;br /&gt;
 	fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
 #chmod +x if_grupat.sh&lt;br /&gt;
&lt;br /&gt;
Se poate observa foarte bine in scriptul de mai sus folosirea grupata a if-ului.&lt;br /&gt;
&lt;br /&gt;
Sintaxa acestui tip de declaratie este urmatoarea:&lt;br /&gt;
&lt;br /&gt;
 if conditie&lt;br /&gt;
 then&lt;br /&gt;
 	if conditie&lt;br /&gt;
 	then&lt;br /&gt;
 		...&lt;br /&gt;
 		...&lt;br /&gt;
 		comenzi&lt;br /&gt;
 	else&lt;br /&gt;
 		...&lt;br /&gt;
 		...&lt;br /&gt;
 		comenzi&lt;br /&gt;
 	fi&lt;br /&gt;
 else&lt;br /&gt;
 	...&lt;br /&gt;
 	...&lt;br /&gt;
 	comenzi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Articol original in limba engleza: http://www.freeos.com/guides/lsst/&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Traducere a fost inceputa de catre Simionov Daniel Adrian.&amp;lt;/i&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=5602</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=5602"/>
				<updated>2010-01-06T21:18:34Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Despre acest articol===&lt;br /&gt;
&lt;br /&gt;
este o  traducere? facuta de catre cine, dupa ce material?&lt;br /&gt;
&lt;br /&gt;
sau un articol original? scris de cine? cind? autor? data? in lucru? terminat?&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu=DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este $numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatie:&lt;br /&gt;
&lt;br /&gt;
* in exemplul de mai jos executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folosind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; - tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' - tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` - sunt folosite pentru a executa comanda aflata intre acestea&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #echo &amp;quot;Astazi este data&amp;quot;&lt;br /&gt;
 #echo &amp;quot;Astazi este `date`&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Se observa ca in primul caz a fost afisat sirul de caractere &amp;quot;Astazi este data&amp;quot; iar in cel de-al doilea caz este afisata data de astazi.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b&amp;gt;Exit Status&amp;lt;/b&amp;gt; - Starea de exit===&lt;br /&gt;
&lt;br /&gt;
De obicei, in Linux, daca o anumita comanda sau script au fost executatate, ele returneaza doua tipuri de valori, care sunt folosite pentru a vedea daca comanda sau scriptul au fost executate corect sau nu.&lt;br /&gt;
&lt;br /&gt;
Daca valoarea returnata este 0 atunci comanda a fost executata cu succes iar daca valoarea returnata este diferita de 0 atunci a aparut o eroare in executarea comenzii sau a scriptului.&lt;br /&gt;
&lt;br /&gt;
Pentru a avea valoarea starii de exit, se foloseste variabila speciala $?. Urmatoarele exercitii sper sa va lamureasca in legatura cu folosirea acestei variabile speciale.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # expr 1 + 2&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echo Buna ziua&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # wildwest sunt_obosit?&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # date&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echon $?&lt;br /&gt;
 # echo $?&lt;br /&gt;
&lt;br /&gt;
===Declaratia de citire (&amp;lt;b&amp;gt;read&amp;lt;/b&amp;gt;)===&lt;br /&gt;
&lt;br /&gt;
Aceasta declaratie este folosita pentru preluarea datelor de la utilizator prin intermediul tastaturii si memorarea datelor in variabile.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 read variabila1, variabila2,... variabilaN&lt;br /&gt;
&lt;br /&gt;
Urmatorul script ii cere utilizatorului numele si apoi asteapta introducerea acestuia de la tastatura. Utilizatorul introduce numele la tastatura (dupa scrierea numelui trebuie apasata tasta ENTER) si numele introdus prin intermediul tastaturii este memorat in variabila &amp;lt;b&amp;gt;fname&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #mcedit script.sh&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 #script pentru citirea numelui de la tastatura&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numele dumneavoastra va rog:&amp;quot;&lt;br /&gt;
 read fname&lt;br /&gt;
 echo &amp;quot;Buna $fname, ma bucur de cunostinta!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Rularea acestuia se va face in felul urmator:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Numele dumneavoastra va rog:&amp;lt;b&amp;gt;adrian&amp;lt;/b&amp;gt;&lt;br /&gt;
 Buna adrian, ma bucur de cunostinta!&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Meta caracterele (folosite pentru specificarea globala a numelui unui fisier)===&lt;br /&gt;
&lt;br /&gt;
Meta caracterul:&lt;br /&gt;
&lt;br /&gt;
 * - potriveste orice caracter sau grup de caractere&lt;br /&gt;
 ? - potriveste orice caracter dar numai unul&lt;br /&gt;
 [...] - inlocuieste doar cu caracterele aflate intre paranteze&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls /bin/[a-c]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin care incep cu litera a, b sau c&lt;br /&gt;
&lt;br /&gt;
 #ls /bin/[!a-f]*   sau   #ls /bin/[^a-f]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin cu exceptia celor care incep cu un caracter aflat in seria mentionata&lt;br /&gt;
&lt;br /&gt;
===Mai multe comenzi intr-o singura linie de comanda===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1; comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 #date; who&lt;br /&gt;
&lt;br /&gt;
Comanda de mai sus va afisa data de astazi urmata de userul cu care suntem logati. In exact acelasi scop poate fi folosita si urmatoarea linie de comanda:&lt;br /&gt;
&lt;br /&gt;
 #date who&lt;br /&gt;
&lt;br /&gt;
===Procesarea liniei de comanda===&lt;br /&gt;
&lt;br /&gt;
Incercati urmatoarea comanda (se presupune ca fisierul &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; nu exista pe sistemul dumneavoastra):&lt;br /&gt;
&lt;br /&gt;
 #ls script.sh&lt;br /&gt;
&lt;br /&gt;
Va fi afisat un mesaj asemanator cu urmatorul:&lt;br /&gt;
&lt;br /&gt;
 - script.sh: No such file or directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; este numele unei comenzi efective si shell-ul o executa in momentul in care aceasta este tastata la prompter. Acum ia nastere o alta intrebare &amp;lt;b&amp;gt;Ce sunt comenzile?&amp;lt;/b&amp;gt;. Ce se intampla cand tastam &amp;lt;b&amp;gt;#ls script.sh&amp;lt;/b&amp;gt;?&lt;br /&gt;
Primul cuvant al liniei de comanda este &amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; - numele comenzii ce urmeaza sa fie executata. Orice altceva pe acea linie este citit ca fiind un argument pentru comanda respectiva.&lt;br /&gt;
&lt;br /&gt;
 #tail +10 script.sh&lt;br /&gt;
&lt;br /&gt;
Numele comenzii este &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; iar &amp;lt;b&amp;gt;+10&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; sunt considerate argumente ale acestei comenzi.&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; detine numarul de argumente specificate in linia de comanda. Iar &amp;lt;b&amp;gt;$*&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;$@&amp;lt;/b&amp;gt; se refera la toate argumentele date scriptului.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare argumentele in linia de comanda===&lt;br /&gt;
&lt;br /&gt;
1. Pentru a spune comenzii sau utilitarului ce optiuni sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
2. Pentru a informa comanda sau utilitarul ce fisier sau grup de fisiere sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
Sa luam de exemplu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; care este folosita pentru stergerea unui fisier, dar cum ii vom spune noi acestei comenzi ce fisier sa stearga (ea nu ne va intreba ce fisier dorim sa stergem). Ceea ce vom face este sa rulam comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #rm {numele fisierului}&lt;br /&gt;
&lt;br /&gt;
In acest exemplu &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; este comanda iar &amp;lt;b&amp;gt;numele-fisierului&amp;lt;/b&amp;gt; este fisierul pe care dorim sa il stergem. In acest mod ii precizam explicit comenzii &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; ce fisier sa stearga. Astfel noi comunicam cu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; specificand numele fisierului. De asemenea pot fi transmise prin intermediul liniei de comanda anumite argumente scriptului pe care il rulam.&lt;br /&gt;
&lt;br /&gt;
In cazul scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
 #script.sh unu doi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; este numele scriptului rulat&lt;br /&gt;
&amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt; reprezinta primul argument trecut scriptului prin intermediul liniei de comanda&lt;br /&gt;
&amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt; reprezinta cel de-al doilea argument.&lt;br /&gt;
&lt;br /&gt;
In cadrul scriptului nostru, daca dorim sa ne referim la aceste argumente o vom face in felul urmator:&lt;br /&gt;
&amp;lt;b&amp;gt;$0&amp;lt;/b&amp;gt; reprezinta numele scriptului&lt;br /&gt;
&amp;lt;b&amp;gt;$1&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$2&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In acest exemplu variabila predefinita &amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; deoarece au fost introduse doar doua argumente scriptului nostru. Trebuie notat faptul ca la un moment dat pot fi folosite un numar de maxim 9 argumente notate de la $1 la $9. Notatiile $1...$9 reprezinta parametrii de pozitie.&lt;br /&gt;
Urmatorul script va fi folosit pentru afisarea si prelucrarea argumentelor liniei de comanda:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 #folosirea argumentelor&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numarul de argumente din linia de comanda este de $#&amp;quot;&lt;br /&gt;
 echo &amp;quot;$0 este numele scriptului&amp;quot;&lt;br /&gt;
 echo &amp;quot;$1 reprezinta primul argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;$2 reprezinta cel de al doilea argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;toate argumentele sunt: $* sau $@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pentru rulare se vor folosi comenzile:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Nota&amp;lt;/b&amp;gt;&lt;br /&gt;
Nu se pot atribui alte valori parametrilor de pozitie in cadrul scriptului.&lt;br /&gt;
&lt;br /&gt;
Urmatoarele declaratii sunt invalide:&lt;br /&gt;
&lt;br /&gt;
 $1 = doi&lt;br /&gt;
 $2 = unu&lt;br /&gt;
&lt;br /&gt;
===Redirectarea intrarilor si iesirilor standard===&lt;br /&gt;
&lt;br /&gt;
In cea mai mare parte comenzile au iesirile spre monitor iar intrarile sunt luate de la tastatura, dar in Linux, ca si in alte sisteme de operare, se pot trimite iesirile catre fisiere sau de asemenea citirea intrarilor din fisiere.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #ls&lt;br /&gt;
&lt;br /&gt;
comanda de mai sus afiseaza rezultatul pe monitor. Pentru directionarea rezultatului intr-un fisier va fi folosita comanda:&lt;br /&gt;
&lt;br /&gt;
 #ls &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Exista trei mari simboluri de redirectare:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;, &amp;gt;&amp;gt; si &amp;lt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Rezultatul rularii comenzii respective va fi trimis catre fisier. Trebuie mentionat faptul ca daca fisierul in care este trimis rezultatul nu exista, atunci acesta este creat iar daca exista, continutul acestuia va fi inlocuit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt;&amp;gt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Daca fisierul nu exista atunci el este creat iar daca exista, continutul rezultat in urma rularii comenzii va fi pus la sfarsitul fisierului fara a se pierde nimic din informatia continuta initial in fisier.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;lt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Acest simbol este folosit pentru preluarea informatiilor necesare rularii comenzii nu din tastatura ci din fisierul respectiv.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #cat &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
De asemenea pot fi folosite mai multe simboluri de redirectare in aceeasi linie de comanda, la fel ca in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 #cat &amp;gt; source_name&lt;br /&gt;
 alina&lt;br /&gt;
 linux&lt;br /&gt;
 daniel&lt;br /&gt;
 mele&lt;br /&gt;
 #sort &amp;lt; source_name &amp;gt; sorted_name&lt;br /&gt;
 #cat sorted_name&lt;br /&gt;
 alina&lt;br /&gt;
 daniel&lt;br /&gt;
 linux&lt;br /&gt;
 mele&lt;br /&gt;
&lt;br /&gt;
In exemplul anterior comanda sort a preluat datele de intrare din fisierul source_name iar rezultatul a fost redirectat catre fisierul sorted_name.&lt;br /&gt;
Un alt exemplu ar putea fi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tr &amp;quot;[a-z]&amp;quot; &amp;quot;[A-Z]&amp;quot; &amp;lt; sorce_name &amp;gt; majuscule_name&lt;br /&gt;
 #cat majuscule_name&lt;br /&gt;
 ALINA&lt;br /&gt;
 DANIEL&lt;br /&gt;
 LINUX&lt;br /&gt;
 MELE&lt;br /&gt;
&lt;br /&gt;
Comanda &amp;lt;b&amp;gt;tr&amp;lt;/b&amp;gt; a fost folosita aici pentru transformarea minusculelor in majuscule dupa care rezultatul a fost scris in fisierul &amp;lt;i&amp;gt;majuscule_name&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Semnul PIPE===&lt;br /&gt;
&lt;br /&gt;
Acesta reprezinta modalitatea de conectare a iesirii unei comenzi de intrarea unei alte comenzi fara folosirea unui fisier temporar. Acestea sunt folosite pentru rularea a doua sau mai multe comenzi in aceeasi linie de comanda.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1 | comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #who | sort&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda va returna o lista a utilizatorilor logati pe masina respectiva intr-o ordine sortata.&lt;br /&gt;
&lt;br /&gt;
 #who | wc -l&lt;br /&gt;
&lt;br /&gt;
Va returna numarul de useri total logati in sistem.&lt;br /&gt;
&lt;br /&gt;
 #who | grep root&lt;br /&gt;
&lt;br /&gt;
Va returna doar logarile cu userul root.&lt;br /&gt;
&lt;br /&gt;
===Filtrele===&lt;br /&gt;
&lt;br /&gt;
Daca in linux o comanda isi accepta intrarea din intrarea standard si rezultatul acesteia este o iesire standard atunci comanda respectiva este cunoscuta sub numele de filtru. Ca exemplu presupunem ca avem fisierul &amp;lt;i&amp;gt;nume.txt&amp;lt;/i&amp;gt; care contine 100 de linii si din acesta am dori sa scoatem liniile de la 20 la 30 iar rezultatul sa il punem in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Pentru aceasta vom folosi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tail +20 &amp;lt; nume.txt |head -n 30 &amp;gt; flist&lt;br /&gt;
&lt;br /&gt;
In acest comanda &amp;lt;b&amp;gt;head&amp;lt;/b&amp;gt; este un filtru deoarece intrarea acesteia este preluata din rezultatul comenzii &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; si rezultatul acesteia este directionat in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Un alt exemplu il reprezinta comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #sort &amp;lt; snume | uniq &amp;gt; u_snume&lt;br /&gt;
&lt;br /&gt;
===Ce sunt procesele===&lt;br /&gt;
&lt;br /&gt;
Procesul este un fel de program sau sarcina pentru calculatorul nostru. Un exemplu ar putea fi:&lt;br /&gt;
&lt;br /&gt;
 #ps fax&lt;br /&gt;
&lt;br /&gt;
Aici apare o lista a tuturor proceselor de pe sistemul nostru in momentul de fata. Fiecarui proces in linux ii este asociat un PID sau process-id format dintr-un numar care ia valori intre 0 si 65535.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare procesele===&lt;br /&gt;
&lt;br /&gt;
Dupa cum se stie linuxul este un sistem de operare pe care poate rula mai mult de o singura sarcina la un moment dat daca se doreste acest lucru.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls / -R | wc -l&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda va afisa numarul total de fisiere existe pe sistemul dumneavoastra, doar ca ii va lua o anumita perioada de timp sa faca acest lucru. Pentru a nu fi nevoiti sa asteptam finalizarea comenzii curente si abia apoi sa putem executa o noua comanda, se poate rula comanda curenta in background. Acest lucru se poate face in felul urmator.&lt;br /&gt;
&lt;br /&gt;
 #ls / R | wc -l &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Se observa folosirea caracterului ampersand (&amp;amp;) la finalul comenzii, avand ca efect executarea comenzii in background si oferindu-ne imediat posibilitatea de executie a unei noi comenzi.&lt;br /&gt;
&lt;br /&gt;
===Comenzi linux referitoare la procese===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ps&amp;lt;/b&amp;gt; - pentru afisarea proceselor care ruleaza in momentul respectiv&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;kill {PID}&amp;lt;/b&amp;gt; - pentru oprirea procesului identificat prin pid-ul din cadrul comenzii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;killall {numele-procesului}&amp;lt;/b&amp;gt; - pentru oprirea procesului cu numele respectiv.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt; atentie sa nu dati kill procesului &amp;lt;b&amp;gt;sshd.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;ps -ag&amp;lt;/b&amp;gt; - pentru aflarea de informatii despre toate procesele care ruleaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;kill 0&amp;lt;/b&amp;gt; - pentru oprirea tuturor proceselor cu exceptia propriei conexiuni pe sistem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ps aux&amp;lt;/b&amp;gt; - pentru afisarea proceselor si o lista a userilor carora apartin aceste procese&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;top&amp;lt;/b&amp;gt; - pentru obtinerea unei liste a proceselor cu utilizarea memoriei si a procesorului de catre acestea, cu update in timp real&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;pstree&amp;lt;/b&amp;gt; - pentru obtinerea unei structuri arborescente a proceselor&lt;br /&gt;
&lt;br /&gt;
==Constructii in programarea structurata BASH shell==&lt;br /&gt;
&lt;br /&gt;
===Introducere===&lt;br /&gt;
&lt;br /&gt;
Luarea deciziilor este foarte importanta atat in viata de zi cu zi cat si in programarea calculatoarelor. Acest capitol face o scurta introducere in constructiile programarii bash, cum ar fi:&lt;br /&gt;
&lt;br /&gt;
* Luarea deciziilor&lt;br /&gt;
* Cicluri&lt;br /&gt;
&lt;br /&gt;
Exista diferente intre luarea deciziilor in viata de zi cu zi fata de deciziile pe care le iau calculatoarele? Deciziile sunt complicate pentru noi, oamenii, pe cand tot ceea ce intelege un calculator este sub forma de 0 (zero) si 1 care reprezinta Da sau Nu. Pentru a putea intelege toate acestea vom folosi in continuare &amp;lt;b&amp;gt;bc&amp;lt;/b&amp;gt; - Calculator pentru linux.&lt;br /&gt;
&lt;br /&gt;
 #bc&lt;br /&gt;
&lt;br /&gt;
Dupa pornirea acestui program bc este pornit si asteapta introducerea comenzilor de la tastatura. Daca vom tasta &amp;lt;b&amp;gt;5 + 2&amp;lt;/b&amp;gt; vom observa:&lt;br /&gt;
&lt;br /&gt;
 #5 + 2&lt;br /&gt;
 #7&lt;br /&gt;
&lt;br /&gt;
7 este raspunsul pe care l-am primit de la acest program, adica rezultatul adunarii dintre 5 si 2. Puteti incerca in continuare:&lt;br /&gt;
&lt;br /&gt;
 #5 - 2&lt;br /&gt;
 #5 / 2&lt;br /&gt;
 #5 &amp;gt; 2&lt;br /&gt;
&lt;br /&gt;
Vom observa ca rezultatul ultimei operatii va fi 1. bc compara cele doua valori si daca raspunsul este afirmativ (YES) ne va afisa valoarea 1. Puteti incerca acum:&lt;br /&gt;
&lt;br /&gt;
 #5 &amp;lt; 2&lt;br /&gt;
 #0&lt;br /&gt;
&lt;br /&gt;
0 indica faptul ca valoarea expresiei de mai sus este falsa. Pentru a ne clarifica mai bine raspunsurile date de acest program, pute incerca comparatiile de mai jos:&lt;br /&gt;
&lt;br /&gt;
 #5 &amp;gt; 12&lt;br /&gt;
 #5 == 10&lt;br /&gt;
 #5 != 2&lt;br /&gt;
 #5 == 5&lt;br /&gt;
 #12 &amp;lt; 2&lt;br /&gt;
&lt;br /&gt;
===Conditia if===&lt;br /&gt;
&lt;br /&gt;
Conditia if este folosita pentru luarea deciziilor in scripturile shell, daca valoarea conditiei este 1 sau YES atunci comanda este executata.&lt;br /&gt;
&lt;br /&gt;
 Syntax:&lt;br /&gt;
 &lt;br /&gt;
 if condition&lt;br /&gt;
    then&lt;br /&gt;
        command1 if condition is true or if exit status&lt;br /&gt;
        of condition is 0 (zero)&lt;br /&gt;
        ...&lt;br /&gt;
        ...&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
O definitie a conditiei ar putea fi urmatoare:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;quot;Conditia nu este decat o simpla comparatie intre doua valori&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expresia poate fi definita astfel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;quot;O expresie este o combinatie de valori, operatori relationali (cum ar fi &amp;gt;, &amp;lt;, &amp;lt;&amp;gt; etc.) si operatori matematici (cum ar fi +, -, / etc.)&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In continuare sunt prezentate cateva exemple de expresii:&lt;br /&gt;
&lt;br /&gt;
 5 &amp;gt; 2&lt;br /&gt;
 3 + 6&lt;br /&gt;
 3 * 65&lt;br /&gt;
 a &amp;lt; b&lt;br /&gt;
 c &amp;gt; 5&lt;br /&gt;
 c &amp;gt; 5 + 30 -1&lt;br /&gt;
&lt;br /&gt;
Tastati urmatoare comenzi, presupunand ca exista fisierul numit &amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #cat file&lt;br /&gt;
 #echo $?&lt;br /&gt;
&lt;br /&gt;
Comanda cat returneaza starea de exit 0, daca a fost executata cu succes, iar aceasta poate fi folosita in cazul conditiei if dupa cum se poate vedea in scriptul urmator:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; fisier&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 #Script pentru printarea fisierul&lt;br /&gt;
 #&lt;br /&gt;
 if cat $1&lt;br /&gt;
 then&lt;br /&gt;
 echo -e &amp;quot;\n\nFisierul $1, a fost gasit si afisat cu succes...&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Rulati scriptul de mai sus dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # chmod 755 fisier&lt;br /&gt;
 # ./fisier file&lt;br /&gt;
&lt;br /&gt;
Numele scriptului este &amp;lt;b&amp;gt;fisier&amp;lt;/b&amp;gt; ($0) si &amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt; este argumentul (care este $1). &lt;br /&gt;
&lt;br /&gt;
Explicatii detaliate:&lt;br /&gt;
&lt;br /&gt;
Daca comanda &amp;lt;b&amp;gt;cat&amp;lt;/b&amp;gt; gaseste fisierul &amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt; si il afiseaza pe ecran, inseamna ca aceasta comanda a fost executata cu succes si starea ei de exit este 0. Astfel conditia noastra if este de asemenea adevarata si declaratia &amp;lt;b&amp;gt;echo -e &amp;quot;\n\nFisierul $1, a fost gasit si afisat cu succes...&amp;quot;&amp;lt;/b&amp;gt; este executata cu succes. Daca comanda &amp;lt;b&amp;gt;cat&amp;lt;/b&amp;gt; nu este executata cu succes atunci valoarea starii de exit returnata de aceasta este diferita de zero si declaratia &amp;lt;b&amp;gt;echo -e &amp;quot;\n\nFisierul $1, a fost gasit si afisat cu succes...&amp;quot;&amp;lt;/b&amp;gt; nu este executata de catre shell.&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;test&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;[ expresie ]&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Comanda teste sau [ expresie ] este folosita pentru a vedea daca o expresie este adevarata, si daca aceasta este adevarata este returnata valoarea zero(0). Altfel, este returnat nonzero pentru fals.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 test expresie SAU [ expresie ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Exemplu&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Urmatorul script &amp;lt;b&amp;gt;ispositive&amp;lt;/b&amp;gt; verifica daca argumentul care ii este dat este pozitiv sau nu.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 # Script to see whether argument is positive&lt;br /&gt;
 #&lt;br /&gt;
 if test $1 -gt 0&lt;br /&gt;
 then&lt;br /&gt;
 echo &amp;quot;numarul $1 este pozitiv&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Se ruleaza in modul urmator:&lt;br /&gt;
&lt;br /&gt;
 # chmod 755 ispositive&lt;br /&gt;
 # ./ispositive 5&lt;br /&gt;
 numarul 5 este pozitiv&lt;br /&gt;
&lt;br /&gt;
 # ./ispositive -45&lt;br /&gt;
 Nu este afisat nimic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Test&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;[ expresie ]&amp;lt;/b&amp;gt; opereaza cu:&lt;br /&gt;
&lt;br /&gt;
 * Intregi (Numere fara punct zecimal)&lt;br /&gt;
 * Tipuri de fisiere&lt;br /&gt;
 * Caractere ale stringurilor&lt;br /&gt;
&lt;br /&gt;
Operatori matematici sunt urmatorii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-eq&amp;lt;/b&amp;gt; (este egal cu)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-ne&amp;lt;/b&amp;gt; (nu este egal cu)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-lt&amp;lt;/b&amp;gt; (mai mic decat)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-le&amp;lt;/b&amp;gt; (mai mic sau egal decat)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-gt&amp;lt;/b&amp;gt; (mai mare decat)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-ge&amp;lt;/b&amp;gt; (mai mare sau egal decat)&lt;br /&gt;
&lt;br /&gt;
Operatori pentru stringuri:&lt;br /&gt;
&lt;br /&gt;
stringul1 &amp;lt;b&amp;gt;=&amp;lt;/b&amp;gt; stringul2 (stringul1 este egal cu stringul2)&lt;br /&gt;
&lt;br /&gt;
stringul1 &amp;lt;b&amp;gt;!=&amp;lt;/b&amp;gt; stringul2 (stringul1 nu este egal cu stringul 2)&lt;br /&gt;
&lt;br /&gt;
stringul1 (stringul1 este ne null sau nedefinit)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-n&amp;lt;/b&amp;gt; stringul1 (stringul1 este ne null si exista)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-z&amp;lt;/b&amp;gt; stringul1 (stringul1 este nul si exista)&lt;br /&gt;
&lt;br /&gt;
Pentru fisiere si directoare tipurile de operatori sunt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-s&amp;lt;/b&amp;gt; fisier (fisierul care nu este gol)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-f&amp;lt;/b&amp;gt; fisier (fisierul exista si nu este un director)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-d&amp;lt;/b&amp;gt; fisier (este director, exista si nu este fisier)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-w&amp;lt;/b&amp;gt; fisier (fisierul are drepturi de scriere)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-r&amp;lt;/b&amp;gt; fisier (fisierul are atributul doar de citire, read-only)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-x&amp;lt;/b&amp;gt; fisier (fisierul are atribut de executie)&lt;br /&gt;
&lt;br /&gt;
Operatorii logici sunt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;!&amp;lt;/b&amp;gt; expresie (logic NOT)&lt;br /&gt;
&lt;br /&gt;
expresie1 &amp;lt;b&amp;gt;-a&amp;lt;/b&amp;gt; expresie2 (logic AND)&lt;br /&gt;
&lt;br /&gt;
expresie1 &amp;lt;b&amp;gt;-o&amp;lt;/b&amp;gt; expresie2 (logic OR)&lt;br /&gt;
&lt;br /&gt;
===if...else...fi===&lt;br /&gt;
&lt;br /&gt;
Daca conditia data este adevarata atunci comanda1 este executata, altfel comanda2 este executata.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 if condition&lt;br /&gt;
 then&lt;br /&gt;
 	conditia este zero (adevarata - 0)&lt;br /&gt;
 	se vor executa toate comenzile pana la else&lt;br /&gt;
 else&lt;br /&gt;
 	daca conditia nu este adevarata&lt;br /&gt;
 	se executa toate comenzile pana la fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Spre exemplu, scrieti si rulati scriptul urmator: #mcedit este_poz.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 # Script pentru a observa daca argumentul este pozitiv sau negativ&lt;br /&gt;
 #&lt;br /&gt;
 if [ $# -eq 0 ]&lt;br /&gt;
 then&lt;br /&gt;
 echo &amp;quot;$0 : Trebuie sa introduceti un intreg&amp;quot;&lt;br /&gt;
 exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 if test $1 -gt 0&lt;br /&gt;
 then&lt;br /&gt;
 echo &amp;quot; $1 este un numar pozitiv&lt;br /&gt;
 else&lt;br /&gt;
 echo &amp;quot; $1 este un numar negativ&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Il puteti rula dupa cum urmeaza:&lt;br /&gt;
 #chmod +x este_poz.sh&lt;br /&gt;
 #./este_poz.sh 5&lt;br /&gt;
 5 este un numar pozitiv&lt;br /&gt;
&lt;br /&gt;
 #./este_poz&lt;br /&gt;
 ./este_poz : Trebuie sa introduceti un intreg&lt;br /&gt;
&lt;br /&gt;
 #./este_poz.sh -5&lt;br /&gt;
 -5 este un numar negativ&lt;br /&gt;
&lt;br /&gt;
Explicatii detaliate:&lt;br /&gt;
Prima parte a scriptului verifica daca argumentul este dat in linia de comanda, si daca acesta nu este dat afiseaza un mesaj de eroare. If-ul testeaza daca numarul de argumente este sau nu egal cu 0. Daca au fost date scriptului argumente in linia de comanda atunci declaratia din if devine falsa, iar daca a fost dat un argument scriptului, aceasta cpata valoarea de adevar true.&lt;br /&gt;
Mai jos se verifica daca argumentul, care acum exista este pozitiv sau negativ si se afiseaza un mesaj corespunzator.&lt;br /&gt;
&lt;br /&gt;
Se pot folosi de asemenea si if-uri grupate:&lt;br /&gt;
&lt;br /&gt;
 #mcedit if_grupat.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 os=0&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;1. Windows (XP)&amp;quot;&lt;br /&gt;
 echo &amp;quot;2. Linux (Debian)&amp;quot;&lt;br /&gt;
 echo -n &amp;quot;Alegeti sistemul preferat de operare [1 or 2]? &amp;quot;&lt;br /&gt;
 read os&lt;br /&gt;
 &lt;br /&gt;
 if [ $os -eq 1 ] ; then&lt;br /&gt;
 	echoo &amp;quot;Ai ales Windows (XP)&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
 	if [ $os -eq 2 ] ; then&lt;br /&gt;
 		echo &amp;quot;Ai ales Linux (Debian)&amp;quot;&lt;br /&gt;
 	else&lt;br /&gt;
 		echo &amp;quot;Astazi esti foarte nehotarat&amp;quot;&lt;br /&gt;
 	fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
 #chmod +x if_grupat.sh&lt;br /&gt;
&lt;br /&gt;
Se poate observa foarte bine in scriptul de mai sus folosirea grupata a if-ului.&lt;br /&gt;
&lt;br /&gt;
Sintaxa acestui tip de declaratie este urmatoarea:&lt;br /&gt;
&lt;br /&gt;
 if conditie&lt;br /&gt;
 then&lt;br /&gt;
 	if conditie&lt;br /&gt;
 	then&lt;br /&gt;
 		...&lt;br /&gt;
 		...&lt;br /&gt;
 		comenzi&lt;br /&gt;
 	else&lt;br /&gt;
 		...&lt;br /&gt;
 		...&lt;br /&gt;
 		comenzi&lt;br /&gt;
 	fi&lt;br /&gt;
 else&lt;br /&gt;
 	...&lt;br /&gt;
 	...&lt;br /&gt;
 	comenzi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Articol original in limba engleza: http://www.freeos.com/guides/lsst/&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Traducere inceputa de catre Simionov Daniel Adrian&amp;lt;/i&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=5601</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=5601"/>
				<updated>2010-01-06T21:17:55Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Despre acest articol===&lt;br /&gt;
&lt;br /&gt;
este o  traducere? facuta de catre cine, dupa ce material?&lt;br /&gt;
&lt;br /&gt;
sau un articol original? scris de cine? cind? autor? data? in lucru? terminat?&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu=DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este $numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatie:&lt;br /&gt;
&lt;br /&gt;
* in exemplul de mai jos executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folosind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; - tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' - tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` - sunt folosite pentru a executa comanda aflata intre acestea&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #echo &amp;quot;Astazi este data&amp;quot;&lt;br /&gt;
 #echo &amp;quot;Astazi este `date`&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Se observa ca in primul caz a fost afisat sirul de caractere &amp;quot;Astazi este data&amp;quot; iar in cel de-al doilea caz este afisata data de astazi.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b&amp;gt;Exit Status&amp;lt;/b&amp;gt; - Starea de exit===&lt;br /&gt;
&lt;br /&gt;
De obicei, in Linux, daca o anumita comanda sau script au fost executatate, ele returneaza doua tipuri de valori, care sunt folosite pentru a vedea daca comanda sau scriptul au fost executate corect sau nu.&lt;br /&gt;
&lt;br /&gt;
Daca valoarea returnata este 0 atunci comanda a fost executata cu succes iar daca valoarea returnata este diferita de 0 atunci a aparut o eroare in executarea comenzii sau a scriptului.&lt;br /&gt;
&lt;br /&gt;
Pentru a avea valoarea starii de exit, se foloseste variabila speciala $?. Urmatoarele exercitii sper sa va lamureasca in legatura cu folosirea acestei variabile speciale.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # expr 1 + 2&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echo Buna ziua&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # wildwest sunt_obosit?&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # date&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echon $?&lt;br /&gt;
 # echo $?&lt;br /&gt;
&lt;br /&gt;
===Declaratia de citire (&amp;lt;b&amp;gt;read&amp;lt;/b&amp;gt;)===&lt;br /&gt;
&lt;br /&gt;
Aceasta declaratie este folosita pentru preluarea datelor de la utilizator prin intermediul tastaturii si memorarea datelor in variabile.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 read variabila1, variabila2,... variabilaN&lt;br /&gt;
&lt;br /&gt;
Urmatorul script ii cere utilizatorului numele si apoi asteapta introducerea acestuia de la tastatura. Utilizatorul introduce numele la tastatura (dupa scrierea numelui trebuie apasata tasta ENTER) si numele introdus prin intermediul tastaturii este memorat in variabila &amp;lt;b&amp;gt;fname&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #mcedit script.sh&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 #script pentru citirea numelui de la tastatura&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numele dumneavoastra va rog:&amp;quot;&lt;br /&gt;
 read fname&lt;br /&gt;
 echo &amp;quot;Buna $fname, ma bucur de cunostinta!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Rularea acestuia se va face in felul urmator:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Numele dumneavoastra va rog:&amp;lt;b&amp;gt;adrian&amp;lt;/b&amp;gt;&lt;br /&gt;
 Buna adrian, ma bucur de cunostinta!&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Meta caracterele (folosite pentru specificarea globala a numelui unui fisier)===&lt;br /&gt;
&lt;br /&gt;
Meta caracterul:&lt;br /&gt;
&lt;br /&gt;
 * - potriveste orice caracter sau grup de caractere&lt;br /&gt;
 ? - potriveste orice caracter dar numai unul&lt;br /&gt;
 [...] - inlocuieste doar cu caracterele aflate intre paranteze&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls /bin/[a-c]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin care incep cu litera a, b sau c&lt;br /&gt;
&lt;br /&gt;
 #ls /bin/[!a-f]*   sau   #ls /bin/[^a-f]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin cu exceptia celor care incep cu un caracter aflat in seria mentionata&lt;br /&gt;
&lt;br /&gt;
===Mai multe comenzi intr-o singura linie de comanda===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1; comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 #date; who&lt;br /&gt;
&lt;br /&gt;
Comanda de mai sus va afisa data de astazi urmata de userul cu care suntem logati. In exact acelasi scop poate fi folosita si urmatoarea linie de comanda:&lt;br /&gt;
&lt;br /&gt;
 #date who&lt;br /&gt;
&lt;br /&gt;
===Procesarea liniei de comanda===&lt;br /&gt;
&lt;br /&gt;
Incercati urmatoarea comanda (se presupune ca fisierul &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; nu exista pe sistemul dumneavoastra):&lt;br /&gt;
&lt;br /&gt;
 #ls script.sh&lt;br /&gt;
&lt;br /&gt;
Va fi afisat un mesaj asemanator cu urmatorul:&lt;br /&gt;
&lt;br /&gt;
 - script.sh: No such file or directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; este numele unei comenzi efective si shell-ul o executa in momentul in care aceasta este tastata la prompter. Acum ia nastere o alta intrebare &amp;lt;b&amp;gt;Ce sunt comenzile?&amp;lt;/b&amp;gt;. Ce se intampla cand tastam &amp;lt;b&amp;gt;#ls script.sh&amp;lt;/b&amp;gt;?&lt;br /&gt;
Primul cuvant al liniei de comanda este &amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; - numele comenzii ce urmeaza sa fie executata. Orice altceva pe acea linie este citit ca fiind un argument pentru comanda respectiva.&lt;br /&gt;
&lt;br /&gt;
 #tail +10 script.sh&lt;br /&gt;
&lt;br /&gt;
Numele comenzii este &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; iar &amp;lt;b&amp;gt;+10&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; sunt considerate argumente ale acestei comenzi.&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; detine numarul de argumente specificate in linia de comanda. Iar &amp;lt;b&amp;gt;$*&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;$@&amp;lt;/b&amp;gt; se refera la toate argumentele date scriptului.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare argumentele in linia de comanda===&lt;br /&gt;
&lt;br /&gt;
1. Pentru a spune comenzii sau utilitarului ce optiuni sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
2. Pentru a informa comanda sau utilitarul ce fisier sau grup de fisiere sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
Sa luam de exemplu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; care este folosita pentru stergerea unui fisier, dar cum ii vom spune noi acestei comenzi ce fisier sa stearga (ea nu ne va intreba ce fisier dorim sa stergem). Ceea ce vom face este sa rulam comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #rm {numele fisierului}&lt;br /&gt;
&lt;br /&gt;
In acest exemplu &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; este comanda iar &amp;lt;b&amp;gt;numele-fisierului&amp;lt;/b&amp;gt; este fisierul pe care dorim sa il stergem. In acest mod ii precizam explicit comenzii &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; ce fisier sa stearga. Astfel noi comunicam cu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; specificand numele fisierului. De asemenea pot fi transmise prin intermediul liniei de comanda anumite argumente scriptului pe care il rulam.&lt;br /&gt;
&lt;br /&gt;
In cazul scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
 #script.sh unu doi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; este numele scriptului rulat&lt;br /&gt;
&amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt; reprezinta primul argument trecut scriptului prin intermediul liniei de comanda&lt;br /&gt;
&amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt; reprezinta cel de-al doilea argument.&lt;br /&gt;
&lt;br /&gt;
In cadrul scriptului nostru, daca dorim sa ne referim la aceste argumente o vom face in felul urmator:&lt;br /&gt;
&amp;lt;b&amp;gt;$0&amp;lt;/b&amp;gt; reprezinta numele scriptului&lt;br /&gt;
&amp;lt;b&amp;gt;$1&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$2&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In acest exemplu variabila predefinita &amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; deoarece au fost introduse doar doua argumente scriptului nostru. Trebuie notat faptul ca la un moment dat pot fi folosite un numar de maxim 9 argumente notate de la $1 la $9. Notatiile $1...$9 reprezinta parametrii de pozitie.&lt;br /&gt;
Urmatorul script va fi folosit pentru afisarea si prelucrarea argumentelor liniei de comanda:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 #folosirea argumentelor&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numarul de argumente din linia de comanda este de $#&amp;quot;&lt;br /&gt;
 echo &amp;quot;$0 este numele scriptului&amp;quot;&lt;br /&gt;
 echo &amp;quot;$1 reprezinta primul argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;$2 reprezinta cel de al doilea argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;toate argumentele sunt: $* sau $@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pentru rulare se vor folosi comenzile:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Nota&amp;lt;/b&amp;gt;&lt;br /&gt;
Nu se pot atribui alte valori parametrilor de pozitie in cadrul scriptului.&lt;br /&gt;
&lt;br /&gt;
Urmatoarele declaratii sunt invalide:&lt;br /&gt;
&lt;br /&gt;
 $1 = doi&lt;br /&gt;
 $2 = unu&lt;br /&gt;
&lt;br /&gt;
===Redirectarea intrarilor si iesirilor standard===&lt;br /&gt;
&lt;br /&gt;
In cea mai mare parte comenzile au iesirile spre monitor iar intrarile sunt luate de la tastatura, dar in Linux, ca si in alte sisteme de operare, se pot trimite iesirile catre fisiere sau de asemenea citirea intrarilor din fisiere.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #ls&lt;br /&gt;
&lt;br /&gt;
comanda de mai sus afiseaza rezultatul pe monitor. Pentru directionarea rezultatului intr-un fisier va fi folosita comanda:&lt;br /&gt;
&lt;br /&gt;
 #ls &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Exista trei mari simboluri de redirectare:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;, &amp;gt;&amp;gt; si &amp;lt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Rezultatul rularii comenzii respective va fi trimis catre fisier. Trebuie mentionat faptul ca daca fisierul in care este trimis rezultatul nu exista, atunci acesta este creat iar daca exista, continutul acestuia va fi inlocuit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt;&amp;gt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Daca fisierul nu exista atunci el este creat iar daca exista, continutul rezultat in urma rularii comenzii va fi pus la sfarsitul fisierului fara a se pierde nimic din informatia continuta initial in fisier.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;lt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Acest simbol este folosit pentru preluarea informatiilor necesare rularii comenzii nu din tastatura ci din fisierul respectiv.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #cat &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
De asemenea pot fi folosite mai multe simboluri de redirectare in aceeasi linie de comanda, la fel ca in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 #cat &amp;gt; source_name&lt;br /&gt;
 alina&lt;br /&gt;
 linux&lt;br /&gt;
 daniel&lt;br /&gt;
 mele&lt;br /&gt;
 #sort &amp;lt; source_name &amp;gt; sorted_name&lt;br /&gt;
 #cat sorted_name&lt;br /&gt;
 alina&lt;br /&gt;
 daniel&lt;br /&gt;
 linux&lt;br /&gt;
 mele&lt;br /&gt;
&lt;br /&gt;
In exemplul anterior comanda sort a preluat datele de intrare din fisierul source_name iar rezultatul a fost redirectat catre fisierul sorted_name.&lt;br /&gt;
Un alt exemplu ar putea fi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tr &amp;quot;[a-z]&amp;quot; &amp;quot;[A-Z]&amp;quot; &amp;lt; sorce_name &amp;gt; majuscule_name&lt;br /&gt;
 #cat majuscule_name&lt;br /&gt;
 ALINA&lt;br /&gt;
 DANIEL&lt;br /&gt;
 LINUX&lt;br /&gt;
 MELE&lt;br /&gt;
&lt;br /&gt;
Comanda &amp;lt;b&amp;gt;tr&amp;lt;/b&amp;gt; a fost folosita aici pentru transformarea minusculelor in majuscule dupa care rezultatul a fost scris in fisierul &amp;lt;i&amp;gt;majuscule_name&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Semnul PIPE===&lt;br /&gt;
&lt;br /&gt;
Acesta reprezinta modalitatea de conectare a iesirii unei comenzi de intrarea unei alte comenzi fara folosirea unui fisier temporar. Acestea sunt folosite pentru rularea a doua sau mai multe comenzi in aceeasi linie de comanda.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1 | comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #who | sort&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda va returna o lista a utilizatorilor logati pe masina respectiva intr-o ordine sortata.&lt;br /&gt;
&lt;br /&gt;
 #who | wc -l&lt;br /&gt;
&lt;br /&gt;
Va returna numarul de useri total logati in sistem.&lt;br /&gt;
&lt;br /&gt;
 #who | grep root&lt;br /&gt;
&lt;br /&gt;
Va returna doar logarile cu userul root.&lt;br /&gt;
&lt;br /&gt;
===Filtrele===&lt;br /&gt;
&lt;br /&gt;
Daca in linux o comanda isi accepta intrarea din intrarea standard si rezultatul acesteia este o iesire standard atunci comanda respectiva este cunoscuta sub numele de filtru. Ca exemplu presupunem ca avem fisierul &amp;lt;i&amp;gt;nume.txt&amp;lt;/i&amp;gt; care contine 100 de linii si din acesta am dori sa scoatem liniile de la 20 la 30 iar rezultatul sa il punem in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Pentru aceasta vom folosi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tail +20 &amp;lt; nume.txt |head -n 30 &amp;gt; flist&lt;br /&gt;
&lt;br /&gt;
In acest comanda &amp;lt;b&amp;gt;head&amp;lt;/b&amp;gt; este un filtru deoarece intrarea acesteia este preluata din rezultatul comenzii &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; si rezultatul acesteia este directionat in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Un alt exemplu il reprezinta comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #sort &amp;lt; snume | uniq &amp;gt; u_snume&lt;br /&gt;
&lt;br /&gt;
===Ce sunt procesele===&lt;br /&gt;
&lt;br /&gt;
Procesul este un fel de program sau sarcina pentru calculatorul nostru. Un exemplu ar putea fi:&lt;br /&gt;
&lt;br /&gt;
 #ps fax&lt;br /&gt;
&lt;br /&gt;
Aici apare o lista a tuturor proceselor de pe sistemul nostru in momentul de fata. Fiecarui proces in linux ii este asociat un PID sau process-id format dintr-un numar care ia valori intre 0 si 65535.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare procesele===&lt;br /&gt;
&lt;br /&gt;
Dupa cum se stie linuxul este un sistem de operare pe care poate rula mai mult de o singura sarcina la un moment dat daca se doreste acest lucru.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls / -R | wc -l&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda va afisa numarul total de fisiere existe pe sistemul dumneavoastra, doar ca ii va lua o anumita perioada de timp sa faca acest lucru. Pentru a nu fi nevoiti sa asteptam finalizarea comenzii curente si abia apoi sa putem executa o noua comanda, se poate rula comanda curenta in background. Acest lucru se poate face in felul urmator.&lt;br /&gt;
&lt;br /&gt;
 #ls / R | wc -l &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Se observa folosirea caracterului ampersand (&amp;amp;) la finalul comenzii, avand ca efect executarea comenzii in background si oferindu-ne imediat posibilitatea de executie a unei noi comenzi.&lt;br /&gt;
&lt;br /&gt;
===Comenzi linux referitoare la procese===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ps&amp;lt;/b&amp;gt; - pentru afisarea proceselor care ruleaza in momentul respectiv&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;kill {PID}&amp;lt;/b&amp;gt; - pentru oprirea procesului identificat prin pid-ul din cadrul comenzii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;killall {numele-procesului}&amp;lt;/b&amp;gt; - pentru oprirea procesului cu numele respectiv.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt; atentie sa nu dati kill procesului &amp;lt;b&amp;gt;sshd.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;ps -ag&amp;lt;/b&amp;gt; - pentru aflarea de informatii despre toate procesele care ruleaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;kill 0&amp;lt;/b&amp;gt; - pentru oprirea tuturor proceselor cu exceptia propriei conexiuni pe sistem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ps aux&amp;lt;/b&amp;gt; - pentru afisarea proceselor si o lista a userilor carora apartin aceste procese&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;top&amp;lt;/b&amp;gt; - pentru obtinerea unei liste a proceselor cu utilizarea memoriei si a procesorului de catre acestea, cu update in timp real&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;pstree&amp;lt;/b&amp;gt; - pentru obtinerea unei structuri arborescente a proceselor&lt;br /&gt;
&lt;br /&gt;
==Constructii in programarea structurata BASH shell==&lt;br /&gt;
&lt;br /&gt;
===Introducere===&lt;br /&gt;
&lt;br /&gt;
Luarea deciziilor este foarte importanta atat in viata de zi cu zi cat si in programarea calculatoarelor. Acest capitol face o scurta introducere in constructiile programarii bash, cum ar fi:&lt;br /&gt;
&lt;br /&gt;
* Luarea deciziilor&lt;br /&gt;
* Cicluri&lt;br /&gt;
&lt;br /&gt;
Exista diferente intre luarea deciziilor in viata de zi cu zi fata de deciziile pe care le iau calculatoarele? Deciziile sunt complicate pentru noi, oamenii, pe cand tot ceea ce intelege un calculator este sub forma de 0 (zero) si 1 care reprezinta Da sau Nu. Pentru a putea intelege toate acestea vom folosi in continuare &amp;lt;b&amp;gt;bc&amp;lt;/b&amp;gt; - Calculator pentru linux.&lt;br /&gt;
&lt;br /&gt;
 #bc&lt;br /&gt;
&lt;br /&gt;
Dupa pornirea acestui program bc este pornit si asteapta introducerea comenzilor de la tastatura. Daca vom tasta &amp;lt;b&amp;gt;5 + 2&amp;lt;/b&amp;gt; vom observa:&lt;br /&gt;
&lt;br /&gt;
 #5 + 2&lt;br /&gt;
 #7&lt;br /&gt;
&lt;br /&gt;
7 este raspunsul pe care l-am primit de la acest program, adica rezultatul adunarii dintre 5 si 2. Puteti incerca in continuare:&lt;br /&gt;
&lt;br /&gt;
 #5 - 2&lt;br /&gt;
 #5 / 2&lt;br /&gt;
 #5 &amp;gt; 2&lt;br /&gt;
&lt;br /&gt;
Vom observa ca rezultatul ultimei operatii va fi 1. bc compara cele doua valori si daca raspunsul este afirmativ (YES) ne va afisa valoarea 1. Puteti incerca acum:&lt;br /&gt;
&lt;br /&gt;
 #5 &amp;lt; 2&lt;br /&gt;
 #0&lt;br /&gt;
&lt;br /&gt;
0 indica faptul ca valoarea expresiei de mai sus este falsa. Pentru a ne clarifica mai bine raspunsurile date de acest program, pute incerca comparatiile de mai jos:&lt;br /&gt;
&lt;br /&gt;
 #5 &amp;gt; 12&lt;br /&gt;
 #5 == 10&lt;br /&gt;
 #5 != 2&lt;br /&gt;
 #5 == 5&lt;br /&gt;
 #12 &amp;lt; 2&lt;br /&gt;
&lt;br /&gt;
===Conditia if===&lt;br /&gt;
&lt;br /&gt;
Conditia if este folosita pentru luarea deciziilor in scripturile shell, daca valoarea conditiei este 1 sau YES atunci comanda este executata.&lt;br /&gt;
&lt;br /&gt;
 Syntax:&lt;br /&gt;
 &lt;br /&gt;
 if condition&lt;br /&gt;
    then&lt;br /&gt;
        command1 if condition is true or if exit status&lt;br /&gt;
        of condition is 0 (zero)&lt;br /&gt;
        ...&lt;br /&gt;
        ...&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
O definitie a conditiei ar putea fi urmatoare:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;quot;Conditia nu este decat o simpla comparatie intre doua valori&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expresia poate fi definita astfel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;quot;O expresie este o combinatie de valori, operatori relationali (cum ar fi &amp;gt;, &amp;lt;, &amp;lt;&amp;gt; etc.) si operatori matematici (cum ar fi +, -, / etc.)&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In continuare sunt prezentate cateva exemple de expresii:&lt;br /&gt;
&lt;br /&gt;
 5 &amp;gt; 2&lt;br /&gt;
 3 + 6&lt;br /&gt;
 3 * 65&lt;br /&gt;
 a &amp;lt; b&lt;br /&gt;
 c &amp;gt; 5&lt;br /&gt;
 c &amp;gt; 5 + 30 -1&lt;br /&gt;
&lt;br /&gt;
Tastati urmatoare comenzi, presupunand ca exista fisierul numit &amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #cat file&lt;br /&gt;
 #echo $?&lt;br /&gt;
&lt;br /&gt;
Comanda cat returneaza starea de exit 0, daca a fost executata cu succes, iar aceasta poate fi folosita in cazul conditiei if dupa cum se poate vedea in scriptul urmator:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; fisier&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 #Script pentru printarea fisierul&lt;br /&gt;
 #&lt;br /&gt;
 if cat $1&lt;br /&gt;
 then&lt;br /&gt;
 echo -e &amp;quot;\n\nFisierul $1, a fost gasit si afisat cu succes...&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Rulati scriptul de mai sus dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # chmod 755 fisier&lt;br /&gt;
 # ./fisier file&lt;br /&gt;
&lt;br /&gt;
Numele scriptului este &amp;lt;b&amp;gt;fisier&amp;lt;/b&amp;gt; ($0) si &amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt; este argumentul (care este $1). &lt;br /&gt;
&lt;br /&gt;
Explicatii detaliate:&lt;br /&gt;
&lt;br /&gt;
Daca comanda &amp;lt;b&amp;gt;cat&amp;lt;/b&amp;gt; gaseste fisierul &amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt; si il afiseaza pe ecran, inseamna ca aceasta comanda a fost executata cu succes si starea ei de exit este 0. Astfel conditia noastra if este de asemenea adevarata si declaratia &amp;lt;b&amp;gt;echo -e &amp;quot;\n\nFisierul $1, a fost gasit si afisat cu succes...&amp;quot;&amp;lt;/b&amp;gt; este executata cu succes. Daca comanda &amp;lt;b&amp;gt;cat&amp;lt;/b&amp;gt; nu este executata cu succes atunci valoarea starii de exit returnata de aceasta este diferita de zero si declaratia &amp;lt;b&amp;gt;echo -e &amp;quot;\n\nFisierul $1, a fost gasit si afisat cu succes...&amp;quot;&amp;lt;/b&amp;gt; nu este executata de catre shell.&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;test&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;[ expresie ]&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Comanda teste sau [ expresie ] este folosita pentru a vedea daca o expresie este adevarata, si daca aceasta este adevarata este returnata valoarea zero(0). Altfel, este returnat nonzero pentru fals.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 test expresie SAU [ expresie ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Exemplu&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Urmatorul script &amp;lt;b&amp;gt;ispositive&amp;lt;/b&amp;gt; verifica daca argumentul care ii este dat este pozitiv sau nu.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 # Script to see whether argument is positive&lt;br /&gt;
 #&lt;br /&gt;
 if test $1 -gt 0&lt;br /&gt;
 then&lt;br /&gt;
 echo &amp;quot;numarul $1 este pozitiv&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Se ruleaza in modul urmator:&lt;br /&gt;
&lt;br /&gt;
 # chmod 755 ispositive&lt;br /&gt;
 # ./ispositive 5&lt;br /&gt;
 numarul 5 este pozitiv&lt;br /&gt;
&lt;br /&gt;
 # ./ispositive -45&lt;br /&gt;
 Nu este afisat nimic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Test&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;[ expresie ]&amp;lt;/b&amp;gt; opereaza cu:&lt;br /&gt;
&lt;br /&gt;
 * Intregi (Numere fara punct zecimal)&lt;br /&gt;
 * Tipuri de fisiere&lt;br /&gt;
 * Caractere ale stringurilor&lt;br /&gt;
&lt;br /&gt;
Operatori matematici sunt urmatorii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-eq&amp;lt;/b&amp;gt; (este egal cu)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-ne&amp;lt;/b&amp;gt; (nu este egal cu)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-lt&amp;lt;/b&amp;gt; (mai mic decat)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-le&amp;lt;/b&amp;gt; (mai mic sau egal decat)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-gt&amp;lt;/b&amp;gt; (mai mare decat)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-ge&amp;lt;/b&amp;gt; (mai mare sau egal decat)&lt;br /&gt;
&lt;br /&gt;
Operatori pentru stringuri:&lt;br /&gt;
&lt;br /&gt;
stringul1 &amp;lt;b&amp;gt;=&amp;lt;/b&amp;gt; stringul2 (stringul1 este egal cu stringul2)&lt;br /&gt;
&lt;br /&gt;
stringul1 &amp;lt;b&amp;gt;!=&amp;lt;/b&amp;gt; stringul2 (stringul1 nu este egal cu stringul 2)&lt;br /&gt;
&lt;br /&gt;
stringul1 (stringul1 este ne null sau nedefinit)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-n&amp;lt;/b&amp;gt; stringul1 (stringul1 este ne null si exista)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-z&amp;lt;/b&amp;gt; stringul1 (stringul1 este nul si exista)&lt;br /&gt;
&lt;br /&gt;
Pentru fisiere si directoare tipurile de operatori sunt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-s&amp;lt;/b&amp;gt; fisier (fisierul care nu este gol)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-f&amp;lt;/b&amp;gt; fisier (fisierul exista si nu este un director)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-d&amp;lt;/b&amp;gt; fisier (este director, exista si nu este fisier)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-w&amp;lt;/b&amp;gt; fisier (fisierul are drepturi de scriere)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-r&amp;lt;/b&amp;gt; fisier (fisierul are atributul doar de citire, read-only)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-x&amp;lt;/b&amp;gt; fisier (fisierul are atribut de executie)&lt;br /&gt;
&lt;br /&gt;
Operatorii logici sunt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;!&amp;lt;/b&amp;gt; expresie (logic NOT)&lt;br /&gt;
&lt;br /&gt;
expresie1 &amp;lt;b&amp;gt;-a&amp;lt;/b&amp;gt; expresie2 (logic AND)&lt;br /&gt;
&lt;br /&gt;
expresie1 &amp;lt;b&amp;gt;-o&amp;lt;/b&amp;gt; expresie2 (logic OR)&lt;br /&gt;
&lt;br /&gt;
===if...else...fi===&lt;br /&gt;
&lt;br /&gt;
Daca conditia data este adevarata atunci comanda1 este executata, altfel comanda2 este executata.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 if condition&lt;br /&gt;
 then&lt;br /&gt;
 	conditia este zero (adevarata - 0)&lt;br /&gt;
 	se vor executa toate comenzile pana la else&lt;br /&gt;
 else&lt;br /&gt;
 	daca conditia nu este adevarata&lt;br /&gt;
 	se executa toate comenzile pana la fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Spre exemplu, scrieti si rulati scriptul urmator: #mcedit este_poz.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 # Script pentru a observa daca argumentul este pozitiv sau negativ&lt;br /&gt;
 #&lt;br /&gt;
 if [ $# -eq 0 ]&lt;br /&gt;
 then&lt;br /&gt;
 echo &amp;quot;$0 : Trebuie sa introduceti un intreg&amp;quot;&lt;br /&gt;
 exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 if test $1 -gt 0&lt;br /&gt;
 then&lt;br /&gt;
 echo &amp;quot; $1 este un numar pozitiv&lt;br /&gt;
 else&lt;br /&gt;
 echo &amp;quot; $1 este un numar negativ&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Il puteti rula dupa cum urmeaza:&lt;br /&gt;
 #chmod +x este_poz.sh&lt;br /&gt;
 #./este_poz.sh 5&lt;br /&gt;
 5 este un numar pozitiv&lt;br /&gt;
&lt;br /&gt;
 #./este_poz&lt;br /&gt;
 ./este_poz : Trebuie sa introduceti un intreg&lt;br /&gt;
&lt;br /&gt;
 #./este_poz.sh -5&lt;br /&gt;
 -5 este un numar negativ&lt;br /&gt;
&lt;br /&gt;
Explicatii detaliate:&lt;br /&gt;
Prima parte a scriptului verifica daca argumentul este dat in linia de comanda, si daca acesta nu este dat afiseaza un mesaj de eroare. If-ul testeaza daca numarul de argumente este sau nu egal cu 0. Daca au fost date scriptului argumente in linia de comanda atunci declaratia din if devine falsa, iar daca a fost dat un argument scriptului, aceasta cpata valoarea de adevar true.&lt;br /&gt;
Mai jos se verifica daca argumentul, care acum exista este pozitiv sau negativ si se afiseaza un mesaj corespunzator.&lt;br /&gt;
&lt;br /&gt;
Se pot folosi de asemenea si if-uri grupate:&lt;br /&gt;
&lt;br /&gt;
 #mcedit if_grupat.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 os=0&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;1. Windows (XP)&amp;quot;&lt;br /&gt;
 echo &amp;quot;2. Linux (Debian)&amp;quot;&lt;br /&gt;
 echo -n &amp;quot;Alegeti sistemul preferat de operare [1 or 2]? &amp;quot;&lt;br /&gt;
 read os&lt;br /&gt;
 &lt;br /&gt;
 if [ $os -eq 1 ] ; then&lt;br /&gt;
 	echoo &amp;quot;Ai ales Windows (XP)&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
 	if [ $os -eq 2 ] ; then&lt;br /&gt;
 		echo &amp;quot;Ai ales Linux (Debian)&amp;quot;&lt;br /&gt;
 	else&lt;br /&gt;
 		echo &amp;quot;Astazi esti foarte nehotarat&amp;quot;&lt;br /&gt;
 	fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
 #chmod +x if_grupat.sh&lt;br /&gt;
&lt;br /&gt;
Se poate observa foarte bine in scriptul de mai sus folosirea grupata a if-ului.&lt;br /&gt;
&lt;br /&gt;
Sintaxa acestui tip de declaratie este urmatoarea:&lt;br /&gt;
&lt;br /&gt;
 if conditie&lt;br /&gt;
 then&lt;br /&gt;
 	if conditie&lt;br /&gt;
 	then&lt;br /&gt;
 		...&lt;br /&gt;
 		...&lt;br /&gt;
 		comenzi&lt;br /&gt;
 	else&lt;br /&gt;
 		...&lt;br /&gt;
 		...&lt;br /&gt;
 		comenzi&lt;br /&gt;
 	fi&lt;br /&gt;
 else&lt;br /&gt;
 	...&lt;br /&gt;
 	...&lt;br /&gt;
 	comenzi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Articol original in limba engleza: http://www.freeos.com/guides/lsst/&lt;br /&gt;
Traducere inceputa de catre Simionov Daniel Adrian&amp;lt;/i&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=5600</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=5600"/>
				<updated>2010-01-06T21:17:04Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Despre acest articol===&lt;br /&gt;
&lt;br /&gt;
este o  traducere? facuta de catre cine, dupa ce material?&lt;br /&gt;
&lt;br /&gt;
sau un articol original? scris de cine? cind? autor? data? in lucru? terminat?&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu=DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este $numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatie:&lt;br /&gt;
&lt;br /&gt;
* in exemplul de mai jos executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folosind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; - tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' - tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` - sunt folosite pentru a executa comanda aflata intre acestea&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #echo &amp;quot;Astazi este data&amp;quot;&lt;br /&gt;
 #echo &amp;quot;Astazi este `date`&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Se observa ca in primul caz a fost afisat sirul de caractere &amp;quot;Astazi este data&amp;quot; iar in cel de-al doilea caz este afisata data de astazi.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b&amp;gt;Exit Status&amp;lt;/b&amp;gt; - Starea de exit===&lt;br /&gt;
&lt;br /&gt;
De obicei, in Linux, daca o anumita comanda sau script au fost executatate, ele returneaza doua tipuri de valori, care sunt folosite pentru a vedea daca comanda sau scriptul au fost executate corect sau nu.&lt;br /&gt;
&lt;br /&gt;
Daca valoarea returnata este 0 atunci comanda a fost executata cu succes iar daca valoarea returnata este diferita de 0 atunci a aparut o eroare in executarea comenzii sau a scriptului.&lt;br /&gt;
&lt;br /&gt;
Pentru a avea valoarea starii de exit, se foloseste variabila speciala $?. Urmatoarele exercitii sper sa va lamureasca in legatura cu folosirea acestei variabile speciale.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # expr 1 + 2&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echo Buna ziua&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # wildwest sunt_obosit?&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # date&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echon $?&lt;br /&gt;
 # echo $?&lt;br /&gt;
&lt;br /&gt;
===Declaratia de citire (&amp;lt;b&amp;gt;read&amp;lt;/b&amp;gt;)===&lt;br /&gt;
&lt;br /&gt;
Aceasta declaratie este folosita pentru preluarea datelor de la utilizator prin intermediul tastaturii si memorarea datelor in variabile.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 read variabila1, variabila2,... variabilaN&lt;br /&gt;
&lt;br /&gt;
Urmatorul script ii cere utilizatorului numele si apoi asteapta introducerea acestuia de la tastatura. Utilizatorul introduce numele la tastatura (dupa scrierea numelui trebuie apasata tasta ENTER) si numele introdus prin intermediul tastaturii este memorat in variabila &amp;lt;b&amp;gt;fname&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #mcedit script.sh&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 #script pentru citirea numelui de la tastatura&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numele dumneavoastra va rog:&amp;quot;&lt;br /&gt;
 read fname&lt;br /&gt;
 echo &amp;quot;Buna $fname, ma bucur de cunostinta!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Rularea acestuia se va face in felul urmator:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Numele dumneavoastra va rog:&amp;lt;b&amp;gt;adrian&amp;lt;/b&amp;gt;&lt;br /&gt;
 Buna adrian, ma bucur de cunostinta!&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Meta caracterele (folosite pentru specificarea globala a numelui unui fisier)===&lt;br /&gt;
&lt;br /&gt;
Meta caracterul:&lt;br /&gt;
&lt;br /&gt;
 * - potriveste orice caracter sau grup de caractere&lt;br /&gt;
 ? - potriveste orice caracter dar numai unul&lt;br /&gt;
 [...] - inlocuieste doar cu caracterele aflate intre paranteze&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls /bin/[a-c]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin care incep cu litera a, b sau c&lt;br /&gt;
&lt;br /&gt;
 #ls /bin/[!a-f]*   sau   #ls /bin/[^a-f]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin cu exceptia celor care incep cu un caracter aflat in seria mentionata&lt;br /&gt;
&lt;br /&gt;
===Mai multe comenzi intr-o singura linie de comanda===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1; comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 #date; who&lt;br /&gt;
&lt;br /&gt;
Comanda de mai sus va afisa data de astazi urmata de userul cu care suntem logati. In exact acelasi scop poate fi folosita si urmatoarea linie de comanda:&lt;br /&gt;
&lt;br /&gt;
 #date who&lt;br /&gt;
&lt;br /&gt;
===Procesarea liniei de comanda===&lt;br /&gt;
&lt;br /&gt;
Incercati urmatoarea comanda (se presupune ca fisierul &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; nu exista pe sistemul dumneavoastra):&lt;br /&gt;
&lt;br /&gt;
 #ls script.sh&lt;br /&gt;
&lt;br /&gt;
Va fi afisat un mesaj asemanator cu urmatorul:&lt;br /&gt;
&lt;br /&gt;
 - script.sh: No such file or directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; este numele unei comenzi efective si shell-ul o executa in momentul in care aceasta este tastata la prompter. Acum ia nastere o alta intrebare &amp;lt;b&amp;gt;Ce sunt comenzile?&amp;lt;/b&amp;gt;. Ce se intampla cand tastam &amp;lt;b&amp;gt;#ls script.sh&amp;lt;/b&amp;gt;?&lt;br /&gt;
Primul cuvant al liniei de comanda este &amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; - numele comenzii ce urmeaza sa fie executata. Orice altceva pe acea linie este citit ca fiind un argument pentru comanda respectiva.&lt;br /&gt;
&lt;br /&gt;
 #tail +10 script.sh&lt;br /&gt;
&lt;br /&gt;
Numele comenzii este &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; iar &amp;lt;b&amp;gt;+10&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; sunt considerate argumente ale acestei comenzi.&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; detine numarul de argumente specificate in linia de comanda. Iar &amp;lt;b&amp;gt;$*&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;$@&amp;lt;/b&amp;gt; se refera la toate argumentele date scriptului.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare argumentele in linia de comanda===&lt;br /&gt;
&lt;br /&gt;
1. Pentru a spune comenzii sau utilitarului ce optiuni sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
2. Pentru a informa comanda sau utilitarul ce fisier sau grup de fisiere sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
Sa luam de exemplu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; care este folosita pentru stergerea unui fisier, dar cum ii vom spune noi acestei comenzi ce fisier sa stearga (ea nu ne va intreba ce fisier dorim sa stergem). Ceea ce vom face este sa rulam comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #rm {numele fisierului}&lt;br /&gt;
&lt;br /&gt;
In acest exemplu &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; este comanda iar &amp;lt;b&amp;gt;numele-fisierului&amp;lt;/b&amp;gt; este fisierul pe care dorim sa il stergem. In acest mod ii precizam explicit comenzii &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; ce fisier sa stearga. Astfel noi comunicam cu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; specificand numele fisierului. De asemenea pot fi transmise prin intermediul liniei de comanda anumite argumente scriptului pe care il rulam.&lt;br /&gt;
&lt;br /&gt;
In cazul scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
 #script.sh unu doi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; este numele scriptului rulat&lt;br /&gt;
&amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt; reprezinta primul argument trecut scriptului prin intermediul liniei de comanda&lt;br /&gt;
&amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt; reprezinta cel de-al doilea argument.&lt;br /&gt;
&lt;br /&gt;
In cadrul scriptului nostru, daca dorim sa ne referim la aceste argumente o vom face in felul urmator:&lt;br /&gt;
&amp;lt;b&amp;gt;$0&amp;lt;/b&amp;gt; reprezinta numele scriptului&lt;br /&gt;
&amp;lt;b&amp;gt;$1&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$2&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In acest exemplu variabila predefinita &amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; deoarece au fost introduse doar doua argumente scriptului nostru. Trebuie notat faptul ca la un moment dat pot fi folosite un numar de maxim 9 argumente notate de la $1 la $9. Notatiile $1...$9 reprezinta parametrii de pozitie.&lt;br /&gt;
Urmatorul script va fi folosit pentru afisarea si prelucrarea argumentelor liniei de comanda:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 #folosirea argumentelor&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numarul de argumente din linia de comanda este de $#&amp;quot;&lt;br /&gt;
 echo &amp;quot;$0 este numele scriptului&amp;quot;&lt;br /&gt;
 echo &amp;quot;$1 reprezinta primul argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;$2 reprezinta cel de al doilea argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;toate argumentele sunt: $* sau $@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pentru rulare se vor folosi comenzile:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Nota&amp;lt;/b&amp;gt;&lt;br /&gt;
Nu se pot atribui alte valori parametrilor de pozitie in cadrul scriptului.&lt;br /&gt;
&lt;br /&gt;
Urmatoarele declaratii sunt invalide:&lt;br /&gt;
&lt;br /&gt;
 $1 = doi&lt;br /&gt;
 $2 = unu&lt;br /&gt;
&lt;br /&gt;
===Redirectarea intrarilor si iesirilor standard===&lt;br /&gt;
&lt;br /&gt;
In cea mai mare parte comenzile au iesirile spre monitor iar intrarile sunt luate de la tastatura, dar in Linux, ca si in alte sisteme de operare, se pot trimite iesirile catre fisiere sau de asemenea citirea intrarilor din fisiere.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #ls&lt;br /&gt;
&lt;br /&gt;
comanda de mai sus afiseaza rezultatul pe monitor. Pentru directionarea rezultatului intr-un fisier va fi folosita comanda:&lt;br /&gt;
&lt;br /&gt;
 #ls &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Exista trei mari simboluri de redirectare:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;, &amp;gt;&amp;gt; si &amp;lt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Rezultatul rularii comenzii respective va fi trimis catre fisier. Trebuie mentionat faptul ca daca fisierul in care este trimis rezultatul nu exista, atunci acesta este creat iar daca exista, continutul acestuia va fi inlocuit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt;&amp;gt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Daca fisierul nu exista atunci el este creat iar daca exista, continutul rezultat in urma rularii comenzii va fi pus la sfarsitul fisierului fara a se pierde nimic din informatia continuta initial in fisier.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;lt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Acest simbol este folosit pentru preluarea informatiilor necesare rularii comenzii nu din tastatura ci din fisierul respectiv.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #cat &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
De asemenea pot fi folosite mai multe simboluri de redirectare in aceeasi linie de comanda, la fel ca in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 #cat &amp;gt; source_name&lt;br /&gt;
 alina&lt;br /&gt;
 linux&lt;br /&gt;
 daniel&lt;br /&gt;
 mele&lt;br /&gt;
 #sort &amp;lt; source_name &amp;gt; sorted_name&lt;br /&gt;
 #cat sorted_name&lt;br /&gt;
 alina&lt;br /&gt;
 daniel&lt;br /&gt;
 linux&lt;br /&gt;
 mele&lt;br /&gt;
&lt;br /&gt;
In exemplul anterior comanda sort a preluat datele de intrare din fisierul source_name iar rezultatul a fost redirectat catre fisierul sorted_name.&lt;br /&gt;
Un alt exemplu ar putea fi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tr &amp;quot;[a-z]&amp;quot; &amp;quot;[A-Z]&amp;quot; &amp;lt; sorce_name &amp;gt; majuscule_name&lt;br /&gt;
 #cat majuscule_name&lt;br /&gt;
 ALINA&lt;br /&gt;
 DANIEL&lt;br /&gt;
 LINUX&lt;br /&gt;
 MELE&lt;br /&gt;
&lt;br /&gt;
Comanda &amp;lt;b&amp;gt;tr&amp;lt;/b&amp;gt; a fost folosita aici pentru transformarea minusculelor in majuscule dupa care rezultatul a fost scris in fisierul &amp;lt;i&amp;gt;majuscule_name&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Semnul PIPE===&lt;br /&gt;
&lt;br /&gt;
Acesta reprezinta modalitatea de conectare a iesirii unei comenzi de intrarea unei alte comenzi fara folosirea unui fisier temporar. Acestea sunt folosite pentru rularea a doua sau mai multe comenzi in aceeasi linie de comanda.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1 | comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #who | sort&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda va returna o lista a utilizatorilor logati pe masina respectiva intr-o ordine sortata.&lt;br /&gt;
&lt;br /&gt;
 #who | wc -l&lt;br /&gt;
&lt;br /&gt;
Va returna numarul de useri total logati in sistem.&lt;br /&gt;
&lt;br /&gt;
 #who | grep root&lt;br /&gt;
&lt;br /&gt;
Va returna doar logarile cu userul root.&lt;br /&gt;
&lt;br /&gt;
===Filtrele===&lt;br /&gt;
&lt;br /&gt;
Daca in linux o comanda isi accepta intrarea din intrarea standard si rezultatul acesteia este o iesire standard atunci comanda respectiva este cunoscuta sub numele de filtru. Ca exemplu presupunem ca avem fisierul &amp;lt;i&amp;gt;nume.txt&amp;lt;/i&amp;gt; care contine 100 de linii si din acesta am dori sa scoatem liniile de la 20 la 30 iar rezultatul sa il punem in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Pentru aceasta vom folosi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tail +20 &amp;lt; nume.txt |head -n 30 &amp;gt; flist&lt;br /&gt;
&lt;br /&gt;
In acest comanda &amp;lt;b&amp;gt;head&amp;lt;/b&amp;gt; este un filtru deoarece intrarea acesteia este preluata din rezultatul comenzii &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; si rezultatul acesteia este directionat in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Un alt exemplu il reprezinta comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #sort &amp;lt; snume | uniq &amp;gt; u_snume&lt;br /&gt;
&lt;br /&gt;
===Ce sunt procesele===&lt;br /&gt;
&lt;br /&gt;
Procesul este un fel de program sau sarcina pentru calculatorul nostru. Un exemplu ar putea fi:&lt;br /&gt;
&lt;br /&gt;
 #ps fax&lt;br /&gt;
&lt;br /&gt;
Aici apare o lista a tuturor proceselor de pe sistemul nostru in momentul de fata. Fiecarui proces in linux ii este asociat un PID sau process-id format dintr-un numar care ia valori intre 0 si 65535.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare procesele===&lt;br /&gt;
&lt;br /&gt;
Dupa cum se stie linuxul este un sistem de operare pe care poate rula mai mult de o singura sarcina la un moment dat daca se doreste acest lucru.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls / -R | wc -l&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda va afisa numarul total de fisiere existe pe sistemul dumneavoastra, doar ca ii va lua o anumita perioada de timp sa faca acest lucru. Pentru a nu fi nevoiti sa asteptam finalizarea comenzii curente si abia apoi sa putem executa o noua comanda, se poate rula comanda curenta in background. Acest lucru se poate face in felul urmator.&lt;br /&gt;
&lt;br /&gt;
 #ls / R | wc -l &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Se observa folosirea caracterului ampersand (&amp;amp;) la finalul comenzii, avand ca efect executarea comenzii in background si oferindu-ne imediat posibilitatea de executie a unei noi comenzi.&lt;br /&gt;
&lt;br /&gt;
===Comenzi linux referitoare la procese===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ps&amp;lt;/b&amp;gt; - pentru afisarea proceselor care ruleaza in momentul respectiv&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;kill {PID}&amp;lt;/b&amp;gt; - pentru oprirea procesului identificat prin pid-ul din cadrul comenzii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;killall {numele-procesului}&amp;lt;/b&amp;gt; - pentru oprirea procesului cu numele respectiv.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt; atentie sa nu dati kill procesului &amp;lt;b&amp;gt;sshd.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;ps -ag&amp;lt;/b&amp;gt; - pentru aflarea de informatii despre toate procesele care ruleaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;kill 0&amp;lt;/b&amp;gt; - pentru oprirea tuturor proceselor cu exceptia propriei conexiuni pe sistem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ps aux&amp;lt;/b&amp;gt; - pentru afisarea proceselor si o lista a userilor carora apartin aceste procese&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;top&amp;lt;/b&amp;gt; - pentru obtinerea unei liste a proceselor cu utilizarea memoriei si a procesorului de catre acestea, cu update in timp real&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;pstree&amp;lt;/b&amp;gt; - pentru obtinerea unei structuri arborescente a proceselor&lt;br /&gt;
&lt;br /&gt;
==Constructii in programarea structurata BASH shell==&lt;br /&gt;
&lt;br /&gt;
===Introducere===&lt;br /&gt;
&lt;br /&gt;
Luarea deciziilor este foarte importanta atat in viata de zi cu zi cat si in programarea calculatoarelor. Acest capitol face o scurta introducere in constructiile programarii bash, cum ar fi:&lt;br /&gt;
&lt;br /&gt;
* Luarea deciziilor&lt;br /&gt;
* Cicluri&lt;br /&gt;
&lt;br /&gt;
Exista diferente intre luarea deciziilor in viata de zi cu zi fata de deciziile pe care le iau calculatoarele? Deciziile sunt complicate pentru noi, oamenii, pe cand tot ceea ce intelege un calculator este sub forma de 0 (zero) si 1 care reprezinta Da sau Nu. Pentru a putea intelege toate acestea vom folosi in continuare &amp;lt;b&amp;gt;bc&amp;lt;/b&amp;gt; - Calculator pentru linux.&lt;br /&gt;
&lt;br /&gt;
 #bc&lt;br /&gt;
&lt;br /&gt;
Dupa pornirea acestui program bc este pornit si asteapta introducerea comenzilor de la tastatura. Daca vom tasta &amp;lt;b&amp;gt;5 + 2&amp;lt;/b&amp;gt; vom observa:&lt;br /&gt;
&lt;br /&gt;
 #5 + 2&lt;br /&gt;
 #7&lt;br /&gt;
&lt;br /&gt;
7 este raspunsul pe care l-am primit de la acest program, adica rezultatul adunarii dintre 5 si 2. Puteti incerca in continuare:&lt;br /&gt;
&lt;br /&gt;
 #5 - 2&lt;br /&gt;
 #5 / 2&lt;br /&gt;
 #5 &amp;gt; 2&lt;br /&gt;
&lt;br /&gt;
Vom observa ca rezultatul ultimei operatii va fi 1. bc compara cele doua valori si daca raspunsul este afirmativ (YES) ne va afisa valoarea 1. Puteti incerca acum:&lt;br /&gt;
&lt;br /&gt;
 #5 &amp;lt; 2&lt;br /&gt;
 #0&lt;br /&gt;
&lt;br /&gt;
0 indica faptul ca valoarea expresiei de mai sus este falsa. Pentru a ne clarifica mai bine raspunsurile date de acest program, pute incerca comparatiile de mai jos:&lt;br /&gt;
&lt;br /&gt;
 #5 &amp;gt; 12&lt;br /&gt;
 #5 == 10&lt;br /&gt;
 #5 != 2&lt;br /&gt;
 #5 == 5&lt;br /&gt;
 #12 &amp;lt; 2&lt;br /&gt;
&lt;br /&gt;
===Conditia if===&lt;br /&gt;
&lt;br /&gt;
Conditia if este folosita pentru luarea deciziilor in scripturile shell, daca valoarea conditiei este 1 sau YES atunci comanda este executata.&lt;br /&gt;
&lt;br /&gt;
 Syntax:&lt;br /&gt;
 &lt;br /&gt;
 if condition&lt;br /&gt;
    then&lt;br /&gt;
        command1 if condition is true or if exit status&lt;br /&gt;
        of condition is 0 (zero)&lt;br /&gt;
        ...&lt;br /&gt;
        ...&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
O definitie a conditiei ar putea fi urmatoare:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;quot;Conditia nu este decat o simpla comparatie intre doua valori&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expresia poate fi definita astfel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;quot;O expresie este o combinatie de valori, operatori relationali (cum ar fi &amp;gt;, &amp;lt;, &amp;lt;&amp;gt; etc.) si operatori matematici (cum ar fi +, -, / etc.)&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In continuare sunt prezentate cateva exemple de expresii:&lt;br /&gt;
&lt;br /&gt;
 5 &amp;gt; 2&lt;br /&gt;
 3 + 6&lt;br /&gt;
 3 * 65&lt;br /&gt;
 a &amp;lt; b&lt;br /&gt;
 c &amp;gt; 5&lt;br /&gt;
 c &amp;gt; 5 + 30 -1&lt;br /&gt;
&lt;br /&gt;
Tastati urmatoare comenzi, presupunand ca exista fisierul numit &amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #cat file&lt;br /&gt;
 #echo $?&lt;br /&gt;
&lt;br /&gt;
Comanda cat returneaza starea de exit 0, daca a fost executata cu succes, iar aceasta poate fi folosita in cazul conditiei if dupa cum se poate vedea in scriptul urmator:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; fisier&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 #Script pentru printarea fisierul&lt;br /&gt;
 #&lt;br /&gt;
 if cat $1&lt;br /&gt;
 then&lt;br /&gt;
 echo -e &amp;quot;\n\nFisierul $1, a fost gasit si afisat cu succes...&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Rulati scriptul de mai sus dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # chmod 755 fisier&lt;br /&gt;
 # ./fisier file&lt;br /&gt;
&lt;br /&gt;
Numele scriptului este &amp;lt;b&amp;gt;fisier&amp;lt;/b&amp;gt; ($0) si &amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt; este argumentul (care este $1). &lt;br /&gt;
&lt;br /&gt;
Explicatii detaliate:&lt;br /&gt;
&lt;br /&gt;
Daca comanda &amp;lt;b&amp;gt;cat&amp;lt;/b&amp;gt; gaseste fisierul &amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt; si il afiseaza pe ecran, inseamna ca aceasta comanda a fost executata cu succes si starea ei de exit este 0. Astfel conditia noastra if este de asemenea adevarata si declaratia &amp;lt;b&amp;gt;echo -e &amp;quot;\n\nFisierul $1, a fost gasit si afisat cu succes...&amp;quot;&amp;lt;/b&amp;gt; este executata cu succes. Daca comanda &amp;lt;b&amp;gt;cat&amp;lt;/b&amp;gt; nu este executata cu succes atunci valoarea starii de exit returnata de aceasta este diferita de zero si declaratia &amp;lt;b&amp;gt;echo -e &amp;quot;\n\nFisierul $1, a fost gasit si afisat cu succes...&amp;quot;&amp;lt;/b&amp;gt; nu este executata de catre shell.&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;test&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;[ expresie ]&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Comanda teste sau [ expresie ] este folosita pentru a vedea daca o expresie este adevarata, si daca aceasta este adevarata este returnata valoarea zero(0). Altfel, este returnat nonzero pentru fals.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 test expresie SAU [ expresie ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Exemplu&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Urmatorul script &amp;lt;b&amp;gt;ispositive&amp;lt;/b&amp;gt; verifica daca argumentul care ii este dat este pozitiv sau nu.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 # Script to see whether argument is positive&lt;br /&gt;
 #&lt;br /&gt;
 if test $1 -gt 0&lt;br /&gt;
 then&lt;br /&gt;
 echo &amp;quot;numarul $1 este pozitiv&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Se ruleaza in modul urmator:&lt;br /&gt;
&lt;br /&gt;
 # chmod 755 ispositive&lt;br /&gt;
 # ./ispositive 5&lt;br /&gt;
 numarul 5 este pozitiv&lt;br /&gt;
&lt;br /&gt;
 # ./ispositive -45&lt;br /&gt;
 Nu este afisat nimic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Test&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;[ expresie ]&amp;lt;/b&amp;gt; opereaza cu:&lt;br /&gt;
&lt;br /&gt;
 * Intregi (Numere fara punct zecimal)&lt;br /&gt;
 * Tipuri de fisiere&lt;br /&gt;
 * Caractere ale stringurilor&lt;br /&gt;
&lt;br /&gt;
Operatori matematici sunt urmatorii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-eq&amp;lt;/b&amp;gt; (este egal cu)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-ne&amp;lt;/b&amp;gt; (nu este egal cu)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-lt&amp;lt;/b&amp;gt; (mai mic decat)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-le&amp;lt;/b&amp;gt; (mai mic sau egal decat)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-gt&amp;lt;/b&amp;gt; (mai mare decat)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-ge&amp;lt;/b&amp;gt; (mai mare sau egal decat)&lt;br /&gt;
&lt;br /&gt;
Operatori pentru stringuri:&lt;br /&gt;
&lt;br /&gt;
stringul1 &amp;lt;b&amp;gt;=&amp;lt;/b&amp;gt; stringul2 (stringul1 este egal cu stringul2)&lt;br /&gt;
&lt;br /&gt;
stringul1 &amp;lt;b&amp;gt;!=&amp;lt;/b&amp;gt; stringul2 (stringul1 nu este egal cu stringul 2)&lt;br /&gt;
&lt;br /&gt;
stringul1 (stringul1 este ne null sau nedefinit)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-n&amp;lt;/b&amp;gt; stringul1 (stringul1 este ne null si exista)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-z&amp;lt;/b&amp;gt; stringul1 (stringul1 este nul si exista)&lt;br /&gt;
&lt;br /&gt;
Pentru fisiere si directoare tipurile de operatori sunt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-s&amp;lt;/b&amp;gt; fisier (fisierul care nu este gol)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-f&amp;lt;/b&amp;gt; fisier (fisierul exista si nu este un director)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-d&amp;lt;/b&amp;gt; fisier (este director, exista si nu este fisier)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-w&amp;lt;/b&amp;gt; fisier (fisierul are drepturi de scriere)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-r&amp;lt;/b&amp;gt; fisier (fisierul are atributul doar de citire, read-only)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-x&amp;lt;/b&amp;gt; fisier (fisierul are atribut de executie)&lt;br /&gt;
&lt;br /&gt;
Operatorii logici sunt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;!&amp;lt;/b&amp;gt; expresie (logic NOT)&lt;br /&gt;
&lt;br /&gt;
expresie1 &amp;lt;b&amp;gt;-a&amp;lt;/b&amp;gt; expresie2 (logic AND)&lt;br /&gt;
&lt;br /&gt;
expresie1 &amp;lt;b&amp;gt;-o&amp;lt;/b&amp;gt; expresie2 (logic OR)&lt;br /&gt;
&lt;br /&gt;
===if...else...fi===&lt;br /&gt;
&lt;br /&gt;
Daca conditia data este adevarata atunci comanda1 este executata, altfel comanda2 este executata.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 if condition&lt;br /&gt;
 then&lt;br /&gt;
 	conditia este zero (adevarata - 0)&lt;br /&gt;
 	se vor executa toate comenzile pana la else&lt;br /&gt;
 else&lt;br /&gt;
 	daca conditia nu este adevarata&lt;br /&gt;
 	se executa toate comenzile pana la fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Spre exemplu, scrieti si rulati scriptul urmator: #mcedit este_poz.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 # Script pentru a observa daca argumentul este pozitiv sau negativ&lt;br /&gt;
 #&lt;br /&gt;
 if [ $# -eq 0 ]&lt;br /&gt;
 then&lt;br /&gt;
 echo &amp;quot;$0 : Trebuie sa introduceti un intreg&amp;quot;&lt;br /&gt;
 exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 if test $1 -gt 0&lt;br /&gt;
 then&lt;br /&gt;
 echo &amp;quot; $1 este un numar pozitiv&lt;br /&gt;
 else&lt;br /&gt;
 echo &amp;quot; $1 este un numar negativ&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Il puteti rula dupa cum urmeaza:&lt;br /&gt;
 #chmod +x este_poz.sh&lt;br /&gt;
 #./este_poz.sh 5&lt;br /&gt;
 5 este un numar pozitiv&lt;br /&gt;
&lt;br /&gt;
 #./este_poz&lt;br /&gt;
 ./este_poz : Trebuie sa introduceti un intreg&lt;br /&gt;
&lt;br /&gt;
 #./este_poz.sh -5&lt;br /&gt;
 -5 este un numar negativ&lt;br /&gt;
&lt;br /&gt;
Explicatii detaliate:&lt;br /&gt;
Prima parte a scriptului verifica daca argumentul este dat in linia de comanda, si daca acesta nu este dat afiseaza un mesaj de eroare. If-ul testeaza daca numarul de argumente este sau nu egal cu 0. Daca au fost date scriptului argumente in linia de comanda atunci declaratia din if devine falsa, iar daca a fost dat un argument scriptului, aceasta cpata valoarea de adevar true.&lt;br /&gt;
Mai jos se verifica daca argumentul, care acum exista este pozitiv sau negativ si se afiseaza un mesaj corespunzator.&lt;br /&gt;
&lt;br /&gt;
Se pot folosi de asemenea si if-uri grupate:&lt;br /&gt;
&lt;br /&gt;
 #mcedit if_grupat.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 os=0&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;1. Windows (XP)&amp;quot;&lt;br /&gt;
 echo &amp;quot;2. Linux (Debian)&amp;quot;&lt;br /&gt;
 echo -n &amp;quot;Alegeti sistemul preferat de operare [1 or 2]? &amp;quot;&lt;br /&gt;
 read os&lt;br /&gt;
 &lt;br /&gt;
 if [ $os -eq 1 ] ; then&lt;br /&gt;
 	echoo &amp;quot;Ai ales Windows (XP)&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
 	if [ $os -eq 2 ] ; then&lt;br /&gt;
 		echo &amp;quot;Ai ales Linux (Debian)&amp;quot;&lt;br /&gt;
 	else&lt;br /&gt;
 		echo &amp;quot;Astazi esti foarte nehotarat&amp;quot;&lt;br /&gt;
 	fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
 #chmod +x if_grupat.sh&lt;br /&gt;
&lt;br /&gt;
Se poate observa foarte bine in scriptul de mai sus folosirea grupata a if-ului.&lt;br /&gt;
&lt;br /&gt;
Sintaxa acestui tip de declaratie este urmatoarea:&lt;br /&gt;
&lt;br /&gt;
 if conditie&lt;br /&gt;
 then&lt;br /&gt;
 	if conditie&lt;br /&gt;
 	then&lt;br /&gt;
 		...&lt;br /&gt;
 		...&lt;br /&gt;
 		comenzi&lt;br /&gt;
 	else&lt;br /&gt;
 		...&lt;br /&gt;
 		...&lt;br /&gt;
 		comenzi&lt;br /&gt;
 	fi&lt;br /&gt;
 else&lt;br /&gt;
 	...&lt;br /&gt;
 	...&lt;br /&gt;
 	comenzi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Articol original in limba engleza: http://www.freeos.com/guides/lsst/&amp;lt;/i&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=2337</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=2337"/>
				<updated>2006-10-17T09:24:36Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Comanda &amp;lt;b&amp;gt;test&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;[ expresie ]&amp;lt;/b&amp;gt; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Despre acest articol===&lt;br /&gt;
&lt;br /&gt;
este o  traducere? facuta de catre cine, dupa ce material?&lt;br /&gt;
&lt;br /&gt;
sau un articol original? scris de cine? cind? autor? data? in lucru? terminat?&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatie:&lt;br /&gt;
&lt;br /&gt;
* in exemplul de mai jos executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folosind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; - tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' - tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` - sunt folosite pentru a executa comanda aflata intre acestea&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #echo &amp;quot;Astazi este data&amp;quot;&lt;br /&gt;
 #echo &amp;quot;Astazi este `date`&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Se observa ca in primul caz a fost afisat sirul de caractere &amp;quot;Astazi este data&amp;quot; iar in cel de-al doilea caz este afisata data de astazi.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b&amp;gt;Exit Status&amp;lt;/b&amp;gt; - Starea de exit===&lt;br /&gt;
&lt;br /&gt;
De obicei, in Linux, daca o anumita comanda sau script au fost executatate, ele returneaza doua tipuri de valori, care sunt folosite pentru a vedea daca comanda sau scriptul au fost executate corect sau nu.&lt;br /&gt;
&lt;br /&gt;
Daca valoarea returnata este 0 atunci comanda a fost executata cu succes iar daca valoarea returnata este diferita de 0 atunci a aparut o eroare in executarea comenzii sau a scriptului.&lt;br /&gt;
&lt;br /&gt;
Pentru a avea valoarea starii de exit, se foloseste variabila speciala $?. Urmatoarele exercitii sper sa va lamureasca in legatura cu folosirea acestei variabile speciale.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # expr 1 + 2&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echo Buna ziua&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # wildwest sunt_obosit?&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # date&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echon $?&lt;br /&gt;
 # echo $?&lt;br /&gt;
&lt;br /&gt;
===Declaratia de citire (&amp;lt;b&amp;gt;read&amp;lt;/b&amp;gt;)===&lt;br /&gt;
&lt;br /&gt;
Aceasta declaratie este folosita pentru preluarea datelor de la utilizator prin intermediul tastaturii si memorarea datelor in variabile.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 read variabila1, variabila2,... variabilaN&lt;br /&gt;
&lt;br /&gt;
Urmatorul script ii cere utilizatorului numele si apoi asteapta introducerea acestuia de la tastatura. Utilizatorul introduce numele la tastatura (dupa scrierea numelui trebuie apasata tasta ENTER) si numele introdus prin intermediul tastaturii este memorat in variabila &amp;lt;b&amp;gt;fname&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #mcedit script.sh&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 #script pentru citirea numelui de la tastatura&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numele dumneavoastra va rog:&amp;quot;&lt;br /&gt;
 read fname&lt;br /&gt;
 echo &amp;quot;Buna $fname, ma bucur de cunostinta!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Rularea acestuia se va face in felul urmator:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Numele dumneavoastra va rog:&amp;lt;b&amp;gt;adrian&amp;lt;/b&amp;gt;&lt;br /&gt;
 Buna adrian, ma bucur de cunostinta!&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Meta caracterele (folosite pentru specificarea globala a numelui unui fisier)===&lt;br /&gt;
&lt;br /&gt;
Meta caracterul:&lt;br /&gt;
&lt;br /&gt;
 * - potriveste orice caracter sau grup de caractere&lt;br /&gt;
 ? - potriveste orice caracter dar numai unul&lt;br /&gt;
 [...] - inlocuieste doar cu caracterele aflate intre paranteze&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls /bin/[a-c]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin care incep cu litera a, b sau c&lt;br /&gt;
&lt;br /&gt;
 #ls /bin/[!a-f]*   sau   #ls /bin/[^a-f]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin cu exceptia celor care incep cu un caracter aflat in seria mentionata&lt;br /&gt;
&lt;br /&gt;
===Mai multe comenzi intr-o singura linie de comanda===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1; comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 #date; who&lt;br /&gt;
&lt;br /&gt;
Comanda de mai sus va afisa data de astazi urmata de userul cu care suntem logati. In exact acelasi scop poate fi folosita si urmatoarea linie de comanda:&lt;br /&gt;
&lt;br /&gt;
 #date who&lt;br /&gt;
&lt;br /&gt;
===Procesarea liniei de comanda===&lt;br /&gt;
&lt;br /&gt;
Incercati urmatoarea comanda (se presupune ca fisierul &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; nu exista pe sistemul dumneavoastra):&lt;br /&gt;
&lt;br /&gt;
 #ls script.sh&lt;br /&gt;
&lt;br /&gt;
Va fi afisat un mesaj asemanator cu urmatorul:&lt;br /&gt;
&lt;br /&gt;
 - script.sh: No such file or directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; este numele unei comenzi efective si shell-ul o executa in momentul in care aceasta este tastata la prompter. Acum ia nastere o alta intrebare &amp;lt;b&amp;gt;Ce sunt comenzile?&amp;lt;/b&amp;gt;. Ce se intampla cand tastam &amp;lt;b&amp;gt;#ls script.sh&amp;lt;/b&amp;gt;?&lt;br /&gt;
Primul cuvant al liniei de comanda este &amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; - numele comenzii ce urmeaza sa fie executata. Orice altceva pe acea linie este citit ca fiind un argument pentru comanda respectiva.&lt;br /&gt;
&lt;br /&gt;
 #tail +10 script.sh&lt;br /&gt;
&lt;br /&gt;
Numele comenzii este &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; iar &amp;lt;b&amp;gt;+10&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; sunt considerate argumente ale acestei comenzi.&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; detine numarul de argumente specificate in linia de comanda. Iar &amp;lt;b&amp;gt;$*&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;$@&amp;lt;/b&amp;gt; se refera la toate argumentele date scriptului.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare argumentele in linia de comanda===&lt;br /&gt;
&lt;br /&gt;
1. Pentru a spune comenzii sau utilitarului ce optiuni sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
2. Pentru a informa comanda sau utilitarul ce fisier sau grup de fisiere sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
Sa luam de exemplu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; care este folosita pentru stergerea unui fisier, dar cum ii vom spune noi acestei comenzi ce fisier sa stearga (ea nu ne va intreba ce fisier dorim sa stergem). Ceea ce vom face este sa rulam comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #rm {numele fisierului}&lt;br /&gt;
&lt;br /&gt;
In acest exemplu &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; este comanda iar &amp;lt;b&amp;gt;numele-fisierului&amp;lt;/b&amp;gt; este fisierul pe care dorim sa il stergem. In acest mod ii precizam explicit comenzii &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; ce fisier sa stearga. Astfel noi comunicam cu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; specificand numele fisierului. De asemenea pot fi transmise prin intermediul liniei de comanda anumite argumente scriptului pe care il rulam.&lt;br /&gt;
&lt;br /&gt;
In cazul scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
 #script.sh unu doi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; este numele scriptului rulat&lt;br /&gt;
&amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt; reprezinta primul argument trecut scriptului prin intermediul liniei de comanda&lt;br /&gt;
&amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt; reprezinta cel de-al doilea argument.&lt;br /&gt;
&lt;br /&gt;
In cadrul scriptului nostru, daca dorim sa ne referim la aceste argumente o vom face in felul urmator:&lt;br /&gt;
&amp;lt;b&amp;gt;$0&amp;lt;/b&amp;gt; reprezinta numele scriptului&lt;br /&gt;
&amp;lt;b&amp;gt;$1&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$2&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In acest exemplu variabila predefinita &amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; deoarece au fost introduse doar doua argumente scriptului nostru. Trebuie notat faptul ca la un moment dat pot fi folosite un numar de maxim 9 argumente notate de la $1 la $9. Notatiile $1...$9 reprezinta parametrii de pozitie.&lt;br /&gt;
Urmatorul script va fi folosit pentru afisarea si prelucrarea argumentelor liniei de comanda:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 #folosirea argumentelor&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numarul de argumente din linia de comanda este de $#&amp;quot;&lt;br /&gt;
 echo &amp;quot;$0 este numele scriptului&amp;quot;&lt;br /&gt;
 echo &amp;quot;$1 reprezinta primul argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;$2 reprezinta cel de al doilea argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;toate argumentele sunt: $* sau $@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pentru rulare se vor folosi comenzile:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Nota&amp;lt;/b&amp;gt;&lt;br /&gt;
Nu se pot atribui alte valori parametrilor de pozitie in cadrul scriptului.&lt;br /&gt;
&lt;br /&gt;
Urmatoarele declaratii sunt invalide:&lt;br /&gt;
&lt;br /&gt;
 $1 = doi&lt;br /&gt;
 $2 = unu&lt;br /&gt;
&lt;br /&gt;
===Redirectarea intrarilor si iesirilor standard===&lt;br /&gt;
&lt;br /&gt;
In cea mai mare parte comenzile au iesirile spre monitor iar intrarile sunt luate de la tastatura, dar in Linux, ca si in alte sisteme de operare, se pot trimite iesirile catre fisiere sau de asemenea citirea intrarilor din fisiere.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #ls&lt;br /&gt;
&lt;br /&gt;
comanda de mai sus afiseaza rezultatul pe monitor. Pentru directionarea rezultatului intr-un fisier va fi folosita comanda:&lt;br /&gt;
&lt;br /&gt;
 #ls &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Exista trei mari simboluri de redirectare:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;, &amp;gt;&amp;gt; si &amp;lt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Rezultatul rularii comenzii respective va fi trimis catre fisier. Trebuie mentionat faptul ca daca fisierul in care este trimis rezultatul nu exista, atunci acesta este creat iar daca exista, continutul acestuia va fi inlocuit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt;&amp;gt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Daca fisierul nu exista atunci el este creat iar daca exista, continutul rezultat in urma rularii comenzii va fi pus la sfarsitul fisierului fara a se pierde nimic din informatia continuta initial in fisier.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;lt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Acest simbol este folosit pentru preluarea informatiilor necesare rularii comenzii nu din tastatura ci din fisierul respectiv.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #cat &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
De asemenea pot fi folosite mai multe simboluri de redirectare in aceeasi linie de comanda, la fel ca in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 #cat &amp;gt; source_name&lt;br /&gt;
 alina&lt;br /&gt;
 linux&lt;br /&gt;
 daniel&lt;br /&gt;
 mele&lt;br /&gt;
 #sort &amp;lt; source_name &amp;gt; sorted_name&lt;br /&gt;
 #cat sorted_name&lt;br /&gt;
 alina&lt;br /&gt;
 daniel&lt;br /&gt;
 linux&lt;br /&gt;
 mele&lt;br /&gt;
&lt;br /&gt;
In exemplul anterior comanda sort a preluat datele de intrare din fisierul source_name iar rezultatul a fost redirectat catre fisierul sorted_name.&lt;br /&gt;
Un alt exemplu ar putea fi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tr &amp;quot;[a-z]&amp;quot; &amp;quot;[A-Z]&amp;quot; &amp;lt; sorce_name &amp;gt; majuscule_name&lt;br /&gt;
 #cat majuscule_name&lt;br /&gt;
 ALINA&lt;br /&gt;
 DANIEL&lt;br /&gt;
 LINUX&lt;br /&gt;
 MELE&lt;br /&gt;
&lt;br /&gt;
Comanda &amp;lt;b&amp;gt;tr&amp;lt;/b&amp;gt; a fost folosita aici pentru transformarea minusculelor in majuscule dupa care rezultatul a fost scris in fisierul &amp;lt;i&amp;gt;majuscule_name&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Semnul PIPE===&lt;br /&gt;
&lt;br /&gt;
Acesta reprezinta modalitatea de conectare a iesirii unei comenzi de intrarea unei alte comenzi fara folosirea unui fisier temporar. Acestea sunt folosite pentru rularea a doua sau mai multe comenzi in aceeasi linie de comanda.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1 | comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #who | sort&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda va returna o lista a utilizatorilor logati pe masina respectiva intr-o ordine sortata.&lt;br /&gt;
&lt;br /&gt;
 #who | wc -l&lt;br /&gt;
&lt;br /&gt;
Va returna numarul de useri total logati in sistem.&lt;br /&gt;
&lt;br /&gt;
 #who | grep root&lt;br /&gt;
&lt;br /&gt;
Va returna doar logarile cu userul root.&lt;br /&gt;
&lt;br /&gt;
===Filtrele===&lt;br /&gt;
&lt;br /&gt;
Daca in linux o comanda isi accepta intrarea din intrarea standard si rezultatul acesteia este o iesire standard atunci comanda respectiva este cunoscuta sub numele de filtru. Ca exemplu presupunem ca avem fisierul &amp;lt;i&amp;gt;nume.txt&amp;lt;/i&amp;gt; care contine 100 de linii si din acesta am dori sa scoatem liniile de la 20 la 30 iar rezultatul sa il punem in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Pentru aceasta vom folosi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tail +20 &amp;lt; nume.txt |head -n 30 &amp;gt; flist&lt;br /&gt;
&lt;br /&gt;
In acest comanda &amp;lt;b&amp;gt;head&amp;lt;/b&amp;gt; este un filtru deoarece intrarea acesteia este preluata din rezultatul comenzii &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; si rezultatul acesteia este directionat in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Un alt exemplu il reprezinta comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #sort &amp;lt; snume | uniq &amp;gt; u_snume&lt;br /&gt;
&lt;br /&gt;
===Ce sunt procesele===&lt;br /&gt;
&lt;br /&gt;
Procesul este un fel de program sau sarcina pentru calculatorul nostru. Un exemplu ar putea fi:&lt;br /&gt;
&lt;br /&gt;
 #ps fax&lt;br /&gt;
&lt;br /&gt;
Aici apare o lista a tuturor proceselor de pe sistemul nostru in momentul de fata. Fiecarui proces in linux ii este asociat un PID sau process-id format dintr-un numar care ia valori intre 0 si 65535.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare procesele===&lt;br /&gt;
&lt;br /&gt;
Dupa cum se stie linuxul este un sistem de operare pe care poate rula mai mult de o singura sarcina la un moment dat daca se doreste acest lucru.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls / -R | wc -l&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda va afisa numarul total de fisiere existe pe sistemul dumneavoastra, doar ca ii va lua o anumita perioada de timp sa faca acest lucru. Pentru a nu fi nevoiti sa asteptam finalizarea comenzii curente si abia apoi sa putem executa o noua comanda, se poate rula comanda curenta in background. Acest lucru se poate face in felul urmator.&lt;br /&gt;
&lt;br /&gt;
 #ls / R | wc -l &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Se observa folosirea caracterului ampersand (&amp;amp;) la finalul comenzii, avand ca efect executarea comenzii in background si oferindu-ne imediat posibilitatea de executie a unei noi comenzi.&lt;br /&gt;
&lt;br /&gt;
===Comenzi linux referitoare la procese===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ps&amp;lt;/b&amp;gt; - pentru afisarea proceselor care ruleaza in momentul respectiv&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;kill {PID}&amp;lt;/b&amp;gt; - pentru oprirea procesului identificat prin pid-ul din cadrul comenzii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;killall {numele-procesului}&amp;lt;/b&amp;gt; - pentru oprirea procesului cu numele respectiv.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt; atentie sa nu dati kill procesului &amp;lt;b&amp;gt;sshd.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;ps -ag&amp;lt;/b&amp;gt; - pentru aflarea de informatii despre toate procesele care ruleaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;kill 0&amp;lt;/b&amp;gt; - pentru oprirea tuturor proceselor cu exceptia propriei conexiuni pe sistem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ps aux&amp;lt;/b&amp;gt; - pentru afisarea proceselor si o lista a userilor carora apartin aceste procese&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;top&amp;lt;/b&amp;gt; - pentru obtinerea unei liste a proceselor cu utilizarea memoriei si a procesorului de catre acestea, cu update in timp real&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;pstree&amp;lt;/b&amp;gt; - pentru obtinerea unei structuri arborescente a proceselor&lt;br /&gt;
&lt;br /&gt;
==Constructii in programarea structurata BASH shell==&lt;br /&gt;
&lt;br /&gt;
===Introducere===&lt;br /&gt;
&lt;br /&gt;
Luarea deciziilor este foarte importanta atat in viata de zi cu zi cat si in programarea calculatoarelor. Acest capitol face o scurta introducere in constructiile programarii bash, cum ar fi:&lt;br /&gt;
&lt;br /&gt;
* Luarea deciziilor&lt;br /&gt;
* Cicluri&lt;br /&gt;
&lt;br /&gt;
Exista diferente intre luarea deciziilor in viata de zi cu zi fata de deciziile pe care le iau calculatoarele? Deciziile sunt complicate pentru noi, oamenii, pe cand tot ceea ce intelege un calculator este sub forma de 0 (zero) si 1 care reprezinta Da sau Nu. Pentru a putea intelege toate acestea vom folosi in continuare &amp;lt;b&amp;gt;bc&amp;lt;/b&amp;gt; - Calculator pentru linux.&lt;br /&gt;
&lt;br /&gt;
 #bc&lt;br /&gt;
&lt;br /&gt;
Dupa pornirea acestui program bc este pornit si asteapta introducerea comenzilor de la tastatura. Daca vom tasta &amp;lt;b&amp;gt;5 + 2&amp;lt;/b&amp;gt; vom observa:&lt;br /&gt;
&lt;br /&gt;
 #5 + 2&lt;br /&gt;
 #7&lt;br /&gt;
&lt;br /&gt;
7 este raspunsul pe care l-am primit de la acest program, adica rezultatul adunarii dintre 5 si 2. Puteti incerca in continuare:&lt;br /&gt;
&lt;br /&gt;
 #5 - 2&lt;br /&gt;
 #5 / 2&lt;br /&gt;
 #5 &amp;gt; 2&lt;br /&gt;
&lt;br /&gt;
Vom observa ca rezultatul ultimei operatii va fi 1. bc compara cele doua valori si daca raspunsul este afirmativ (YES) ne va afisa valoarea 1. Puteti incerca acum:&lt;br /&gt;
&lt;br /&gt;
 #5 &amp;lt; 2&lt;br /&gt;
 #0&lt;br /&gt;
&lt;br /&gt;
0 indica faptul ca valoarea expresiei de mai sus este falsa. Pentru a ne clarifica mai bine raspunsurile date de acest program, pute incerca comparatiile de mai jos:&lt;br /&gt;
&lt;br /&gt;
 #5 &amp;gt; 12&lt;br /&gt;
 #5 == 10&lt;br /&gt;
 #5 != 2&lt;br /&gt;
 #5 == 5&lt;br /&gt;
 #12 &amp;lt; 2&lt;br /&gt;
&lt;br /&gt;
===Conditia if===&lt;br /&gt;
&lt;br /&gt;
Conditia if este folosita pentru luarea deciziilor in scripturile shell, daca valoarea conditiei este 1 sau YES atunci comanda este executata.&lt;br /&gt;
&lt;br /&gt;
 Syntax:&lt;br /&gt;
 &lt;br /&gt;
 if condition&lt;br /&gt;
    then&lt;br /&gt;
        command1 if condition is true or if exit status&lt;br /&gt;
        of condition is 0 (zero)&lt;br /&gt;
        ...&lt;br /&gt;
        ...&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
O definitie a conditiei ar putea fi urmatoare:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;quot;Conditia nu este decat o simpla comparatie intre doua valori&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expresia poate fi definita astfel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;quot;O expresie este o combinatie de valori, operatori relationali (cum ar fi &amp;gt;, &amp;lt;, &amp;lt;&amp;gt; etc.) si operatori matematici (cum ar fi +, -, / etc.)&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In continuare sunt prezentate cateva exemple de expresii:&lt;br /&gt;
&lt;br /&gt;
 5 &amp;gt; 2&lt;br /&gt;
 3 + 6&lt;br /&gt;
 3 * 65&lt;br /&gt;
 a &amp;lt; b&lt;br /&gt;
 c &amp;gt; 5&lt;br /&gt;
 c &amp;gt; 5 + 30 -1&lt;br /&gt;
&lt;br /&gt;
Tastati urmatoare comenzi, presupunand ca exista fisierul numit &amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #cat file&lt;br /&gt;
 #echo $?&lt;br /&gt;
&lt;br /&gt;
Comanda cat returneaza starea de exit 0, daca a fost executata cu succes, iar aceasta poate fi folosita in cazul conditiei if dupa cum se poate vedea in scriptul urmator:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; fisier&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 #Script pentru printarea fisierul&lt;br /&gt;
 #&lt;br /&gt;
 if cat $1&lt;br /&gt;
 then&lt;br /&gt;
 echo -e &amp;quot;\n\nFisierul $1, a fost gasit si afisat cu succes...&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Rulati scriptul de mai sus dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # chmod 755 fisier&lt;br /&gt;
 # ./fisier file&lt;br /&gt;
&lt;br /&gt;
Numele scriptului este &amp;lt;b&amp;gt;fisier&amp;lt;/b&amp;gt; ($0) si &amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt; este argumentul (care este $1). &lt;br /&gt;
&lt;br /&gt;
Explicatii detaliate:&lt;br /&gt;
&lt;br /&gt;
Daca comanda &amp;lt;b&amp;gt;cat&amp;lt;/b&amp;gt; gaseste fisierul &amp;lt;b&amp;gt;file&amp;lt;/b&amp;gt; si il afiseaza pe ecran, inseamna ca aceasta comanda a fost executata cu succes si starea ei de exit este 0. Astfel conditia noastra if este de asemenea adevarata si declaratia &amp;lt;b&amp;gt;echo -e &amp;quot;\n\nFisierul $1, a fost gasit si afisat cu succes...&amp;quot;&amp;lt;/b&amp;gt; este executata cu succes. Daca comanda &amp;lt;b&amp;gt;cat&amp;lt;/b&amp;gt; nu este executata cu succes atunci valoarea starii de exit returnata de aceasta este diferita de zero si declaratia &amp;lt;b&amp;gt;echo -e &amp;quot;\n\nFisierul $1, a fost gasit si afisat cu succes...&amp;quot;&amp;lt;/b&amp;gt; nu este executata de catre shell.&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;test&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;[ expresie ]&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Comanda teste sau [ expresie ] este folosita pentru a vedea daca o expresie este adevarata, si daca aceasta este adevarata este returnata valoarea zero(0). Altfel, este returnat nonzero pentru fals.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 test expresie SAU [ expresie ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Exemplu&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Urmatorul script &amp;lt;b&amp;gt;ispositive&amp;lt;/b&amp;gt; verifica daca argumentul care ii este dat este pozitiv sau nu.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 # Script to see whether argument is positive&lt;br /&gt;
 #&lt;br /&gt;
 if test $1 -gt 0&lt;br /&gt;
 then&lt;br /&gt;
 echo &amp;quot;numarul $1 este pozitiv&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Se ruleaza in modul urmator:&lt;br /&gt;
&lt;br /&gt;
 # chmod 755 ispositive&lt;br /&gt;
 # ./ispositive 5&lt;br /&gt;
 numarul 5 este pozitiv&lt;br /&gt;
&lt;br /&gt;
 # ./ispositive -45&lt;br /&gt;
 Nu este afisat nimic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Test&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;[ expresie ]&amp;lt;/b&amp;gt; opereaza cu:&lt;br /&gt;
&lt;br /&gt;
 * Intregi (Numere fara punct zecimal)&lt;br /&gt;
 * Tipuri de fisiere&lt;br /&gt;
 * Caractere ale stringurilor&lt;br /&gt;
&lt;br /&gt;
Operatori matematici sunt urmatorii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-eq&amp;lt;/b&amp;gt; (este egal cu)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-ne&amp;lt;/b&amp;gt; (nu este egal cu)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-lt&amp;lt;/b&amp;gt; (mai mic decat)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-le&amp;lt;/b&amp;gt; (mai mic sau egal decat)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-gt&amp;lt;/b&amp;gt; (mai mare decat)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-ge&amp;lt;/b&amp;gt; (mai mare sau egal decat)&lt;br /&gt;
&lt;br /&gt;
Operatori pentru stringuri:&lt;br /&gt;
&lt;br /&gt;
stringul1 &amp;lt;b&amp;gt;=&amp;lt;/b&amp;gt; stringul2 (stringul1 este egal cu stringul2)&lt;br /&gt;
&lt;br /&gt;
stringul1 &amp;lt;b&amp;gt;!=&amp;lt;/b&amp;gt; stringul2 (stringul1 nu este egal cu stringul 2)&lt;br /&gt;
&lt;br /&gt;
stringul1 (stringul1 este ne null sau nedefinit)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-n&amp;lt;/b&amp;gt; stringul1 (stringul1 este ne null si exista)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-z&amp;lt;/b&amp;gt; stringul1 (stringul1 este nul si exista)&lt;br /&gt;
&lt;br /&gt;
Pentru fisiere si directoare tipurile de operatori sunt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-s&amp;lt;/b&amp;gt; fisier (fisierul care nu este gol)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-f&amp;lt;/b&amp;gt; fisier (fisierul exista si nu este un director)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-d&amp;lt;/b&amp;gt; fisier (este director, exista si nu este fisier)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-w&amp;lt;/b&amp;gt; fisier (fisierul are drepturi de scriere)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-r&amp;lt;/b&amp;gt; fisier (fisierul are atributul doar de citire, read-only)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-x&amp;lt;/b&amp;gt; fisier (fisierul are atribut de executie)&lt;br /&gt;
&lt;br /&gt;
Operatorii logici sunt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;!&amp;lt;/b&amp;gt; expresie (logic NOT)&lt;br /&gt;
&lt;br /&gt;
expresie1 &amp;lt;b&amp;gt;-a&amp;lt;/b&amp;gt; expresie2 (logic AND)&lt;br /&gt;
&lt;br /&gt;
expresie1 &amp;lt;b&amp;gt;-o&amp;lt;/b&amp;gt; expresie2 (logic OR)&lt;br /&gt;
&lt;br /&gt;
===if...else...fi===&lt;br /&gt;
&lt;br /&gt;
Daca conditia data este adevarata atunci comanda1 este executata, altfel comanda2 este executata.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 if condition&lt;br /&gt;
 then&lt;br /&gt;
 	conditia este zero (adevarata - 0)&lt;br /&gt;
 	se vor executa toate comenzile pana la else&lt;br /&gt;
 else&lt;br /&gt;
 	daca conditia nu este adevarata&lt;br /&gt;
 	se executa toate comenzile pana la fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Spre exemplu, scrieti si rulati scriptul urmator: #mcedit este_poz.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 # Script pentru a observa daca argumentul este pozitiv sau negativ&lt;br /&gt;
 #&lt;br /&gt;
 if [ $# -eq 0 ]&lt;br /&gt;
 then&lt;br /&gt;
 echo &amp;quot;$0 : Trebuie sa introduceti un intreg&amp;quot;&lt;br /&gt;
 exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 if test $1 -gt 0&lt;br /&gt;
 then&lt;br /&gt;
 echo &amp;quot; $1 este un numar pozitiv&lt;br /&gt;
 else&lt;br /&gt;
 echo &amp;quot; $1 este un numar negativ&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Il puteti rula dupa cum urmeaza:&lt;br /&gt;
 #chmod +x este_poz.sh&lt;br /&gt;
 #./este_poz.sh 5&lt;br /&gt;
 5 este un numar pozitiv&lt;br /&gt;
&lt;br /&gt;
 #./este_poz&lt;br /&gt;
 ./este_poz : Trebuie sa introduceti un intreg&lt;br /&gt;
&lt;br /&gt;
 #./este_poz.sh -5&lt;br /&gt;
 -5 este un numar negativ&lt;br /&gt;
&lt;br /&gt;
Explicatii detaliate:&lt;br /&gt;
Prima parte a scriptului verifica daca argumentul este dat in linia de comanda, si daca acesta nu este dat afiseaza un mesaj de eroare. If-ul testeaza daca numarul de argumente este sau nu egal cu 0. Daca au fost date scriptului argumente in linia de comanda atunci declaratia din if devine falsa, iar daca a fost dat un argument scriptului, aceasta cpata valoarea de adevar true.&lt;br /&gt;
Mai jos se verifica daca argumentul, care acum exista este pozitiv sau negativ si se afiseaza un mesaj corespunzator.&lt;br /&gt;
&lt;br /&gt;
Se pot folosi de asemenea si if-uri grupate:&lt;br /&gt;
&lt;br /&gt;
 #mcedit if_grupat.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 os=0&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;1. Windows (XP)&amp;quot;&lt;br /&gt;
 echo &amp;quot;2. Linux (Debian)&amp;quot;&lt;br /&gt;
 echo -n &amp;quot;Alegeti sistemul preferat de operare [1 or 2]? &amp;quot;&lt;br /&gt;
 read os&lt;br /&gt;
 &lt;br /&gt;
 if [ $os -eq 1 ] ; then&lt;br /&gt;
 	echoo &amp;quot;Ai ales Windows (XP)&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
 	if [ $os -eq 2 ] ; then&lt;br /&gt;
 		echo &amp;quot;Ai ales Linux (Debian)&amp;quot;&lt;br /&gt;
 	else&lt;br /&gt;
 		echo &amp;quot;Astazi esti foarte nehotarat&amp;quot;&lt;br /&gt;
 	fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
 #chmod +x if_grupat.sh&lt;br /&gt;
&lt;br /&gt;
Se poate observa foarte bine in scriptul de mai sus folosirea grupata a if-ului.&lt;br /&gt;
&lt;br /&gt;
Sintaxa acestui tip de declaratie este urmatoarea:&lt;br /&gt;
&lt;br /&gt;
 if conditie&lt;br /&gt;
 then&lt;br /&gt;
 	if conditie&lt;br /&gt;
 	then&lt;br /&gt;
 		...&lt;br /&gt;
 		...&lt;br /&gt;
 		comenzi&lt;br /&gt;
 	else&lt;br /&gt;
 		...&lt;br /&gt;
 		...&lt;br /&gt;
 		comenzi&lt;br /&gt;
 	fi&lt;br /&gt;
 else&lt;br /&gt;
 	...&lt;br /&gt;
 	...&lt;br /&gt;
 	comenzi&lt;br /&gt;
 fi&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=1043</id>
		<title>Discuție:Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=1043"/>
				<updated>2006-09-01T11:53:28Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Despre acest articol */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Despre acest articol=&lt;br /&gt;
&lt;br /&gt;
este o  traducere? facuta de catre cine, dupa ce material? sau un articol original? scris de cine? cind? autor? data? in lucru? terminat?&lt;br /&gt;
:Este dupa toate indiciile un material original, majoritatea paginii fiind scrisa (in mici reprize raspandite in timp) de utilizatorul Xsimio, dar asta se vede si in pagina de istoric :) Dat fiind ca acesta este un wiki, nici o pagina nu se considera &amp;quot;terminata&amp;quot;, asa ca orice imbunatatiri sunt binevenite. [[Utilizator:Petre|Petre]] 1 Sep 2006 01:03 (EEST)&lt;br /&gt;
&lt;br /&gt;
este o documentatie scrisa in momentele in care imi permite si mie timpul, bazata pe structura unui tutorial in limba engleza, tutorial modificat in multe locuri folosindu-ma si de propria experienta dar si de alte surse. ma ajuta sa aprofundez eu insumi acest gen de programare, si sper sa fie de ajutor si altora, nu am gasit asa ceva scris in limba romana in format electronic. nu este inca terminat desi mi-as dori mult sa am mai mult timp pentru asa ceva.&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=1026</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=1026"/>
				<updated>2006-08-29T08:50:21Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatie:&lt;br /&gt;
&lt;br /&gt;
* in exemplul de mai jos executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folosind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; - tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' - tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` - sunt folosite pentru a executa comanda aflata intre acestea&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #echo &amp;quot;Astazi este data&amp;quot;&lt;br /&gt;
 #echo &amp;quot;Astazi este `date`&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Se observa ca in primul caz a fost afisat sirul de caractere &amp;quot;Astazi este data&amp;quot; iar in cel de-al doilea caz este afisata data de astazi.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b&amp;gt;Exit Status&amp;lt;/b&amp;gt; - Starea de exit===&lt;br /&gt;
&lt;br /&gt;
De obicei, in Linux, daca o anumita comanda sau script au fost executatate, ele returneaza doua tipuri de valori, care sunt folosite pentru a vedea daca comanda sau scriptul au fost executate corect sau nu.&lt;br /&gt;
&lt;br /&gt;
Daca valoarea returnata este 0 atunci comanda a fost executata cu succes iar daca valoarea returnata este diferita de 0 atunci a aparut o eroare in executarea comenzii sau a scriptului.&lt;br /&gt;
&lt;br /&gt;
Pentru a avea valoarea starii de exit, se foloseste variabila speciala $?. Urmatoarele exercitii sper sa va lamureasca in legatura cu folosirea acestei variabile speciale.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # expr 1 + 2&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echo Buna ziua&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # wildwest sunt_obosit?&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # date&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echon $?&lt;br /&gt;
 # echo $?&lt;br /&gt;
&lt;br /&gt;
===Declaratia de citire (&amp;lt;b&amp;gt;read&amp;lt;/b&amp;gt;)===&lt;br /&gt;
&lt;br /&gt;
Aceasta declaratie este folosita pentru preluarea datelor de la utilizator prin intermediul tastaturii si memorarea datelor in variabile.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 read variabila1, variabila2,... variabilaN&lt;br /&gt;
&lt;br /&gt;
Urmatorul script ii cere utilizatorului numele si apoi asteapta introducerea acestuia de la tastatura. Utilizatorul introduce numele la tastatura (dupa scrierea numelui trebuie apasata tasta ENTER) si numele introdus prin intermediul tastaturii este memorat in variabila &amp;lt;b&amp;gt;fname&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #mcedit script.sh&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 #script pentru citirea numelui de la tastatura&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numele dumneavoastra va rog:&amp;quot;&lt;br /&gt;
 read fname&lt;br /&gt;
 echo &amp;quot;Buna $fname, ma bucur de cunostinta!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Rularea acestuia se va face in felul urmator:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Numele dumneavoastra va rog:&amp;lt;b&amp;gt;adrian&amp;lt;/b&amp;gt;&lt;br /&gt;
 Buna adrian, ma bucur de cunostinta!&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Meta caracterele (folosite pentru specificarea globala a numelui unui fisier)===&lt;br /&gt;
&lt;br /&gt;
Meta caracterul:&lt;br /&gt;
&lt;br /&gt;
 * - potriveste orice caracter sau grup de caractere&lt;br /&gt;
 ? - potriveste orice caracter dar numai unul&lt;br /&gt;
 [...] - inlocuieste doar cu caracterele aflate intre paranteze&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls /bin/[a-c]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin care incep cu litera a, b sau c&lt;br /&gt;
&lt;br /&gt;
 #ls /bin/[!a-f]*   sau   #ls /bin/[^a-f]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin cu exceptia celor care incep cu un caracter aflat in seria mentionata&lt;br /&gt;
&lt;br /&gt;
===Mai multe comenzi intr-o singura linie de comanda===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1; comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 #date; who&lt;br /&gt;
&lt;br /&gt;
Comanda de mai sus va afisa data de astazi urmata de userul cu care suntem logati. In exact acelasi scop poate fi folosita si urmatoarea linie de comanda:&lt;br /&gt;
&lt;br /&gt;
 #date who&lt;br /&gt;
&lt;br /&gt;
===Procesarea liniei de comanda===&lt;br /&gt;
&lt;br /&gt;
Incercati urmatoarea comanda (se presupune ca fisierul &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; nu exista pe sistemul dumneavoastra):&lt;br /&gt;
&lt;br /&gt;
 #ls script.sh&lt;br /&gt;
&lt;br /&gt;
Va fi afisat un mesaj asemanator cu urmatorul:&lt;br /&gt;
&lt;br /&gt;
 - script.sh: No such file or directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; este numele unei comenzi efective si shell-ul o executa in momentul in care aceasta este tastata la prompter. Acum ia nastere o alta intrebare &amp;lt;b&amp;gt;Ce sunt comenzile?&amp;lt;/b&amp;gt;. Ce se intampla cand tastam &amp;lt;b&amp;gt;#ls script.sh&amp;lt;/b&amp;gt;?&lt;br /&gt;
Primul cuvant al liniei de comanda este &amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; - numele comenzii ce urmeaza sa fie executata. Orice altceva pe acea linie este citit ca fiind un argument pentru comanda respectiva.&lt;br /&gt;
&lt;br /&gt;
 #tail +10 script.sh&lt;br /&gt;
&lt;br /&gt;
Numele comenzii este &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; iar &amp;lt;b&amp;gt;+10&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; sunt considerate argumente ale acestei comenzi.&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; detine numarul de argumente specificate in linia de comanda. Iar &amp;lt;b&amp;gt;$*&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;$@&amp;lt;/b&amp;gt; se refera la toate argumentele date scriptului.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare argumentele in linia de comanda===&lt;br /&gt;
&lt;br /&gt;
1. Pentru a spune comenzii sau utilitarului ce optiuni sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
2. Pentru a informa comanda sau utilitarul ce fisier sau grup de fisiere sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
Sa luam de exemplu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; care este folosita pentru stergerea unui fisier, dar cum ii vom spune noi acestei comenzi ce fisier sa stearga (ea nu ne va intreba ce fisier dorim sa stergem). Ceea ce vom face este sa rulam comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #rm {numele fisierului}&lt;br /&gt;
&lt;br /&gt;
In acest exemplu &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; este comanda iar &amp;lt;b&amp;gt;numele-fisierului&amp;lt;/b&amp;gt; este fisierul pe care dorim sa il stergem. In acest mod ii precizam explicit comenzii &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; ce fisier sa stearga. Astfel noi comunicam cu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; specificand numele fisierului. De asemenea pot fi transmise prin intermediul liniei de comanda anumite argumente scriptului pe care il rulam.&lt;br /&gt;
&lt;br /&gt;
In cazul scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
 #script.sh unu doi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; este numele scriptului rulat&lt;br /&gt;
&amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt; reprezinta primul argument trecut scriptului prin intermediul liniei de comanda&lt;br /&gt;
&amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt; reprezinta cel de-al doilea argument.&lt;br /&gt;
&lt;br /&gt;
In cadrul scriptului nostru, daca dorim sa ne referim la aceste argumente o vom face in felul urmator:&lt;br /&gt;
&amp;lt;b&amp;gt;$0&amp;lt;/b&amp;gt; reprezinta numele scriptului&lt;br /&gt;
&amp;lt;b&amp;gt;$1&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$2&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In acest exemplu variabila predefinita &amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; deoarece au fost introduse doar doua argumente scriptului nostru. Trebuie notat faptul ca la un moment dat pot fi folosite un numar de maxim 9 argumente notate de la $1 la $9. Notatiile $1...$9 reprezinta parametrii de pozitie.&lt;br /&gt;
Urmatorul script va fi folosit pentru afisarea si prelucrarea argumentelor liniei de comanda:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 #folosirea argumentelor&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numarul de argumente din linia de comanda este de $#&amp;quot;&lt;br /&gt;
 echo &amp;quot;$0 este numele scriptului&amp;quot;&lt;br /&gt;
 echo &amp;quot;$1 reprezinta primul argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;$2 reprezinta cel de al doilea argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;toate argumentele sunt: $* sau $@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pentru rulare se vor folosi comenzile:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Nota&amp;lt;/b&amp;gt;&lt;br /&gt;
Nu se pot atribui alte valori parametrilor de pozitie in cadrul scriptului.&lt;br /&gt;
&lt;br /&gt;
Urmatoarele declaratii sunt invalide:&lt;br /&gt;
&lt;br /&gt;
 $1 = doi&lt;br /&gt;
 $2 = unu&lt;br /&gt;
&lt;br /&gt;
===Redirectarea intrarilor si iesirilor standard===&lt;br /&gt;
&lt;br /&gt;
In cea mai mare parte comenzile au iesirile spre monitor iar intrarile sunt luate de la tastatura, dar in Linux, ca si in alte sisteme de operare, se pot trimite iesirile catre fisiere sau de asemenea citirea intrarilor din fisiere.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #ls&lt;br /&gt;
&lt;br /&gt;
comanda de mai sus afiseaza rezultatul pe monitor. Pentru directionarea rezultatului intr-un fisier va fi folosita comanda:&lt;br /&gt;
&lt;br /&gt;
 #ls &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Exista trei mari simboluri de redirectare:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;, &amp;gt;&amp;gt; si &amp;lt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Rezultatul rularii comenzii respective va fi trimis catre fisier. Trebuie mentionat faptul ca daca fisierul in care este trimis rezultatul nu exista, atunci acesta este creat iar daca exista, continutul acestuia va fi inlocuit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt;&amp;gt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Daca fisierul nu exista atunci el este creat iar daca exista, continutul rezultat in urma rularii comenzii va fi pus la sfarsitul fisierului fara a se pierde nimic din informatia continuta initial in fisier.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;lt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Acest simbol este folosit pentru preluarea informatiilor necesare rularii comenzii nu din tastatura ci din fisierul respectiv.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #cat &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
De asemenea pot fi folosite mai multe simboluri de redirectare in aceeasi linie de comanda, la fel ca in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 #cat &amp;gt; source_name&lt;br /&gt;
 alina&lt;br /&gt;
 linux&lt;br /&gt;
 daniel&lt;br /&gt;
 mele&lt;br /&gt;
 #sort &amp;lt; source_name &amp;gt; sorted_name&lt;br /&gt;
 #cat sorted_name&lt;br /&gt;
 alina&lt;br /&gt;
 daniel&lt;br /&gt;
 linux&lt;br /&gt;
 mele&lt;br /&gt;
&lt;br /&gt;
In exemplul anterior comanda sort a preluat datele de intrare din fisierul source_name iar rezultatul a fost redirectat catre fisierul sorted_name.&lt;br /&gt;
Un alt exemplu ar putea fi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tr &amp;quot;[a-z]&amp;quot; &amp;quot;[A-Z]&amp;quot; &amp;lt; sorce_name &amp;gt; majuscule_name&lt;br /&gt;
 #cat majuscule_name&lt;br /&gt;
 ALINA&lt;br /&gt;
 DANIEL&lt;br /&gt;
 LINUX&lt;br /&gt;
 MELE&lt;br /&gt;
&lt;br /&gt;
Comanda &amp;lt;b&amp;gt;tr&amp;lt;/b&amp;gt; a fost folosita aici pentru transformarea minusculelor in majuscule dupa care rezultatul a fost scris in fisierul &amp;lt;i&amp;gt;majuscule_name&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Semnul PIPE===&lt;br /&gt;
&lt;br /&gt;
Acesta reprezinta modalitatea de conectare a iesirii unei comenzi de intrarea unei alte comenzi fara folosirea unui fisier temporar. Acestea sunt folosite pentru rularea a doua sau mai multe comenzi in aceeasi linie de comanda.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1 | comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #who | sort&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda va returna o lista a utilizatorilor logati pe masina respectiva intr-o ordine sortata.&lt;br /&gt;
&lt;br /&gt;
 #who | wc -l&lt;br /&gt;
&lt;br /&gt;
Va returna numarul de useri total logati in sistem.&lt;br /&gt;
&lt;br /&gt;
 #who | grep root&lt;br /&gt;
&lt;br /&gt;
Va returna doar logarile cu userul root.&lt;br /&gt;
&lt;br /&gt;
===Filtrele===&lt;br /&gt;
&lt;br /&gt;
Daca in linux o comanda isi accepta intrarea din intrarea standard si rezultatul acesteia este o iesire standard atunci comanda respectiva este cunoscuta sub numele de filtru. Ca exemplu presupunem ca avem fisierul &amp;lt;i&amp;gt;nume.txt&amp;lt;/i&amp;gt; care contine 100 de linii si din acesta am dori sa scoatem liniile de la 20 la 30 iar rezultatul sa il punem in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Pentru aceasta vom folosi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tail +20 &amp;lt; nume.txt |head -n 30 &amp;gt; flist&lt;br /&gt;
&lt;br /&gt;
In acest comanda &amp;lt;b&amp;gt;head&amp;lt;/b&amp;gt; este un filtru deoarece intrarea acesteia este preluata din rezultatul comenzii &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; si rezultatul acesteia este directionat in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Un alt exemplu il reprezinta comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #sort &amp;lt; snume | uniq &amp;gt; u_snume&lt;br /&gt;
&lt;br /&gt;
===Ce sunt procesele===&lt;br /&gt;
&lt;br /&gt;
Procesul este un fel de program sau sarcina pentru calculatorul nostru. Un exemplu ar putea fi:&lt;br /&gt;
&lt;br /&gt;
 #ps fax&lt;br /&gt;
&lt;br /&gt;
Aici apare o lista a tuturor proceselor de pe sistemul nostru in momentul de fata. Fiecarui proces in linux ii este asociat un PID sau process-id format dintr-un numar care ia valori intre 0 si 65535.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare procesele===&lt;br /&gt;
&lt;br /&gt;
Dupa cum se stie linuxul este un sistem de operare pe care poate rula mai mult de o singura sarcina la un moment dat daca se doreste acest lucru.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls / -R | wc -l&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda va afisa numarul total de fisiere existe pe sistemul dumneavoastra, doar ca ii va lua o anumita perioada de timp sa faca acest lucru. Pentru a nu fi nevoiti sa asteptam finalizarea comenzii curente si abia apoi sa putem executa o noua comanda, se poate rula comanda curenta in background. Acest lucru se poate face in felul urmator.&lt;br /&gt;
&lt;br /&gt;
 #ls / R | wc -l &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Se observa folosirea caracterului ampersand (&amp;amp;) la finalul comenzii, avand ca efect executarea comenzii in background si oferindu-ne imediat posibilitatea de executie a unei noi comenzi.&lt;br /&gt;
&lt;br /&gt;
===Comenzi linux referitoare la procese===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ps&amp;lt;/b&amp;gt; - pentru afisarea proceselor care ruleaza in momentul respectiv&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;kill {PID}&amp;lt;/b&amp;gt; - pentru oprirea procesului identificat prin pid-ul din cadrul comenzii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;killall {numele-procesului}&amp;lt;/b&amp;gt; - pentru oprirea procesului cu numele respectiv.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt; atentie sa nu dati kill procesului &amp;lt;b&amp;gt;sshd.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;ps -ag&amp;lt;/b&amp;gt; - pentru aflarea de informatii despre toate procesele care ruleaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;kill 0&amp;lt;/b&amp;gt; - pentru oprirea tuturor proceselor cu exceptia propriei conexiuni pe sistem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ps aux&amp;lt;/b&amp;gt; - pentru afisarea proceselor si o lista a userilor carora apartin aceste procese&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;top&amp;lt;/b&amp;gt; - pentru obtinerea unei liste a proceselor cu utilizarea memoriei si a procesorului de catre acestea, cu update in timp real&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;pstree&amp;lt;/b&amp;gt; - pentru obtinerea unei structuri arborescente a proceselor&lt;br /&gt;
&lt;br /&gt;
==Constructii in programarea structurata BASH shell==&lt;br /&gt;
&lt;br /&gt;
===Introducere===&lt;br /&gt;
&lt;br /&gt;
Luarea deciziilor este foarte importanta atat in viata de zi cu zi cat si in programarea calculatoarelor. Acest capitol face o scurta introducere in constructiile programarii bash, cum ar fi:&lt;br /&gt;
&lt;br /&gt;
* Luarea deciziilor&lt;br /&gt;
* Cicluri&lt;br /&gt;
&lt;br /&gt;
Exista diferente intre luarea deciziilor in viata de zi cu zi fata de deciziile pe care le iau calculatoarele? Deciziile sunt complicate pentru noi, oamenii, pe cand tot ceea ce intelege un calculator este sub forma de 0 (zero) si 1 care reprezinta Da sau Nu. Pentru a putea intelege toate acestea vom folosi in continuare &amp;lt;b&amp;gt;bc&amp;lt;/b&amp;gt; - Calculator pentru linux.&lt;br /&gt;
&lt;br /&gt;
 #bc&lt;br /&gt;
&lt;br /&gt;
Dupa pornirea acestui program bc este pornit si asteapta introducerea comenzilor de la tastatura. Daca vom tasta &amp;lt;b&amp;gt;5 + 2&amp;lt;/b&amp;gt; vom observa:&lt;br /&gt;
&lt;br /&gt;
 #5 + 2&lt;br /&gt;
 #7&lt;br /&gt;
&lt;br /&gt;
7 este raspunsul pe care l-am primit de la acest program, adica rezultatul adunarii dintre 5 si 2. Puteti incerca in continuare:&lt;br /&gt;
&lt;br /&gt;
 #5 - 2&lt;br /&gt;
 #5 / 2&lt;br /&gt;
 #5 &amp;gt; 2&lt;br /&gt;
&lt;br /&gt;
Vom observa ca rezultatul ultimei operatii va fi 1. bc compara cele doua valori si daca raspunsul este afirmativ (YES) ne va afisa valoarea 1. Puteti incerca acum:&lt;br /&gt;
&lt;br /&gt;
 #5 &amp;lt; 2&lt;br /&gt;
 #0&lt;br /&gt;
&lt;br /&gt;
0 indica faptul ca valoarea expresiei de mai sus este falsa. Pentru a ne clarifica mai bine raspunsurile date de acest program, pute incerca comparatiile de mai jos:&lt;br /&gt;
&lt;br /&gt;
 #5 &amp;gt; 12&lt;br /&gt;
 #5 == 10&lt;br /&gt;
 #5 != 2&lt;br /&gt;
 #5 == 5&lt;br /&gt;
 #12 &amp;lt; 2&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Categorie:Utilizatori_Debian&amp;diff=2403</id>
		<title>Categorie:Utilizatori Debian</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Categorie:Utilizatori_Debian&amp;diff=2403"/>
				<updated>2006-07-22T13:00:21Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Categorie:Utilizatori după distribuţie]]&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Format:User_Debian&amp;diff=2402</id>
		<title>Format:User Debian</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Format:User_Debian&amp;diff=2402"/>
				<updated>2006-07-22T12:59:17Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{cutie utilizator|#C90035|#fff|deb|Acest utilizator foloseşte&amp;lt;br /&amp;gt; '''[[Debian]]'''[[Categorie:Utilizatori Debian|{{PAGENAME}}]]}}&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Utilizator:Xsimio&amp;diff=2342</id>
		<title>Utilizator:Xsimio</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Utilizator:Xsimio&amp;diff=2342"/>
				<updated>2006-07-22T12:53:31Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right&amp;quot;&amp;gt;{{User Debian}}&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Utilizator:Xsimio&amp;diff=982</id>
		<title>Utilizator:Xsimio</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Utilizator:Xsimio&amp;diff=982"/>
				<updated>2006-07-22T10:52:37Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Xandros&amp;diff=1003</id>
		<title>Xandros</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Xandros&amp;diff=1003"/>
				<updated>2006-07-22T10:44:39Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;b&amp;gt;Xandros&amp;lt;/b&amp;gt; este o companie care produce distributii de Linux. El este creatorul asa zisului &amp;lt;b&amp;gt;Xandros Desktop&amp;lt;/b&amp;gt; (o distributie de linux), aceasta fiind focalizata pe mediul business si utilizarea acesteia de catre incepatori, fiind foarte similara cu &amp;lt;b&amp;gt;Windows XP&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Fondata in 2001, compania isi are sediile principale in &amp;lt;i&amp;gt;New York&amp;lt;/i&amp;gt; si &amp;lt;i&amp;gt;Ottawa, Ontario&amp;lt;/i&amp;gt;. Distributiile lor sunt bazate pe &amp;lt;b&amp;gt;Corel Linux&amp;lt;/b&amp;gt;, o distributie bazata pe Debian care a fost luata de la Corel Corporation in acelasi an in care Corel s-a decis sa paraseasca piata distributiilor de Linux. &amp;lt;b&amp;gt;Xandros&amp;lt;/b&amp;gt; este de asemenea un membru fondator al &amp;lt;b&amp;gt;Desktop Linux Consortium&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Cea mai recenta versiune de &amp;lt;b&amp;gt;Xandros&amp;lt;/b&amp;gt; dateaza din 21 Iulie 2006, si este versiunea 4.0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Xandros Server&amp;lt;/b&amp;gt; reprezinta de asemenea un produs &amp;lt;Xandros&amp;lt;/b&amp;gt; dedicat serverelor.&lt;br /&gt;
&lt;br /&gt;
Numele de &amp;lt;b&amp;gt;Xandros&amp;lt;/b&amp;gt; este derivat din mediul &amp;lt;b&amp;gt;X&amp;lt;/b&amp;gt; al sistemelor &amp;lt;b&amp;gt;Windows&amp;lt;/b&amp;gt; si din numele insulei grecesti &amp;lt;b&amp;gt;Andros&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Produse==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Xandros&amp;lt;/b&amp;gt; lanseaza produse atat pentru piata de afaceri cat si pentru utilizator individual. Pentru mai multe informatii poate fi vizitat site-ul [http://www.xandros.com/products/desktop_matrix.html Xandros Desktop Comparison Matrix]&lt;br /&gt;
&lt;br /&gt;
===Editii comerciale===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Xandros Desktop Home Edition&amp;lt;/b&amp;gt; vine cu un soft pentru scrierea discurilor CD/DVD si cu un &amp;lt;i&amp;gt;30-day trial&amp;lt;/i&amp;gt; al editie de office &amp;lt;B&amp;gt;Crossover Office&amp;lt;/b&amp;gt;.De asemenea include si un cd de aplicatii ce contine diverse aplicatii care pot di instalate prin intermediul &amp;lt;i&amp;gt;retelelor Xandros&amp;lt;/i&amp;gt;. In opozitie cu &amp;lt;b&amp;gt;Home Edition Premium&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Home Edition&amp;lt;/b&amp;gt; nu include managerul de fotografii, muzica, suita legata de securitate, parte de wireless si posibilitatea de a scrie pe partitii NTFS.&lt;br /&gt;
&lt;br /&gt;
===Editii Free===&lt;br /&gt;
&lt;br /&gt;
===Editii discontinue===&lt;br /&gt;
&lt;br /&gt;
===Sisteme dedicate serverelor===&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Xandros&amp;diff=980</id>
		<title>Xandros</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Xandros&amp;diff=980"/>
				<updated>2006-07-22T10:31:01Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;b&amp;gt;Xandros&amp;lt;/b&amp;gt; este o companie care produce distributii de Linux. El este creatorul asa zisului &amp;lt;b&amp;gt;Xandros Desktop&amp;lt;/b&amp;gt; (o distributie de linux), aceasta fiind focalizata pe mediul business si utilizarea acesteia de catre incepatori, fiind foarte similara cu &amp;lt;b&amp;gt;Windows XP&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Fondata in 2001, compania isi are sediile principale in &amp;lt;i&amp;gt;New York&amp;lt;/i&amp;gt; si &amp;lt;i&amp;gt;Ottawa, Ontario&amp;lt;/i&amp;gt;. Distributiile lor sunt bazate pe &amp;lt;b&amp;gt;Corel Linux&amp;lt;/b&amp;gt;, o distributie bazata pe Debian care a fost luata de la Corel Corporation in acelasi an in care Corel s-a decis sa paraseasca piata distributiilor de Linux. &amp;lt;b&amp;gt;Xandros&amp;lt;/b&amp;gt; este de asemenea un membru fondator al &amp;lt;b&amp;gt;Desktop Linux Consortium&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Cea mai recenta versiune de &amp;lt;b&amp;gt;Xandros&amp;lt;/b&amp;gt; dateaza din 21 Iulie 2006, si este versiunea 4.0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Xandros Server&amp;lt;/b&amp;gt; reprezinta de asemenea un produs &amp;lt;Xandros&amp;lt;/b&amp;gt; dedicat serverelor.&lt;br /&gt;
&lt;br /&gt;
Numele de &amp;lt;b&amp;gt;Xandros&amp;lt;/b&amp;gt; este derivat din mediul &amp;lt;b&amp;gt;X&amp;lt;/b&amp;gt; al sistemelor &amp;lt;b&amp;gt;Windows&amp;lt;/b&amp;gt; si din numele insulei grecesti &amp;lt;b&amp;gt;Andros&amp;lt;/b&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=1025</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=1025"/>
				<updated>2006-07-20T18:40:06Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Comenzi linux referitoare la procese */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatie:&lt;br /&gt;
&lt;br /&gt;
* in exemplul de mai jos executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folosind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; - tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' - tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` - sunt folosite pentru a executa comanda aflata intre acestea&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #echo &amp;quot;Astazi este data&amp;quot;&lt;br /&gt;
 #echo &amp;quot;Astazi este `date`&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Se observa ca in primul caz a fost afisat sirul de caractere &amp;quot;Astazi este data&amp;quot; iar in cel de-al doilea caz este afisata data de astazi.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b&amp;gt;Exit Status&amp;lt;/b&amp;gt; - Starea de exit===&lt;br /&gt;
&lt;br /&gt;
De obicei, in Linux, daca o anumita comanda sau script au fost executatate, ele returneaza doua tipuri de valori, care sunt folosite pentru a vedea daca comanda sau scriptul au fost executate corect sau nu.&lt;br /&gt;
&lt;br /&gt;
Daca valoarea returnata este 0 atunci comanda a fost executata cu succes iar daca valoarea returnata este diferita de 0 atunci a aparut o eroare in executarea comenzii sau a scriptului.&lt;br /&gt;
&lt;br /&gt;
Pentru a avea valoarea starii de exit, se foloseste variabila speciala $?. Urmatoarele exercitii sper sa va lamureasca in legatura cu folosirea acestei variabile speciale.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # expr 1 + 2&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echo Buna ziua&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # wildwest sunt_obosit?&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # date&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echon $?&lt;br /&gt;
 # echo $?&lt;br /&gt;
&lt;br /&gt;
===Declaratia de citire (&amp;lt;b&amp;gt;read&amp;lt;/b&amp;gt;)===&lt;br /&gt;
&lt;br /&gt;
Aceasta declaratie este folosita pentru preluarea datelor de la utilizator prin intermediul tastaturii si memorarea datelor in variabile.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 read variabila1, variabila2,... variabilaN&lt;br /&gt;
&lt;br /&gt;
Urmatorul script ii cere utilizatorului numele si apoi asteapta introducerea acestuia de la tastatura. Utilizatorul introduce numele la tastatura (dupa scrierea numelui trebuie apasata tasta ENTER) si numele introdus prin intermediul tastaturii este memorat in variabila &amp;lt;b&amp;gt;fname&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #mcedit script.sh&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 #script pentru citirea numelui de la tastatura&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numele dumneavoastra va rog:&amp;quot;&lt;br /&gt;
 read fname&lt;br /&gt;
 echo &amp;quot;Buna $fname, ma bucur de cunostinta!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Rularea acestuia se va face in felul urmator:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Numele dumneavoastra va rog:&amp;lt;b&amp;gt;adrian&amp;lt;/b&amp;gt;&lt;br /&gt;
 Buna adrian, ma bucur de cunostinta!&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Meta caracterele (folosite pentru specificarea globala a numelui unui fisier)===&lt;br /&gt;
&lt;br /&gt;
Meta caracterul:&lt;br /&gt;
&lt;br /&gt;
 * - potriveste orice caracter sau grup de caractere&lt;br /&gt;
 ? - potriveste orice caracter dar numai unul&lt;br /&gt;
 [...] - inlocuieste doar cu caracterele aflate intre paranteze&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls /bin/[a-c]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin care incep cu litera a, b sau c&lt;br /&gt;
&lt;br /&gt;
 #ls /bin/[!a-f]*   sau   #ls /bin/[^a-f]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin cu exceptia celor care incep cu un caracter aflat in seria mentionata&lt;br /&gt;
&lt;br /&gt;
===Mai multe comenzi intr-o singura linie de comanda===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1; comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 #date; who&lt;br /&gt;
&lt;br /&gt;
Comanda de mai sus va afisa data de astazi urmata de userul cu care suntem logati. In exact acelasi scop poate fi folosita si urmatoarea linie de comanda:&lt;br /&gt;
&lt;br /&gt;
 #date who&lt;br /&gt;
&lt;br /&gt;
===Procesarea liniei de comanda===&lt;br /&gt;
&lt;br /&gt;
Incercati urmatoarea comanda (se presupune ca fisierul &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; nu exista pe sistemul dumneavoastra):&lt;br /&gt;
&lt;br /&gt;
 #ls script.sh&lt;br /&gt;
&lt;br /&gt;
Va fi afisat un mesaj asemanator cu urmatorul:&lt;br /&gt;
&lt;br /&gt;
 - script.sh: No such file or directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; este numele unei comenzi efective si shell-ul o executa in momentul in care aceasta este tastata la prompter. Acum ia nastere o alta intrebare &amp;lt;b&amp;gt;Ce sunt comenzile?&amp;lt;/b&amp;gt;. Ce se intampla cand tastam &amp;lt;b&amp;gt;#ls script.sh&amp;lt;/b&amp;gt;?&lt;br /&gt;
Primul cuvant al liniei de comanda este &amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; - numele comenzii ce urmeaza sa fie executata. Orice altceva pe acea linie este citit ca fiind un argument pentru comanda respectiva.&lt;br /&gt;
&lt;br /&gt;
 #tail +10 script.sh&lt;br /&gt;
&lt;br /&gt;
Numele comenzii este &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; iar &amp;lt;b&amp;gt;+10&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; sunt considerate argumente ale acestei comenzi.&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; detine numarul de argumente specificate in linia de comanda. Iar &amp;lt;b&amp;gt;$*&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;$@&amp;lt;/b&amp;gt; se refera la toate argumentele date scriptului.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare argumentele in linia de comanda===&lt;br /&gt;
&lt;br /&gt;
1. Pentru a spune comenzii sau utilitarului ce optiuni sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
2. Pentru a informa comanda sau utilitarul ce fisier sau grup de fisiere sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
Sa luam de exemplu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; care este folosita pentru stergerea unui fisier, dar cum ii vom spune noi acestei comenzi ce fisier sa stearga (ea nu ne va intreba ce fisier dorim sa stergem). Ceea ce vom face este sa rulam comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #rm {numele fisierului}&lt;br /&gt;
&lt;br /&gt;
In acest exemplu &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; este comanda iar &amp;lt;b&amp;gt;numele-fisierului&amp;lt;/b&amp;gt; este fisierul pe care dorim sa il stergem. In acest mod ii precizam explicit comenzii &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; ce fisier sa stearga. Astfel noi comunicam cu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; specificand numele fisierului. De asemenea pot fi transmise prin intermediul liniei de comanda anumite argumente scriptului pe care il rulam.&lt;br /&gt;
&lt;br /&gt;
In cazul scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
 #script.sh unu doi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; este numele scriptului rulat&lt;br /&gt;
&amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt; reprezinta primul argument trecut scriptului prin intermediul liniei de comanda&lt;br /&gt;
&amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt; reprezinta cel de-al doilea argument.&lt;br /&gt;
&lt;br /&gt;
In cadrul scriptului nostru, daca dorim sa ne referim la aceste argumente o vom face in felul urmator:&lt;br /&gt;
&amp;lt;b&amp;gt;$0&amp;lt;/b&amp;gt; reprezinta numele scriptului&lt;br /&gt;
&amp;lt;b&amp;gt;$1&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$2&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In acest exemplu variabila predefinita &amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; deoarece au fost introduse doar doua argumente scriptului nostru. Trebuie notat faptul ca la un moment dat pot fi folosite un numar de maxim 9 argumente notate de la $1 la $9. Notatiile $1...$9 reprezinta parametrii de pozitie.&lt;br /&gt;
Urmatorul script va fi folosit pentru afisarea si prelucrarea argumentelor liniei de comanda:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 #folosirea argumentelor&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numarul de argumente din linia de comanda este de $#&amp;quot;&lt;br /&gt;
 echo &amp;quot;$0 este numele scriptului&amp;quot;&lt;br /&gt;
 echo &amp;quot;$1 reprezinta primul argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;$2 reprezinta cel de al doilea argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;toate argumentele sunt: $* sau $@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pentru rulare se vor folosi comenzile:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Nota&amp;lt;/b&amp;gt;&lt;br /&gt;
Nu se pot atribui alte valori parametrilor de pozitie in cadrul scriptului.&lt;br /&gt;
&lt;br /&gt;
Urmatoarele declaratii sunt invalide:&lt;br /&gt;
&lt;br /&gt;
 $1 = doi&lt;br /&gt;
 $2 = unu&lt;br /&gt;
&lt;br /&gt;
===Redirectarea intrarilor si iesirilor standard===&lt;br /&gt;
&lt;br /&gt;
In cea mai mare parte comenzile au iesirile spre monitor iar intrarile sunt luate de la tastatura, dar in Linux, ca si in alte sisteme de operare, se pot trimite iesirile catre fisiere sau de asemenea citirea intrarilor din fisiere.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #ls&lt;br /&gt;
&lt;br /&gt;
comanda de mai sus afiseaza rezultatul pe monitor. Pentru directionarea rezultatului intr-un fisier va fi folosita comanda:&lt;br /&gt;
&lt;br /&gt;
 #ls &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Exista trei mari simboluri de redirectare:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;, &amp;gt;&amp;gt; si &amp;lt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Rezultatul rularii comenzii respective va fi trimis catre fisier. Trebuie mentionat faptul ca daca fisierul in care este trimis rezultatul nu exista, atunci acesta este creat iar daca exista, continutul acestuia va fi inlocuit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt;&amp;gt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Daca fisierul nu exista atunci el este creat iar daca exista, continutul rezultat in urma rularii comenzii va fi pus la sfarsitul fisierului fara a se pierde nimic din informatia continuta initial in fisier.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;lt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Acest simbol este folosit pentru preluarea informatiilor necesare rularii comenzii nu din tastatura ci din fisierul respectiv.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #cat &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
De asemenea pot fi folosite mai multe simboluri de redirectare in aceeasi linie de comanda, la fel ca in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 #cat &amp;gt; source_name&lt;br /&gt;
 alina&lt;br /&gt;
 linux&lt;br /&gt;
 daniel&lt;br /&gt;
 mele&lt;br /&gt;
 #sort &amp;lt; source_name &amp;gt; sorted_name&lt;br /&gt;
 #cat sorted_name&lt;br /&gt;
 alina&lt;br /&gt;
 daniel&lt;br /&gt;
 linux&lt;br /&gt;
 mele&lt;br /&gt;
&lt;br /&gt;
In exemplul anterior comanda sort a preluat datele de intrare din fisierul source_name iar rezultatul a fost redirectat catre fisierul sorted_name.&lt;br /&gt;
Un alt exemplu ar putea fi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tr &amp;quot;[a-z]&amp;quot; &amp;quot;[A-Z]&amp;quot; &amp;lt; sorce_name &amp;gt; majuscule_name&lt;br /&gt;
 #cat majuscule_name&lt;br /&gt;
 ALINA&lt;br /&gt;
 DANIEL&lt;br /&gt;
 LINUX&lt;br /&gt;
 MELE&lt;br /&gt;
&lt;br /&gt;
Comanda &amp;lt;b&amp;gt;tr&amp;lt;/b&amp;gt; a fost folosita aici pentru transformarea minusculelor in majuscule dupa care rezultatul a fost scris in fisierul &amp;lt;i&amp;gt;majuscule_name&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Semnul PIPE===&lt;br /&gt;
&lt;br /&gt;
Acesta reprezinta modalitatea de conectare a iesirii unei comenzi de intrarea unei alte comenzi fara folosirea unui fisier temporar. Acestea sunt folosite pentru rularea a doua sau mai multe comenzi in aceeasi linie de comanda.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1 | comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #who | sort&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda va returna o lista a utilizatorilor logati pe masina respectiva intr-o ordine sortata.&lt;br /&gt;
&lt;br /&gt;
 #who | wc -l&lt;br /&gt;
&lt;br /&gt;
Va returna numarul de useri total logati in sistem.&lt;br /&gt;
&lt;br /&gt;
 #who | grep root&lt;br /&gt;
&lt;br /&gt;
Va returna doar logarile cu userul root.&lt;br /&gt;
&lt;br /&gt;
===Filtrele===&lt;br /&gt;
&lt;br /&gt;
Daca in linux o comanda isi accepta intrarea din intrarea standard si rezultatul acesteia este o iesire standard atunci comanda respectiva este cunoscuta sub numele de filtru. Ca exemplu presupunem ca avem fisierul &amp;lt;i&amp;gt;nume.txt&amp;lt;/i&amp;gt; care contine 100 de linii si din acesta am dori sa scoatem liniile de la 20 la 30 iar rezultatul sa il punem in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Pentru aceasta vom folosi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tail +20 &amp;lt; nume.txt |head -n 30 &amp;gt; flist&lt;br /&gt;
&lt;br /&gt;
In acest comanda &amp;lt;b&amp;gt;head&amp;lt;/b&amp;gt; este un filtru deoarece intrarea acesteia este preluata din rezultatul comenzii &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; si rezultatul acesteia este directionat in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Un alt exemplu il reprezinta comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #sort &amp;lt; snume | uniq &amp;gt; u_snume&lt;br /&gt;
&lt;br /&gt;
===Ce sunt procesele===&lt;br /&gt;
&lt;br /&gt;
Procesul este un fel de program sau sarcina pentru calculatorul nostru. Un exemplu ar putea fi:&lt;br /&gt;
&lt;br /&gt;
 #ps fax&lt;br /&gt;
&lt;br /&gt;
Aici apare o lista a tuturor proceselor de pe sistemul nostru in momentul de fata. Fiecarui proces in linux ii este asociat un PID sau process-id format dintr-un numar care ia valori intre 0 si 65535.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare procesele===&lt;br /&gt;
&lt;br /&gt;
Dupa cum se stie linuxul este un sistem de operare pe care poate rula mai mult de o singura sarcina la un moment dat daca se doreste acest lucru.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls / -R | wc -l&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda va afisa numarul total de fisiere existe pe sistemul dumneavoastra, doar ca ii va lua o anumita perioada de timp sa faca acest lucru. Pentru a nu fi nevoiti sa asteptam finalizarea comenzii curente si abia apoi sa putem executa o noua comanda, se poate rula comanda curenta in background. Acest lucru se poate face in felul urmator.&lt;br /&gt;
&lt;br /&gt;
 #ls / R | wc -l &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Se observa folosirea caracterului ampersand (&amp;amp;) la finalul comenzii, avand ca efect executarea comenzii in background si oferindu-ne imediat posibilitatea de executie a unei noi comenzi.&lt;br /&gt;
&lt;br /&gt;
===Comenzi linux referitoare la procese===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ps&amp;lt;/b&amp;gt; - pentru afisarea proceselor care ruleaza in momentul respectiv&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;kill {PID}&amp;lt;/b&amp;gt; - pentru oprirea procesului identificat prin pid-ul din cadrul comenzii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;killall {numele-procesului}&amp;lt;/b&amp;gt; - pentru oprirea procesului cu numele respectiv.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt; atentie sa nu dati kill procesului &amp;lt;b&amp;gt;sshd.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;ps -ag&amp;lt;/b&amp;gt; - pentru aflarea de informatii despre toate procesele care ruleaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;kill 0&amp;lt;/b&amp;gt; - pentru oprirea tuturor proceselor cu exceptia propriei conexiuni pe sistem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ps aux&amp;lt;/b&amp;gt; - pentru afisarea proceselor si o lista a userilor carora apartin aceste procese&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;top&amp;lt;/b&amp;gt; - pentru obtinerea unei liste a proceselor cu utilizarea memoriei si a procesorului de catre acestea, cu update in timp real&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;pstree&amp;lt;/b&amp;gt; - pentru obtinerea unei structuri arborescente a proceselor&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=979</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=979"/>
				<updated>2006-07-20T18:38:44Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Comenzi linux referitoare la procese */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatie:&lt;br /&gt;
&lt;br /&gt;
* in exemplul de mai jos executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folosind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; - tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' - tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` - sunt folosite pentru a executa comanda aflata intre acestea&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #echo &amp;quot;Astazi este data&amp;quot;&lt;br /&gt;
 #echo &amp;quot;Astazi este `date`&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Se observa ca in primul caz a fost afisat sirul de caractere &amp;quot;Astazi este data&amp;quot; iar in cel de-al doilea caz este afisata data de astazi.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b&amp;gt;Exit Status&amp;lt;/b&amp;gt; - Starea de exit===&lt;br /&gt;
&lt;br /&gt;
De obicei, in Linux, daca o anumita comanda sau script au fost executatate, ele returneaza doua tipuri de valori, care sunt folosite pentru a vedea daca comanda sau scriptul au fost executate corect sau nu.&lt;br /&gt;
&lt;br /&gt;
Daca valoarea returnata este 0 atunci comanda a fost executata cu succes iar daca valoarea returnata este diferita de 0 atunci a aparut o eroare in executarea comenzii sau a scriptului.&lt;br /&gt;
&lt;br /&gt;
Pentru a avea valoarea starii de exit, se foloseste variabila speciala $?. Urmatoarele exercitii sper sa va lamureasca in legatura cu folosirea acestei variabile speciale.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # expr 1 + 2&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echo Buna ziua&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # wildwest sunt_obosit?&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # date&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echon $?&lt;br /&gt;
 # echo $?&lt;br /&gt;
&lt;br /&gt;
===Declaratia de citire (&amp;lt;b&amp;gt;read&amp;lt;/b&amp;gt;)===&lt;br /&gt;
&lt;br /&gt;
Aceasta declaratie este folosita pentru preluarea datelor de la utilizator prin intermediul tastaturii si memorarea datelor in variabile.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 read variabila1, variabila2,... variabilaN&lt;br /&gt;
&lt;br /&gt;
Urmatorul script ii cere utilizatorului numele si apoi asteapta introducerea acestuia de la tastatura. Utilizatorul introduce numele la tastatura (dupa scrierea numelui trebuie apasata tasta ENTER) si numele introdus prin intermediul tastaturii este memorat in variabila &amp;lt;b&amp;gt;fname&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #mcedit script.sh&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 #script pentru citirea numelui de la tastatura&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numele dumneavoastra va rog:&amp;quot;&lt;br /&gt;
 read fname&lt;br /&gt;
 echo &amp;quot;Buna $fname, ma bucur de cunostinta!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Rularea acestuia se va face in felul urmator:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Numele dumneavoastra va rog:&amp;lt;b&amp;gt;adrian&amp;lt;/b&amp;gt;&lt;br /&gt;
 Buna adrian, ma bucur de cunostinta!&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Meta caracterele (folosite pentru specificarea globala a numelui unui fisier)===&lt;br /&gt;
&lt;br /&gt;
Meta caracterul:&lt;br /&gt;
&lt;br /&gt;
 * - potriveste orice caracter sau grup de caractere&lt;br /&gt;
 ? - potriveste orice caracter dar numai unul&lt;br /&gt;
 [...] - inlocuieste doar cu caracterele aflate intre paranteze&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls /bin/[a-c]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin care incep cu litera a, b sau c&lt;br /&gt;
&lt;br /&gt;
 #ls /bin/[!a-f]*   sau   #ls /bin/[^a-f]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin cu exceptia celor care incep cu un caracter aflat in seria mentionata&lt;br /&gt;
&lt;br /&gt;
===Mai multe comenzi intr-o singura linie de comanda===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1; comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 #date; who&lt;br /&gt;
&lt;br /&gt;
Comanda de mai sus va afisa data de astazi urmata de userul cu care suntem logati. In exact acelasi scop poate fi folosita si urmatoarea linie de comanda:&lt;br /&gt;
&lt;br /&gt;
 #date who&lt;br /&gt;
&lt;br /&gt;
===Procesarea liniei de comanda===&lt;br /&gt;
&lt;br /&gt;
Incercati urmatoarea comanda (se presupune ca fisierul &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; nu exista pe sistemul dumneavoastra):&lt;br /&gt;
&lt;br /&gt;
 #ls script.sh&lt;br /&gt;
&lt;br /&gt;
Va fi afisat un mesaj asemanator cu urmatorul:&lt;br /&gt;
&lt;br /&gt;
 - script.sh: No such file or directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; este numele unei comenzi efective si shell-ul o executa in momentul in care aceasta este tastata la prompter. Acum ia nastere o alta intrebare &amp;lt;b&amp;gt;Ce sunt comenzile?&amp;lt;/b&amp;gt;. Ce se intampla cand tastam &amp;lt;b&amp;gt;#ls script.sh&amp;lt;/b&amp;gt;?&lt;br /&gt;
Primul cuvant al liniei de comanda este &amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; - numele comenzii ce urmeaza sa fie executata. Orice altceva pe acea linie este citit ca fiind un argument pentru comanda respectiva.&lt;br /&gt;
&lt;br /&gt;
 #tail +10 script.sh&lt;br /&gt;
&lt;br /&gt;
Numele comenzii este &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; iar &amp;lt;b&amp;gt;+10&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; sunt considerate argumente ale acestei comenzi.&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; detine numarul de argumente specificate in linia de comanda. Iar &amp;lt;b&amp;gt;$*&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;$@&amp;lt;/b&amp;gt; se refera la toate argumentele date scriptului.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare argumentele in linia de comanda===&lt;br /&gt;
&lt;br /&gt;
1. Pentru a spune comenzii sau utilitarului ce optiuni sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
2. Pentru a informa comanda sau utilitarul ce fisier sau grup de fisiere sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
Sa luam de exemplu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; care este folosita pentru stergerea unui fisier, dar cum ii vom spune noi acestei comenzi ce fisier sa stearga (ea nu ne va intreba ce fisier dorim sa stergem). Ceea ce vom face este sa rulam comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #rm {numele fisierului}&lt;br /&gt;
&lt;br /&gt;
In acest exemplu &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; este comanda iar &amp;lt;b&amp;gt;numele-fisierului&amp;lt;/b&amp;gt; este fisierul pe care dorim sa il stergem. In acest mod ii precizam explicit comenzii &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; ce fisier sa stearga. Astfel noi comunicam cu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; specificand numele fisierului. De asemenea pot fi transmise prin intermediul liniei de comanda anumite argumente scriptului pe care il rulam.&lt;br /&gt;
&lt;br /&gt;
In cazul scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
 #script.sh unu doi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; este numele scriptului rulat&lt;br /&gt;
&amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt; reprezinta primul argument trecut scriptului prin intermediul liniei de comanda&lt;br /&gt;
&amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt; reprezinta cel de-al doilea argument.&lt;br /&gt;
&lt;br /&gt;
In cadrul scriptului nostru, daca dorim sa ne referim la aceste argumente o vom face in felul urmator:&lt;br /&gt;
&amp;lt;b&amp;gt;$0&amp;lt;/b&amp;gt; reprezinta numele scriptului&lt;br /&gt;
&amp;lt;b&amp;gt;$1&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$2&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In acest exemplu variabila predefinita &amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; deoarece au fost introduse doar doua argumente scriptului nostru. Trebuie notat faptul ca la un moment dat pot fi folosite un numar de maxim 9 argumente notate de la $1 la $9. Notatiile $1...$9 reprezinta parametrii de pozitie.&lt;br /&gt;
Urmatorul script va fi folosit pentru afisarea si prelucrarea argumentelor liniei de comanda:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 #folosirea argumentelor&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numarul de argumente din linia de comanda este de $#&amp;quot;&lt;br /&gt;
 echo &amp;quot;$0 este numele scriptului&amp;quot;&lt;br /&gt;
 echo &amp;quot;$1 reprezinta primul argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;$2 reprezinta cel de al doilea argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;toate argumentele sunt: $* sau $@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pentru rulare se vor folosi comenzile:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Nota&amp;lt;/b&amp;gt;&lt;br /&gt;
Nu se pot atribui alte valori parametrilor de pozitie in cadrul scriptului.&lt;br /&gt;
&lt;br /&gt;
Urmatoarele declaratii sunt invalide:&lt;br /&gt;
&lt;br /&gt;
 $1 = doi&lt;br /&gt;
 $2 = unu&lt;br /&gt;
&lt;br /&gt;
===Redirectarea intrarilor si iesirilor standard===&lt;br /&gt;
&lt;br /&gt;
In cea mai mare parte comenzile au iesirile spre monitor iar intrarile sunt luate de la tastatura, dar in Linux, ca si in alte sisteme de operare, se pot trimite iesirile catre fisiere sau de asemenea citirea intrarilor din fisiere.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #ls&lt;br /&gt;
&lt;br /&gt;
comanda de mai sus afiseaza rezultatul pe monitor. Pentru directionarea rezultatului intr-un fisier va fi folosita comanda:&lt;br /&gt;
&lt;br /&gt;
 #ls &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Exista trei mari simboluri de redirectare:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;, &amp;gt;&amp;gt; si &amp;lt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Rezultatul rularii comenzii respective va fi trimis catre fisier. Trebuie mentionat faptul ca daca fisierul in care este trimis rezultatul nu exista, atunci acesta este creat iar daca exista, continutul acestuia va fi inlocuit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt;&amp;gt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Daca fisierul nu exista atunci el este creat iar daca exista, continutul rezultat in urma rularii comenzii va fi pus la sfarsitul fisierului fara a se pierde nimic din informatia continuta initial in fisier.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;lt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Acest simbol este folosit pentru preluarea informatiilor necesare rularii comenzii nu din tastatura ci din fisierul respectiv.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #cat &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
De asemenea pot fi folosite mai multe simboluri de redirectare in aceeasi linie de comanda, la fel ca in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 #cat &amp;gt; source_name&lt;br /&gt;
 alina&lt;br /&gt;
 linux&lt;br /&gt;
 daniel&lt;br /&gt;
 mele&lt;br /&gt;
 #sort &amp;lt; source_name &amp;gt; sorted_name&lt;br /&gt;
 #cat sorted_name&lt;br /&gt;
 alina&lt;br /&gt;
 daniel&lt;br /&gt;
 linux&lt;br /&gt;
 mele&lt;br /&gt;
&lt;br /&gt;
In exemplul anterior comanda sort a preluat datele de intrare din fisierul source_name iar rezultatul a fost redirectat catre fisierul sorted_name.&lt;br /&gt;
Un alt exemplu ar putea fi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tr &amp;quot;[a-z]&amp;quot; &amp;quot;[A-Z]&amp;quot; &amp;lt; sorce_name &amp;gt; majuscule_name&lt;br /&gt;
 #cat majuscule_name&lt;br /&gt;
 ALINA&lt;br /&gt;
 DANIEL&lt;br /&gt;
 LINUX&lt;br /&gt;
 MELE&lt;br /&gt;
&lt;br /&gt;
Comanda &amp;lt;b&amp;gt;tr&amp;lt;/b&amp;gt; a fost folosita aici pentru transformarea minusculelor in majuscule dupa care rezultatul a fost scris in fisierul &amp;lt;i&amp;gt;majuscule_name&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Semnul PIPE===&lt;br /&gt;
&lt;br /&gt;
Acesta reprezinta modalitatea de conectare a iesirii unei comenzi de intrarea unei alte comenzi fara folosirea unui fisier temporar. Acestea sunt folosite pentru rularea a doua sau mai multe comenzi in aceeasi linie de comanda.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1 | comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #who | sort&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda va returna o lista a utilizatorilor logati pe masina respectiva intr-o ordine sortata.&lt;br /&gt;
&lt;br /&gt;
 #who | wc -l&lt;br /&gt;
&lt;br /&gt;
Va returna numarul de useri total logati in sistem.&lt;br /&gt;
&lt;br /&gt;
 #who | grep root&lt;br /&gt;
&lt;br /&gt;
Va returna doar logarile cu userul root.&lt;br /&gt;
&lt;br /&gt;
===Filtrele===&lt;br /&gt;
&lt;br /&gt;
Daca in linux o comanda isi accepta intrarea din intrarea standard si rezultatul acesteia este o iesire standard atunci comanda respectiva este cunoscuta sub numele de filtru. Ca exemplu presupunem ca avem fisierul &amp;lt;i&amp;gt;nume.txt&amp;lt;/i&amp;gt; care contine 100 de linii si din acesta am dori sa scoatem liniile de la 20 la 30 iar rezultatul sa il punem in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Pentru aceasta vom folosi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tail +20 &amp;lt; nume.txt |head -n 30 &amp;gt; flist&lt;br /&gt;
&lt;br /&gt;
In acest comanda &amp;lt;b&amp;gt;head&amp;lt;/b&amp;gt; este un filtru deoarece intrarea acesteia este preluata din rezultatul comenzii &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; si rezultatul acesteia este directionat in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Un alt exemplu il reprezinta comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #sort &amp;lt; snume | uniq &amp;gt; u_snume&lt;br /&gt;
&lt;br /&gt;
===Ce sunt procesele===&lt;br /&gt;
&lt;br /&gt;
Procesul este un fel de program sau sarcina pentru calculatorul nostru. Un exemplu ar putea fi:&lt;br /&gt;
&lt;br /&gt;
 #ps fax&lt;br /&gt;
&lt;br /&gt;
Aici apare o lista a tuturor proceselor de pe sistemul nostru in momentul de fata. Fiecarui proces in linux ii este asociat un PID sau process-id format dintr-un numar care ia valori intre 0 si 65535.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare procesele===&lt;br /&gt;
&lt;br /&gt;
Dupa cum se stie linuxul este un sistem de operare pe care poate rula mai mult de o singura sarcina la un moment dat daca se doreste acest lucru.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls / -R | wc -l&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda va afisa numarul total de fisiere existe pe sistemul dumneavoastra, doar ca ii va lua o anumita perioada de timp sa faca acest lucru. Pentru a nu fi nevoiti sa asteptam finalizarea comenzii curente si abia apoi sa putem executa o noua comanda, se poate rula comanda curenta in background. Acest lucru se poate face in felul urmator.&lt;br /&gt;
&lt;br /&gt;
 #ls / R | wc -l &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Se observa folosirea caracterului ampersand (&amp;amp;) la finalul comenzii, avand ca efect executarea comenzii in background si oferindu-ne imediat posibilitatea de executie a unei noi comenzi.&lt;br /&gt;
&lt;br /&gt;
===Comenzi linux referitoare la procese===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ps&amp;lt;/b&amp;gt; - pentru afisarea proceselor care ruleaza in momentul respectiv&lt;br /&gt;
&amp;lt;b&amp;gt;kill {PID}&amp;lt;/b&amp;gt; - pentru oprirea procesului identificat prin pid-ul din cadrul comenzii&lt;br /&gt;
&amp;lt;b&amp;gt;killall {numele-procesului} - pentru oprirea procesului cu numele respectiv. &amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt; atentie sa nu dati kill procesului &amp;lt;b&amp;gt;sshd.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;ps -ag&amp;lt;/b&amp;gt; - pentru aflarea de informatii despre toate procesele care ruleaza&lt;br /&gt;
&amp;lt;b&amp;gt;kill 0&amp;lt;/b&amp;gt; - pentru oprirea tuturor proceselor cu exceptia propriei conexiuni pe sistem&lt;br /&gt;
&amp;lt;b&amp;gt;ps aux&amp;lt;/b&amp;gt; - pentru afisarea proceselor si o lista a userilor carora apartin aceste procese&lt;br /&gt;
&amp;lt;b&amp;gt;top&amp;lt;/b&amp;gt; - pentru obtinerea unei liste a proceselor cu utilizarea memoriei si a procesorului de catre acestea, cu update in timp real&lt;br /&gt;
&amp;lt;b&amp;gt;pstree&amp;lt;/b&amp;gt; - pentru obtinerea unei structuri arborescente a proceselor&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=978</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=978"/>
				<updated>2006-07-20T18:32:55Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Bazele programarii Shell (bash) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatie:&lt;br /&gt;
&lt;br /&gt;
* in exemplul de mai jos executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folosind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; - tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' - tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` - sunt folosite pentru a executa comanda aflata intre acestea&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #echo &amp;quot;Astazi este data&amp;quot;&lt;br /&gt;
 #echo &amp;quot;Astazi este `date`&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Se observa ca in primul caz a fost afisat sirul de caractere &amp;quot;Astazi este data&amp;quot; iar in cel de-al doilea caz este afisata data de astazi.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b&amp;gt;Exit Status&amp;lt;/b&amp;gt; - Starea de exit===&lt;br /&gt;
&lt;br /&gt;
De obicei, in Linux, daca o anumita comanda sau script au fost executatate, ele returneaza doua tipuri de valori, care sunt folosite pentru a vedea daca comanda sau scriptul au fost executate corect sau nu.&lt;br /&gt;
&lt;br /&gt;
Daca valoarea returnata este 0 atunci comanda a fost executata cu succes iar daca valoarea returnata este diferita de 0 atunci a aparut o eroare in executarea comenzii sau a scriptului.&lt;br /&gt;
&lt;br /&gt;
Pentru a avea valoarea starii de exit, se foloseste variabila speciala $?. Urmatoarele exercitii sper sa va lamureasca in legatura cu folosirea acestei variabile speciale.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # expr 1 + 2&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echo Buna ziua&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # wildwest sunt_obosit?&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # date&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echon $?&lt;br /&gt;
 # echo $?&lt;br /&gt;
&lt;br /&gt;
===Declaratia de citire (&amp;lt;b&amp;gt;read&amp;lt;/b&amp;gt;)===&lt;br /&gt;
&lt;br /&gt;
Aceasta declaratie este folosita pentru preluarea datelor de la utilizator prin intermediul tastaturii si memorarea datelor in variabile.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 read variabila1, variabila2,... variabilaN&lt;br /&gt;
&lt;br /&gt;
Urmatorul script ii cere utilizatorului numele si apoi asteapta introducerea acestuia de la tastatura. Utilizatorul introduce numele la tastatura (dupa scrierea numelui trebuie apasata tasta ENTER) si numele introdus prin intermediul tastaturii este memorat in variabila &amp;lt;b&amp;gt;fname&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #mcedit script.sh&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 #script pentru citirea numelui de la tastatura&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numele dumneavoastra va rog:&amp;quot;&lt;br /&gt;
 read fname&lt;br /&gt;
 echo &amp;quot;Buna $fname, ma bucur de cunostinta!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Rularea acestuia se va face in felul urmator:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Numele dumneavoastra va rog:&amp;lt;b&amp;gt;adrian&amp;lt;/b&amp;gt;&lt;br /&gt;
 Buna adrian, ma bucur de cunostinta!&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Meta caracterele (folosite pentru specificarea globala a numelui unui fisier)===&lt;br /&gt;
&lt;br /&gt;
Meta caracterul:&lt;br /&gt;
&lt;br /&gt;
 * - potriveste orice caracter sau grup de caractere&lt;br /&gt;
 ? - potriveste orice caracter dar numai unul&lt;br /&gt;
 [...] - inlocuieste doar cu caracterele aflate intre paranteze&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls /bin/[a-c]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin care incep cu litera a, b sau c&lt;br /&gt;
&lt;br /&gt;
 #ls /bin/[!a-f]*   sau   #ls /bin/[^a-f]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin cu exceptia celor care incep cu un caracter aflat in seria mentionata&lt;br /&gt;
&lt;br /&gt;
===Mai multe comenzi intr-o singura linie de comanda===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1; comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 #date; who&lt;br /&gt;
&lt;br /&gt;
Comanda de mai sus va afisa data de astazi urmata de userul cu care suntem logati. In exact acelasi scop poate fi folosita si urmatoarea linie de comanda:&lt;br /&gt;
&lt;br /&gt;
 #date who&lt;br /&gt;
&lt;br /&gt;
===Procesarea liniei de comanda===&lt;br /&gt;
&lt;br /&gt;
Incercati urmatoarea comanda (se presupune ca fisierul &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; nu exista pe sistemul dumneavoastra):&lt;br /&gt;
&lt;br /&gt;
 #ls script.sh&lt;br /&gt;
&lt;br /&gt;
Va fi afisat un mesaj asemanator cu urmatorul:&lt;br /&gt;
&lt;br /&gt;
 - script.sh: No such file or directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; este numele unei comenzi efective si shell-ul o executa in momentul in care aceasta este tastata la prompter. Acum ia nastere o alta intrebare &amp;lt;b&amp;gt;Ce sunt comenzile?&amp;lt;/b&amp;gt;. Ce se intampla cand tastam &amp;lt;b&amp;gt;#ls script.sh&amp;lt;/b&amp;gt;?&lt;br /&gt;
Primul cuvant al liniei de comanda este &amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; - numele comenzii ce urmeaza sa fie executata. Orice altceva pe acea linie este citit ca fiind un argument pentru comanda respectiva.&lt;br /&gt;
&lt;br /&gt;
 #tail +10 script.sh&lt;br /&gt;
&lt;br /&gt;
Numele comenzii este &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; iar &amp;lt;b&amp;gt;+10&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; sunt considerate argumente ale acestei comenzi.&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; detine numarul de argumente specificate in linia de comanda. Iar &amp;lt;b&amp;gt;$*&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;$@&amp;lt;/b&amp;gt; se refera la toate argumentele date scriptului.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare argumentele in linia de comanda===&lt;br /&gt;
&lt;br /&gt;
1. Pentru a spune comenzii sau utilitarului ce optiuni sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
2. Pentru a informa comanda sau utilitarul ce fisier sau grup de fisiere sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
Sa luam de exemplu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; care este folosita pentru stergerea unui fisier, dar cum ii vom spune noi acestei comenzi ce fisier sa stearga (ea nu ne va intreba ce fisier dorim sa stergem). Ceea ce vom face este sa rulam comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #rm {numele fisierului}&lt;br /&gt;
&lt;br /&gt;
In acest exemplu &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; este comanda iar &amp;lt;b&amp;gt;numele-fisierului&amp;lt;/b&amp;gt; este fisierul pe care dorim sa il stergem. In acest mod ii precizam explicit comenzii &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; ce fisier sa stearga. Astfel noi comunicam cu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; specificand numele fisierului. De asemenea pot fi transmise prin intermediul liniei de comanda anumite argumente scriptului pe care il rulam.&lt;br /&gt;
&lt;br /&gt;
In cazul scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
 #script.sh unu doi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; este numele scriptului rulat&lt;br /&gt;
&amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt; reprezinta primul argument trecut scriptului prin intermediul liniei de comanda&lt;br /&gt;
&amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt; reprezinta cel de-al doilea argument.&lt;br /&gt;
&lt;br /&gt;
In cadrul scriptului nostru, daca dorim sa ne referim la aceste argumente o vom face in felul urmator:&lt;br /&gt;
&amp;lt;b&amp;gt;$0&amp;lt;/b&amp;gt; reprezinta numele scriptului&lt;br /&gt;
&amp;lt;b&amp;gt;$1&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$2&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In acest exemplu variabila predefinita &amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; deoarece au fost introduse doar doua argumente scriptului nostru. Trebuie notat faptul ca la un moment dat pot fi folosite un numar de maxim 9 argumente notate de la $1 la $9. Notatiile $1...$9 reprezinta parametrii de pozitie.&lt;br /&gt;
Urmatorul script va fi folosit pentru afisarea si prelucrarea argumentelor liniei de comanda:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 #folosirea argumentelor&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numarul de argumente din linia de comanda este de $#&amp;quot;&lt;br /&gt;
 echo &amp;quot;$0 este numele scriptului&amp;quot;&lt;br /&gt;
 echo &amp;quot;$1 reprezinta primul argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;$2 reprezinta cel de al doilea argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;toate argumentele sunt: $* sau $@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pentru rulare se vor folosi comenzile:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Nota&amp;lt;/b&amp;gt;&lt;br /&gt;
Nu se pot atribui alte valori parametrilor de pozitie in cadrul scriptului.&lt;br /&gt;
&lt;br /&gt;
Urmatoarele declaratii sunt invalide:&lt;br /&gt;
&lt;br /&gt;
 $1 = doi&lt;br /&gt;
 $2 = unu&lt;br /&gt;
&lt;br /&gt;
===Redirectarea intrarilor si iesirilor standard===&lt;br /&gt;
&lt;br /&gt;
In cea mai mare parte comenzile au iesirile spre monitor iar intrarile sunt luate de la tastatura, dar in Linux, ca si in alte sisteme de operare, se pot trimite iesirile catre fisiere sau de asemenea citirea intrarilor din fisiere.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #ls&lt;br /&gt;
&lt;br /&gt;
comanda de mai sus afiseaza rezultatul pe monitor. Pentru directionarea rezultatului intr-un fisier va fi folosita comanda:&lt;br /&gt;
&lt;br /&gt;
 #ls &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Exista trei mari simboluri de redirectare:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;, &amp;gt;&amp;gt; si &amp;lt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Rezultatul rularii comenzii respective va fi trimis catre fisier. Trebuie mentionat faptul ca daca fisierul in care este trimis rezultatul nu exista, atunci acesta este creat iar daca exista, continutul acestuia va fi inlocuit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt;&amp;gt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Daca fisierul nu exista atunci el este creat iar daca exista, continutul rezultat in urma rularii comenzii va fi pus la sfarsitul fisierului fara a se pierde nimic din informatia continuta initial in fisier.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;lt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Acest simbol este folosit pentru preluarea informatiilor necesare rularii comenzii nu din tastatura ci din fisierul respectiv.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #cat &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
De asemenea pot fi folosite mai multe simboluri de redirectare in aceeasi linie de comanda, la fel ca in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 #cat &amp;gt; source_name&lt;br /&gt;
 alina&lt;br /&gt;
 linux&lt;br /&gt;
 daniel&lt;br /&gt;
 mele&lt;br /&gt;
 #sort &amp;lt; source_name &amp;gt; sorted_name&lt;br /&gt;
 #cat sorted_name&lt;br /&gt;
 alina&lt;br /&gt;
 daniel&lt;br /&gt;
 linux&lt;br /&gt;
 mele&lt;br /&gt;
&lt;br /&gt;
In exemplul anterior comanda sort a preluat datele de intrare din fisierul source_name iar rezultatul a fost redirectat catre fisierul sorted_name.&lt;br /&gt;
Un alt exemplu ar putea fi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tr &amp;quot;[a-z]&amp;quot; &amp;quot;[A-Z]&amp;quot; &amp;lt; sorce_name &amp;gt; majuscule_name&lt;br /&gt;
 #cat majuscule_name&lt;br /&gt;
 ALINA&lt;br /&gt;
 DANIEL&lt;br /&gt;
 LINUX&lt;br /&gt;
 MELE&lt;br /&gt;
&lt;br /&gt;
Comanda &amp;lt;b&amp;gt;tr&amp;lt;/b&amp;gt; a fost folosita aici pentru transformarea minusculelor in majuscule dupa care rezultatul a fost scris in fisierul &amp;lt;i&amp;gt;majuscule_name&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Semnul PIPE===&lt;br /&gt;
&lt;br /&gt;
Acesta reprezinta modalitatea de conectare a iesirii unei comenzi de intrarea unei alte comenzi fara folosirea unui fisier temporar. Acestea sunt folosite pentru rularea a doua sau mai multe comenzi in aceeasi linie de comanda.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1 | comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #who | sort&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda va returna o lista a utilizatorilor logati pe masina respectiva intr-o ordine sortata.&lt;br /&gt;
&lt;br /&gt;
 #who | wc -l&lt;br /&gt;
&lt;br /&gt;
Va returna numarul de useri total logati in sistem.&lt;br /&gt;
&lt;br /&gt;
 #who | grep root&lt;br /&gt;
&lt;br /&gt;
Va returna doar logarile cu userul root.&lt;br /&gt;
&lt;br /&gt;
===Filtrele===&lt;br /&gt;
&lt;br /&gt;
Daca in linux o comanda isi accepta intrarea din intrarea standard si rezultatul acesteia este o iesire standard atunci comanda respectiva este cunoscuta sub numele de filtru. Ca exemplu presupunem ca avem fisierul &amp;lt;i&amp;gt;nume.txt&amp;lt;/i&amp;gt; care contine 100 de linii si din acesta am dori sa scoatem liniile de la 20 la 30 iar rezultatul sa il punem in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Pentru aceasta vom folosi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tail +20 &amp;lt; nume.txt |head -n 30 &amp;gt; flist&lt;br /&gt;
&lt;br /&gt;
In acest comanda &amp;lt;b&amp;gt;head&amp;lt;/b&amp;gt; este un filtru deoarece intrarea acesteia este preluata din rezultatul comenzii &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; si rezultatul acesteia este directionat in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Un alt exemplu il reprezinta comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #sort &amp;lt; snume | uniq &amp;gt; u_snume&lt;br /&gt;
&lt;br /&gt;
===Ce sunt procesele===&lt;br /&gt;
&lt;br /&gt;
Procesul este un fel de program sau sarcina pentru calculatorul nostru. Un exemplu ar putea fi:&lt;br /&gt;
&lt;br /&gt;
 #ps fax&lt;br /&gt;
&lt;br /&gt;
Aici apare o lista a tuturor proceselor de pe sistemul nostru in momentul de fata. Fiecarui proces in linux ii este asociat un PID sau process-id format dintr-un numar care ia valori intre 0 si 65535.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare procesele===&lt;br /&gt;
&lt;br /&gt;
Dupa cum se stie linuxul este un sistem de operare pe care poate rula mai mult de o singura sarcina la un moment dat daca se doreste acest lucru.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls / -R | wc -l&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda va afisa numarul total de fisiere existe pe sistemul dumneavoastra, doar ca ii va lua o anumita perioada de timp sa faca acest lucru. Pentru a nu fi nevoiti sa asteptam finalizarea comenzii curente si abia apoi sa putem executa o noua comanda, se poate rula comanda curenta in background. Acest lucru se poate face in felul urmator.&lt;br /&gt;
&lt;br /&gt;
 #ls / R | wc -l &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Se observa folosirea caracterului ampersand (&amp;amp;) la finalul comenzii, avand ca efect executarea comenzii in background si oferindu-ne imediat posibilitatea de executie a unei noi comenzi.&lt;br /&gt;
&lt;br /&gt;
===Comenzi linux referitoare la procese===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=953</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=953"/>
				<updated>2006-07-02T07:48:03Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Bazele programarii Shell (bash) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatie:&lt;br /&gt;
&lt;br /&gt;
* in exemplul de mai jos executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folosind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; - tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' - tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` - sunt folosite pentru a executa comanda aflata intre acestea&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #echo &amp;quot;Astazi este data&amp;quot;&lt;br /&gt;
 #echo &amp;quot;Astazi este `date`&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Se observa ca in primul caz a fost afisat sirul de caractere &amp;quot;Astazi este data&amp;quot; iar in cel de-al doilea caz este afisata data de astazi.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b&amp;gt;Exit Status&amp;lt;/b&amp;gt; - Starea de exit===&lt;br /&gt;
&lt;br /&gt;
De obicei, in Linux, daca o anumita comanda sau script au fost executatate, ele returneaza doua tipuri de valori, care sunt folosite pentru a vedea daca comanda sau scriptul au fost executate corect sau nu.&lt;br /&gt;
&lt;br /&gt;
Daca valoarea returnata este 0 atunci comanda a fost executata cu succes iar daca valoarea returnata este diferita de 0 atunci a aparut o eroare in executarea comenzii sau a scriptului.&lt;br /&gt;
&lt;br /&gt;
Pentru a avea valoarea starii de exit, se foloseste variabila speciala $?. Urmatoarele exercitii sper sa va lamureasca in legatura cu folosirea acestei variabile speciale.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # expr 1 + 2&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echo Buna ziua&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # wildwest sunt_obosit?&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # date&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echon $?&lt;br /&gt;
 # echo $?&lt;br /&gt;
&lt;br /&gt;
===Declaratia de citire (&amp;lt;b&amp;gt;read&amp;lt;/b&amp;gt;)===&lt;br /&gt;
&lt;br /&gt;
Aceasta declaratie este folosita pentru preluarea datelor de la utilizator prin intermediul tastaturii si memorarea datelor in variabile.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 read variabila1, variabila2,... variabilaN&lt;br /&gt;
&lt;br /&gt;
Urmatorul script ii cere utilizatorului numele si apoi asteapta introducerea acestuia de la tastatura. Utilizatorul introduce numele la tastatura (dupa scrierea numelui trebuie apasata tasta ENTER) si numele introdus prin intermediul tastaturii este memorat in variabila &amp;lt;b&amp;gt;fname&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #mcedit script.sh&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 #script pentru citirea numelui de la tastatura&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numele dumneavoastra va rog:&amp;quot;&lt;br /&gt;
 read fname&lt;br /&gt;
 echo &amp;quot;Buna $fname, ma bucur de cunostinta!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Rularea acestuia se va face in felul urmator:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Numele dumneavoastra va rog:&amp;lt;b&amp;gt;adrian&amp;lt;/b&amp;gt;&lt;br /&gt;
 Buna adrian, ma bucur de cunostinta!&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Meta caracterele (folosite pentru specificarea globala a numelui unui fisier)===&lt;br /&gt;
&lt;br /&gt;
Meta caracterul:&lt;br /&gt;
&lt;br /&gt;
 * - potriveste orice caracter sau grup de caractere&lt;br /&gt;
 ? - potriveste orice caracter dar numai unul&lt;br /&gt;
 [...] - inlocuieste doar cu caracterele aflate intre paranteze&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls /bin/[a-c]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin care incep cu litera a, b sau c&lt;br /&gt;
&lt;br /&gt;
 #ls /bin/[!a-f]*   sau   #ls /bin/[^a-f]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin cu exceptia celor care incep cu un caracter aflat in seria mentionata&lt;br /&gt;
&lt;br /&gt;
===Mai multe comenzi intr-o singura linie de comanda===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1; comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 #date; who&lt;br /&gt;
&lt;br /&gt;
Comanda de mai sus va afisa data de astazi urmata de userul cu care suntem logati. In exact acelasi scop poate fi folosita si urmatoarea linie de comanda:&lt;br /&gt;
&lt;br /&gt;
 #date who&lt;br /&gt;
&lt;br /&gt;
===Procesarea liniei de comanda===&lt;br /&gt;
&lt;br /&gt;
Incercati urmatoarea comanda (se presupune ca fisierul &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; nu exista pe sistemul dumneavoastra):&lt;br /&gt;
&lt;br /&gt;
 #ls script.sh&lt;br /&gt;
&lt;br /&gt;
Va fi afisat un mesaj asemanator cu urmatorul:&lt;br /&gt;
&lt;br /&gt;
 - script.sh: No such file or directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; este numele unei comenzi efective si shell-ul o executa in momentul in care aceasta este tastata la prompter. Acum ia nastere o alta intrebare &amp;lt;b&amp;gt;Ce sunt comenzile?&amp;lt;/b&amp;gt;. Ce se intampla cand tastam &amp;lt;b&amp;gt;#ls script.sh&amp;lt;/b&amp;gt;?&lt;br /&gt;
Primul cuvant al liniei de comanda este &amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; - numele comenzii ce urmeaza sa fie executata. Orice altceva pe acea linie este citit ca fiind un argument pentru comanda respectiva.&lt;br /&gt;
&lt;br /&gt;
 #tail +10 script.sh&lt;br /&gt;
&lt;br /&gt;
Numele comenzii este &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; iar &amp;lt;b&amp;gt;+10&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; sunt considerate argumente ale acestei comenzi.&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; detine numarul de argumente specificate in linia de comanda. Iar &amp;lt;b&amp;gt;$*&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;$@&amp;lt;/b&amp;gt; se refera la toate argumentele date scriptului.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare argumentele in linia de comanda===&lt;br /&gt;
&lt;br /&gt;
1. Pentru a spune comenzii sau utilitarului ce optiuni sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
2. Pentru a informa comanda sau utilitarul ce fisier sau grup de fisiere sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
Sa luam de exemplu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; care este folosita pentru stergerea unui fisier, dar cum ii vom spune noi acestei comenzi ce fisier sa stearga (ea nu ne va intreba ce fisier dorim sa stergem). Ceea ce vom face este sa rulam comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #rm {numele fisierului}&lt;br /&gt;
&lt;br /&gt;
In acest exemplu &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; este comanda iar &amp;lt;b&amp;gt;numele-fisierului&amp;lt;/b&amp;gt; este fisierul pe care dorim sa il stergem. In acest mod ii precizam explicit comenzii &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; ce fisier sa stearga. Astfel noi comunicam cu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; specificand numele fisierului. De asemenea pot fi transmise prin intermediul liniei de comanda anumite argumente scriptului pe care il rulam.&lt;br /&gt;
&lt;br /&gt;
In cazul scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
 #script.sh unu doi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; este numele scriptului rulat&lt;br /&gt;
&amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt; reprezinta primul argument trecut scriptului prin intermediul liniei de comanda&lt;br /&gt;
&amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt; reprezinta cel de-al doilea argument.&lt;br /&gt;
&lt;br /&gt;
In cadrul scriptului nostru, daca dorim sa ne referim la aceste argumente o vom face in felul urmator:&lt;br /&gt;
&amp;lt;b&amp;gt;$0&amp;lt;/b&amp;gt; reprezinta numele scriptului&lt;br /&gt;
&amp;lt;b&amp;gt;$1&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$2&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In acest exemplu variabila predefinita &amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; deoarece au fost introduse doar doua argumente scriptului nostru. Trebuie notat faptul ca la un moment dat pot fi folosite un numar de maxim 9 argumente notate de la $1 la $9. Notatiile $1...$9 reprezinta parametrii de pozitie.&lt;br /&gt;
Urmatorul script va fi folosit pentru afisarea si prelucrarea argumentelor liniei de comanda:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 #folosirea argumentelor&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numarul de argumente din linia de comanda este de $#&amp;quot;&lt;br /&gt;
 echo &amp;quot;$0 este numele scriptului&amp;quot;&lt;br /&gt;
 echo &amp;quot;$1 reprezinta primul argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;$2 reprezinta cel de al doilea argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;toate argumentele sunt: $* sau $@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pentru rulare se vor folosi comenzile:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Nota&amp;lt;/b&amp;gt;&lt;br /&gt;
Nu se pot atribui alte valori parametrilor de pozitie in cadrul scriptului.&lt;br /&gt;
&lt;br /&gt;
Urmatoarele declaratii sunt invalide:&lt;br /&gt;
&lt;br /&gt;
 $1 = doi&lt;br /&gt;
 $2 = unu&lt;br /&gt;
&lt;br /&gt;
===Redirectarea intrarilor si iesirilor standard===&lt;br /&gt;
&lt;br /&gt;
In cea mai mare parte comenzile au iesirile spre monitor iar intrarile sunt luate de la tastatura, dar in Linux, ca si in alte sisteme de operare, se pot trimite iesirile catre fisiere sau de asemenea citirea intrarilor din fisiere.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #ls&lt;br /&gt;
&lt;br /&gt;
comanda de mai sus afiseaza rezultatul pe monitor. Pentru directionarea rezultatului intr-un fisier va fi folosita comanda:&lt;br /&gt;
&lt;br /&gt;
 #ls &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Exista trei mari simboluri de redirectare:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;, &amp;gt;&amp;gt; si &amp;lt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Rezultatul rularii comenzii respective va fi trimis catre fisier. Trebuie mentionat faptul ca daca fisierul in care este trimis rezultatul nu exista, atunci acesta este creat iar daca exista, continutul acestuia va fi inlocuit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;gt;&amp;gt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Daca fisierul nu exista atunci el este creat iar daca exista, continutul rezultat in urma rularii comenzii va fi pus la sfarsitul fisierului fara a se pierde nimic din informatia continuta initial in fisier.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;lt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda_linux &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
Acest simbol este folosit pentru preluarea informatiilor necesare rularii comenzii nu din tastatura ci din fisierul respectiv.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #cat &amp;lt; nume_fisier&lt;br /&gt;
&lt;br /&gt;
De asemenea pot fi folosite mai multe simboluri de redirectare in aceeasi linie de comanda, la fel ca in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 #cat &amp;gt; source_name&lt;br /&gt;
 alina&lt;br /&gt;
 linux&lt;br /&gt;
 daniel&lt;br /&gt;
 mele&lt;br /&gt;
 #sort &amp;lt; source_name &amp;gt; sorted_name&lt;br /&gt;
 #cat sorted_name&lt;br /&gt;
 alina&lt;br /&gt;
 daniel&lt;br /&gt;
 linux&lt;br /&gt;
 mele&lt;br /&gt;
&lt;br /&gt;
In exemplul anterior comanda sort a preluat datele de intrare din fisierul source_name iar rezultatul a fost redirectat catre fisierul sorted_name.&lt;br /&gt;
Un alt exemplu ar putea fi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tr &amp;quot;[a-z]&amp;quot; &amp;quot;[A-Z]&amp;quot; &amp;lt; sorce_name &amp;gt; majuscule_name&lt;br /&gt;
 #cat majuscule_name&lt;br /&gt;
 ALINA&lt;br /&gt;
 DANIEL&lt;br /&gt;
 LINUX&lt;br /&gt;
 MELE&lt;br /&gt;
&lt;br /&gt;
Comanda &amp;lt;b&amp;gt;tr&amp;lt;/b&amp;gt; a fost folosita aici pentru transformarea minusculelor in majuscule dupa care rezultatul a fost scris in fisierul &amp;lt;i&amp;gt;majuscule_name&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Semnul PIPE===&lt;br /&gt;
&lt;br /&gt;
Acesta reprezinta modalitatea de conectare a iesirii unei comenzi de intrarea unei alte comenzi fara folosirea unui fisier temporar. Acestea sunt folosite pentru rularea a doua sau mai multe comenzi in aceeasi linie de comanda.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1 | comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #who | sort&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda va returna o lista a utilizatorilor logati pe masina respectiva intr-o ordine sortata.&lt;br /&gt;
&lt;br /&gt;
 #who | wc -l&lt;br /&gt;
&lt;br /&gt;
Va returna numarul de useri total logati in sistem.&lt;br /&gt;
&lt;br /&gt;
 #who | grep root&lt;br /&gt;
&lt;br /&gt;
 Va returna doar logarile cu userul root.&lt;br /&gt;
&lt;br /&gt;
===Filtrele===&lt;br /&gt;
&lt;br /&gt;
Daca in linux o comanda isi accepta intrarea din intrarea standard si rezultatul acesteia este o iesire standard atunci comanda respectiva este cunoscuta sub numele de filtru. Ca exemplu presupunem ca avem fisierul &amp;lt;i&amp;gt;nume.txt&amp;lt;/i&amp;gt; care contine 100 de linii si din acesta am dori sa scoatem liniile de la 20 la 30 iar rezultatul sa il punem in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Pentru aceasta vom folosi comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #tail +20 &amp;lt; nume.txt |head -n 30 &amp;gt; flist&lt;br /&gt;
&lt;br /&gt;
In acest comanda &amp;lt;b&amp;gt;head&amp;lt;/b&amp;gt; este un filtru deoarece intrarea acesteia este preluata din rezultatul comenzii &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; si rezultatul acesteia este directionat in fisierul &amp;lt;i&amp;gt;flist&amp;lt;/i&amp;gt;. Un alt exemplu il reprezinta comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #sort &amp;lt; snume | uniq &amp;gt; u_snume&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=949</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=949"/>
				<updated>2006-07-02T07:19:51Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Bazele programarii Shell (bash) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatie:&lt;br /&gt;
&lt;br /&gt;
* in exemplul de mai jos executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folosind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; - tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' - tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` - sunt folosite pentru a executa comanda aflata intre acestea&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #echo &amp;quot;Astazi este data&amp;quot;&lt;br /&gt;
 #echo &amp;quot;Astazi este `date`&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Se observa ca in primul caz a fost afisat sirul de caractere &amp;quot;Astazi este data&amp;quot; iar in cel de-al doilea caz este afisata data de astazi.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b&amp;gt;Exit Status&amp;lt;/b&amp;gt; - Starea de exit===&lt;br /&gt;
&lt;br /&gt;
De obicei, in Linux, daca o anumita comanda sau script au fost executatate, ele returneaza doua tipuri de valori, care sunt folosite pentru a vedea daca comanda sau scriptul au fost executate corect sau nu.&lt;br /&gt;
&lt;br /&gt;
Daca valoarea returnata este 0 atunci comanda a fost executata cu succes iar daca valoarea returnata este diferita de 0 atunci a aparut o eroare in executarea comenzii sau a scriptului.&lt;br /&gt;
&lt;br /&gt;
Pentru a avea valoarea starii de exit, se foloseste variabila speciala $?. Urmatoarele exercitii sper sa va lamureasca in legatura cu folosirea acestei variabile speciale.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # expr 1 + 2&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echo Buna ziua&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # wildwest sunt_obosit?&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # date&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echon $?&lt;br /&gt;
 # echo $?&lt;br /&gt;
&lt;br /&gt;
===Declaratia de citire (&amp;lt;b&amp;gt;read&amp;lt;/b&amp;gt;)===&lt;br /&gt;
&lt;br /&gt;
Aceasta declaratie este folosita pentru preluarea datelor de la utilizator prin intermediul tastaturii si memorarea datelor in variabile.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 read variabila1, variabila2,... variabilaN&lt;br /&gt;
&lt;br /&gt;
Urmatorul script ii cere utilizatorului numele si apoi asteapta introducerea acestuia de la tastatura. Utilizatorul introduce numele la tastatura (dupa scrierea numelui trebuie apasata tasta ENTER) si numele introdus prin intermediul tastaturii este memorat in variabila &amp;lt;b&amp;gt;fname&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #mcedit script.sh&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 #script pentru citirea numelui de la tastatura&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numele dumneavoastra va rog:&amp;quot;&lt;br /&gt;
 read fname&lt;br /&gt;
 echo &amp;quot;Buna $fname, ma bucur de cunostinta!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Rularea acestuia se va face in felul urmator:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Numele dumneavoastra va rog:&amp;lt;b&amp;gt;adrian&amp;lt;/b&amp;gt;&lt;br /&gt;
 Buna adrian, ma bucur de cunostinta!&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Meta caracterele (folosite pentru specificarea globala a numelui unui fisier)===&lt;br /&gt;
&lt;br /&gt;
Meta caracterul:&lt;br /&gt;
&lt;br /&gt;
 * - potriveste orice caracter sau grup de caractere&lt;br /&gt;
 ? - potriveste orice caracter dar numai unul&lt;br /&gt;
 [...] - inlocuieste doar cu caracterele aflate intre paranteze&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls /bin/[a-c]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin care incep cu litera a, b sau c&lt;br /&gt;
&lt;br /&gt;
 #ls /bin/[!a-f]*   sau   #ls /bin/[^a-f]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin cu exceptia celor care incep cu un caracter aflat in seria mentionata&lt;br /&gt;
&lt;br /&gt;
===Mai multe comenzi intr-o singura linie de comanda===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1; comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 #date; who&lt;br /&gt;
&lt;br /&gt;
Comanda de mai sus va afisa data de astazi urmata de userul cu care suntem logati. In exact acelasi scop poate fi folosita si urmatoarea linie de comanda:&lt;br /&gt;
&lt;br /&gt;
 #date who&lt;br /&gt;
&lt;br /&gt;
===Procesarea liniei de comanda===&lt;br /&gt;
&lt;br /&gt;
Incercati urmatoarea comanda (se presupune ca fisierul &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; nu exista pe sistemul dumneavoastra):&lt;br /&gt;
&lt;br /&gt;
 #ls script.sh&lt;br /&gt;
&lt;br /&gt;
Va fi afisat un mesaj asemanator cu urmatorul:&lt;br /&gt;
&lt;br /&gt;
 - script.sh: No such file or directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; este numele unei comenzi efective si shell-ul o executa in momentul in care aceasta este tastata la prompter. Acum ia nastere o alta intrebare &amp;lt;b&amp;gt;Ce sunt comenzile?&amp;lt;/b&amp;gt;. Ce se intampla cand tastam &amp;lt;b&amp;gt;#ls script.sh&amp;lt;/b&amp;gt;?&lt;br /&gt;
Primul cuvant al liniei de comanda este &amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; - numele comenzii ce urmeaza sa fie executata. Orice altceva pe acea linie este citit ca fiind un argument pentru comanda respectiva.&lt;br /&gt;
&lt;br /&gt;
 #tail +10 script.sh&lt;br /&gt;
&lt;br /&gt;
Numele comenzii este &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; iar &amp;lt;b&amp;gt;+10&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; sunt considerate argumente ale acestei comenzi.&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; detine numarul de argumente specificate in linia de comanda. Iar &amp;lt;b&amp;gt;$*&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;$@&amp;lt;/b&amp;gt; se refera la toate argumentele date scriptului.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare argumentele in linia de comanda===&lt;br /&gt;
&lt;br /&gt;
1. Pentru a spune comenzii sau utilitarului ce optiuni sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
2. Pentru a informa comanda sau utilitarul ce fisier sau grup de fisiere sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
Sa luam de exemplu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; care este folosita pentru stergerea unui fisier, dar cum ii vom spune noi acestei comenzi ce fisier sa stearga (ea nu ne va intreba ce fisier dorim sa stergem). Ceea ce vom face este sa rulam comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #rm {numele fisierului}&lt;br /&gt;
&lt;br /&gt;
In acest exemplu &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; este comanda iar &amp;lt;b&amp;gt;numele-fisierului&amp;lt;/b&amp;gt; este fisierul pe care dorim sa il stergem. In acest mod ii precizam explicit comenzii &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; ce fisier sa stearga. Astfel noi comunicam cu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; specificand numele fisierului. De asemenea pot fi transmise prin intermediul liniei de comanda anumite argumente scriptului pe care il rulam.&lt;br /&gt;
&lt;br /&gt;
In cazul scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
 #script.sh unu doi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; este numele scriptului rulat&lt;br /&gt;
&amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt; reprezinta primul argument trecut scriptului prin intermediul liniei de comanda&lt;br /&gt;
&amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt; reprezinta cel de-al doilea argument.&lt;br /&gt;
&lt;br /&gt;
In cadrul scriptului nostru, daca dorim sa ne referim la aceste argumente o vom face in felul urmator:&lt;br /&gt;
&amp;lt;b&amp;gt;$0&amp;lt;/b&amp;gt; reprezinta numele scriptului&lt;br /&gt;
&amp;lt;b&amp;gt;$1&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$2&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In acest exemplu variabila predefinita &amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; deoarece au fost introduse doar doua argumente scriptului nostru. Trebuie notat faptul ca la un moment dat pot fi folosite un numar de maxim 9 argumente notate de la $1 la $9. Notatiile $1...$9 reprezinta parametrii de pozitie.&lt;br /&gt;
Urmatorul script va fi folosit pentru afisarea si prelucrarea argumentelor liniei de comanda:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 #folosirea argumentelor&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numarul de argumente din linia de comanda este de $#&amp;quot;&lt;br /&gt;
 echo &amp;quot;$0 este numele scriptului&amp;quot;&lt;br /&gt;
 echo &amp;quot;$1 reprezinta primul argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;$2 reprezinta cel de al doilea argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;toate argumentele sunt: $* sau $@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pentru rulare se vor folosi comenzile:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Nota&amp;lt;/b&amp;gt;&lt;br /&gt;
Nu se pot atribui alte valori parametrilor de pozitie in cadrul scriptului.&lt;br /&gt;
&lt;br /&gt;
Urmatoarele declaratii sunt invalide:&lt;br /&gt;
&lt;br /&gt;
 $1 = doi&lt;br /&gt;
 $2 = unu&lt;br /&gt;
&lt;br /&gt;
===Redirectarea intrarilor si iesirilor standard===&lt;br /&gt;
&lt;br /&gt;
In cea mai mare parte comenzile au iesirile spre monitor iar intrarile sunt luate de la tastatura, dar in Linux, ca si in alte sisteme de operare, se pot trimite iesirile catre fisiere sau de asemenea citirea intrarilor din fisiere.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 #ls&lt;br /&gt;
&lt;br /&gt;
comanda de mai sus afiseaza rezultatul pe monitor. Pentru directionarea rezultatului intr-un fisier va fi folosita comanda:&lt;br /&gt;
&lt;br /&gt;
 #ls &amp;gt; numele_fisierului&lt;br /&gt;
&lt;br /&gt;
Exista trei mari simboluri de redirectare:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;, &amp;gt;&amp;gt; si &amp;lt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Simbolul &amp;quot;&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=1030</id>
		<title>Discuție:Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=1030"/>
				<updated>2006-06-10T12:25:43Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* &amp;lt;b&amp;gt;Exit Status&amp;lt;/b&amp;gt; - Starea de exit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=948</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=948"/>
				<updated>2006-06-10T12:22:25Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Bazele programarii Shell (bash) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatie:&lt;br /&gt;
&lt;br /&gt;
* in exemplul de mai jos executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folosind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; - tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' - tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` - sunt folosite pentru a executa comanda aflata intre acestea&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #echo &amp;quot;Astazi este data&amp;quot;&lt;br /&gt;
 #echo &amp;quot;Astazi este `date`&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Se observa ca in primul caz a fost afisat sirul de caractere &amp;quot;Astazi este data&amp;quot; iar in cel de-al doilea caz este afisata data de astazi.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b&amp;gt;Exit Status&amp;lt;/b&amp;gt; - Starea de exit===&lt;br /&gt;
&lt;br /&gt;
De obicei, in Linux, daca o anumita comanda sau script au fost executatate, ele returneaza doua tipuri de valori, care sunt folosite pentru a vedea daca comanda sau scriptul au fost executate corect sau nu.&lt;br /&gt;
&lt;br /&gt;
Daca valoarea returnata este 0 atunci comanda a fost executata cu succes iar daca valoarea returnata este diferita de 0 atunci a aparut o eroare in executarea comenzii sau a scriptului.&lt;br /&gt;
&lt;br /&gt;
Pentru a avea valoarea starii de exit, se foloseste variabila speciala $?. Urmatoarele exercitii sper sa va lamureasca in legatura cu folosirea acestei variabile speciale.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # expr 1 + 2&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echo Buna ziua&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # wildwest sunt_obosit?&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # date&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echon $?&lt;br /&gt;
 # echo $?&lt;br /&gt;
&lt;br /&gt;
===Declaratia de citire (&amp;lt;b&amp;gt;read&amp;lt;/b&amp;gt;)===&lt;br /&gt;
&lt;br /&gt;
Aceasta declaratie este folosita pentru preluarea datelor de la utilizator prin intermediul tastaturii si memorarea datelor in variabile.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 read variabila1, variabila2,... variabilaN&lt;br /&gt;
&lt;br /&gt;
Urmatorul script ii cere utilizatorului numele si apoi asteapta introducerea acestuia de la tastatura. Utilizatorul introduce numele la tastatura (dupa scrierea numelui trebuie apasata tasta ENTER) si numele introdus prin intermediul tastaturii este memorat in variabila &amp;lt;b&amp;gt;fname&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #mcedit script.sh&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 #script pentru citirea numelui de la tastatura&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numele dumneavoastra va rog:&amp;quot;&lt;br /&gt;
 read fname&lt;br /&gt;
 echo &amp;quot;Buna $fname, ma bucur de cunostinta!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Rularea acestuia se va face in felul urmator:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Numele dumneavoastra va rog:&amp;lt;b&amp;gt;adrian&amp;lt;/b&amp;gt;&lt;br /&gt;
 Buna adrian, ma bucur de cunostinta!&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Meta caracterele (folosite pentru specificarea globala a numelui unui fisier)===&lt;br /&gt;
&lt;br /&gt;
Meta caracterul:&lt;br /&gt;
&lt;br /&gt;
 * - potriveste orice caracter sau grup de caractere&lt;br /&gt;
 ? - potriveste orice caracter dar numai unul&lt;br /&gt;
 [...] - inlocuieste doar cu caracterele aflate intre paranteze&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls /bin/[a-c]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin care incep cu litera a, b sau c&lt;br /&gt;
&lt;br /&gt;
 #ls /bin/[!a-f]*   sau   #ls /bin/[^a-f]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin cu exceptia celor care incep cu un caracter aflat in seria mentionata&lt;br /&gt;
&lt;br /&gt;
===Mai multe comenzi intr-o singura linie de comanda===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1; comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 #date; who&lt;br /&gt;
&lt;br /&gt;
Comanda de mai sus va afisa data de astazi urmata de userul cu care suntem logati. In exact acelasi scop poate fi folosita si urmatoarea linie de comanda:&lt;br /&gt;
&lt;br /&gt;
 #date who&lt;br /&gt;
&lt;br /&gt;
===Procesarea liniei de comanda===&lt;br /&gt;
&lt;br /&gt;
Incercati urmatoarea comanda (se presupune ca fisierul &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; nu exista pe sistemul dumneavoastra):&lt;br /&gt;
&lt;br /&gt;
 #ls script.sh&lt;br /&gt;
&lt;br /&gt;
Va fi afisat un mesaj asemanator cu urmatorul:&lt;br /&gt;
&lt;br /&gt;
 - script.sh: No such file or directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; este numele unei comenzi efective si shell-ul o executa in momentul in care aceasta este tastata la prompter. Acum ia nastere o alta intrebare &amp;lt;b&amp;gt;Ce sunt comenzile?&amp;lt;/b&amp;gt;. Ce se intampla cand tastam &amp;lt;b&amp;gt;#ls script.sh&amp;lt;/b&amp;gt;?&lt;br /&gt;
Primul cuvant al liniei de comanda este &amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; - numele comenzii ce urmeaza sa fie executata. Orice altceva pe acea linie este citit ca fiind un argument pentru comanda respectiva.&lt;br /&gt;
&lt;br /&gt;
 #tail +10 script.sh&lt;br /&gt;
&lt;br /&gt;
Numele comenzii este &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; iar &amp;lt;b&amp;gt;+10&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; sunt considerate argumente ale acestei comenzi.&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; detine numarul de argumente specificate in linia de comanda. Iar &amp;lt;b&amp;gt;$*&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;$@&amp;lt;/b&amp;gt; se refera la toate argumentele date scriptului.&lt;br /&gt;
&lt;br /&gt;
===De ce sunt necesare argumentele in linia de comanda===&lt;br /&gt;
&lt;br /&gt;
1. Pentru a spune comenzii sau utilitarului ce optiuni sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
2. Pentru a informa comanda sau utilitarul ce fisier sau grup de fisiere sa foloseasca.&lt;br /&gt;
&lt;br /&gt;
Sa luam de exemplu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; care este folosita pentru stergerea unui fisier, dar cum ii vom spune noi acestei comenzi ce fisier sa stearga (ea nu ne va intreba ce fisier dorim sa stergem). Ceea ce vom face este sa rulam comanda urmatoare:&lt;br /&gt;
&lt;br /&gt;
 #rm {numele fisierului}&lt;br /&gt;
&lt;br /&gt;
In acest exemplu &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; este comanda iar &amp;lt;b&amp;gt;numele-fisierului&amp;lt;/b&amp;gt; este fisierul pe care dorim sa il stergem. In acest mod ii precizam explicit comenzii &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; ce fisier sa stearga. Astfel noi comunicam cu comanda &amp;lt;b&amp;gt;rm&amp;lt;/b&amp;gt; specificand numele fisierului. De asemenea pot fi transmise prin intermediul liniei de comanda anumite argumente scriptului pe care il rulam.&lt;br /&gt;
&lt;br /&gt;
In cazul scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
 #script.sh unu doi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; este numele scriptului rulat&lt;br /&gt;
&amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt; reprezinta primul argument trecut scriptului prin intermediul liniei de comanda&lt;br /&gt;
&amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt; reprezinta cel de-al doilea argument.&lt;br /&gt;
&lt;br /&gt;
In cadrul scriptului nostru, daca dorim sa ne referim la aceste argumente o vom face in felul urmator:&lt;br /&gt;
&amp;lt;b&amp;gt;$0&amp;lt;/b&amp;gt; reprezinta numele scriptului&lt;br /&gt;
&amp;lt;b&amp;gt;$1&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;unu&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$2&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;doi&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In acest exemplu variabila predefinita &amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; are valoarea &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; deoarece au fost introduse doar doua argumente scriptului nostru. Trebuie notat faptul ca la un moment dat pot fi folosite un numar de maxim 9 argumente notate de la $1 la $9. Notatiile $1...$9 reprezinta parametrii de pozitie.&lt;br /&gt;
Urmatorul script va fi folosit pentru afisarea si prelucrarea argumentelor liniei de comanda:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 #folosirea argumentelor&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numarul de argumente din linia de comanda este de $#&amp;quot;&lt;br /&gt;
 echo &amp;quot;$0 este numele scriptului&amp;quot;&lt;br /&gt;
 echo &amp;quot;$1 reprezinta primul argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;$2 reprezinta cel de al doilea argument&amp;quot;&lt;br /&gt;
 echo &amp;quot;toate argumentele sunt: $* sau $@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pentru rulare se vor folosi comenzile:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Nota&amp;lt;/b&amp;gt;&lt;br /&gt;
Nu se pot atribui alte valori parametrilor de pozitie in cadrul scriptului.&lt;br /&gt;
&lt;br /&gt;
Urmatoarele declaratii sunt invalide:&lt;br /&gt;
&lt;br /&gt;
 $1 = doi&lt;br /&gt;
 $2 = unu&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=867</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=867"/>
				<updated>2006-06-10T12:03:26Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Bazele programarii Shell (bash) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatie:&lt;br /&gt;
&lt;br /&gt;
* in exemplul de mai jos executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folosind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; - tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' - tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` - sunt folosite pentru a executa comanda aflata intre acestea&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #echo &amp;quot;Astazi este data&amp;quot;&lt;br /&gt;
 #echo &amp;quot;Astazi este `date`&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Se observa ca in primul caz a fost afisat sirul de caractere &amp;quot;Astazi este data&amp;quot; iar in cel de-al doilea caz este afisata data de astazi.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b&amp;gt;Exit Status&amp;lt;/b&amp;gt; - Starea de exit===&lt;br /&gt;
&lt;br /&gt;
De obicei, in Linux, daca o anumita comanda sau script au fost executatate, ele returneaza doua tipuri de valori, care sunt folosite pentru a vedea daca comanda sau scriptul au fost executate corect sau nu.&lt;br /&gt;
&lt;br /&gt;
Daca valoarea returnata este 0 atunci comanda a fost executata cu succes iar daca valoarea returnata este diferita de 0 atunci a aparut o eroare in executarea comenzii sau a scriptului.&lt;br /&gt;
&lt;br /&gt;
Pentru a avea valoarea starii de exit, se foloseste variabila speciala $?. Urmatoarele exercitii sper sa va lamureasca in legatura cu folosirea acestei variabile speciale.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # expr 1 + 2&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echo Buna ziua&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # wildwest sunt_obosit?&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # date&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echon $?&lt;br /&gt;
 # echo $?&lt;br /&gt;
&lt;br /&gt;
===Declaratia de citire (&amp;lt;b&amp;gt;read&amp;lt;/b&amp;gt;)===&lt;br /&gt;
&lt;br /&gt;
Aceasta declaratie este folosita pentru preluarea datelor de la utilizator prin intermediul tastaturii si memorarea datelor in variabile.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 read variabila1, variabila2,... variabilaN&lt;br /&gt;
&lt;br /&gt;
Urmatorul script ii cere utilizatorului numele si apoi asteapta introducerea acestuia de la tastatura. Utilizatorul introduce numele la tastatura (dupa scrierea numelui trebuie apasata tasta ENTER) si numele introdus prin intermediul tastaturii este memorat in variabila &amp;lt;b&amp;gt;fname&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #mcedit script.sh&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 #script pentru citirea numelui de la tastatura&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numele dumneavoastra va rog:&amp;quot;&lt;br /&gt;
 read fname&lt;br /&gt;
 echo &amp;quot;Buna $fname, ma bucur de cunostinta!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Rularea acestuia se va face in felul urmator:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Numele dumneavoastra va rog:&amp;lt;b&amp;gt;adrian&amp;lt;/b&amp;gt;&lt;br /&gt;
 Buna adrian, ma bucur de cunostinta!&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Meta caracterele (folosite pentru specificarea globala a numelui unui fisier)===&lt;br /&gt;
&lt;br /&gt;
Meta caracterul:&lt;br /&gt;
&lt;br /&gt;
 * - potriveste orice caracter sau grup de caractere&lt;br /&gt;
 ? - potriveste orice caracter dar numai unul&lt;br /&gt;
 [...] - inlocuieste doar cu caracterele aflate intre paranteze&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls /bin/[a-c]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin care incep cu litera a, b sau c&lt;br /&gt;
&lt;br /&gt;
 #ls /bin/[!a-f]*   sau   #ls /bin/[^a-f]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin cu exceptia celor care incep cu un caracter aflat in seria mentionata&lt;br /&gt;
&lt;br /&gt;
===Mai multe comenzi intr-o singura linie de comanda===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 #comanda1; comanda2&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 #date; who&lt;br /&gt;
&lt;br /&gt;
Comanda de mai sus va afisa data de astazi urmata de userul cu care suntem logati. In exact acelasi scop poate fi folosita si urmatoarea linie de comanda:&lt;br /&gt;
&lt;br /&gt;
 #date who&lt;br /&gt;
&lt;br /&gt;
===Procesarea liniei de comanda===&lt;br /&gt;
&lt;br /&gt;
Incercati urmatoarea comanda (se presupune ca fisierul &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; nu exista pe sistemul dumneavoastra):&lt;br /&gt;
&lt;br /&gt;
 #ls script.sh&lt;br /&gt;
&lt;br /&gt;
Va fi afisat un mesaj asemanator cu urmatorul:&lt;br /&gt;
&lt;br /&gt;
 - script.sh: No suh file or directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; este numele unei comenzi efective si shell-ul o executa in momentul in care aceasta este tastata la prompter. Acum ia nastere o alta intrebare &amp;lt;b&amp;gt;Ce sunt comenzile?&amp;lt;/b&amp;gt;. Ce se intampla cand tastam &amp;lt;b&amp;gt;#ls script.sh&amp;lt;/b&amp;gt;?&lt;br /&gt;
Primul cuvant al liniei de comanda este &amp;lt;b&amp;gt;ls&amp;lt;/b&amp;gt; - numele comenzii ce urmeaza sa fie executata. Orice altceva pe acea linie este citit ca fiind un argument pentru comanda respectiva.&lt;br /&gt;
&lt;br /&gt;
 #tail +10 script.sh&lt;br /&gt;
&lt;br /&gt;
Numele comenzii este &amp;lt;b&amp;gt;tail&amp;lt;/b&amp;gt; iar &amp;lt;b&amp;gt;+10&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;script.sh&amp;lt;/b&amp;gt; sunt considerate argumente ale acestei comenzi.&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;$#&amp;lt;/b&amp;gt; detine numarul de argumente specificate in linia de comanda. Iar &amp;lt;b&amp;gt;$*&amp;lt;/b&amp;gt; sau &amp;lt;b&amp;gt;$@&amp;lt;/b&amp;gt; se refera la toate argumentele date scriptului.&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=866</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=866"/>
				<updated>2006-06-09T18:04:15Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Bazele programarii Shell (bash) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatie:&lt;br /&gt;
&lt;br /&gt;
* in exemplul de mai jos executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folosind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; - tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' - tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` - sunt folosite pentru a executa comanda aflata intre acestea&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #echo &amp;quot;Astazi este data&amp;quot;&lt;br /&gt;
 #echo &amp;quot;Astazi este `date`&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Se observa ca in primul caz a fost afisat sirul de caractere &amp;quot;Astazi este data&amp;quot; iar in cel de-al doilea caz este afisata data de astazi.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b&amp;gt;Exit Status&amp;lt;/b&amp;gt; - Starea de exit===&lt;br /&gt;
&lt;br /&gt;
De obicei, in Linux, daca o anumita comanda sau script au fost executatate, ele returneaza doua tipuri de valori, care sunt folosite pentru a vedea daca comanda sau scriptul au fost executate corect sau nu.&lt;br /&gt;
&lt;br /&gt;
Daca valoarea returnata este 0 atunci comanda a fost executata cu succes iar daca valoarea returnata este diferita de 0 atunci a aparut o eroare in executarea comenzii sau a scriptului.&lt;br /&gt;
&lt;br /&gt;
Pentru a avea valoarea starii de exit, se foloseste variabila speciala $?. Urmatoarele exercitii sper sa va lamureasca in legatura cu folosirea acestei variabile speciale.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # expr 1 + 2&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echo Buna ziua&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # wildwest sunt_obosit?&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # date&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echon $?&lt;br /&gt;
 # echo $?&lt;br /&gt;
&lt;br /&gt;
===Declaratia de citire (&amp;lt;b&amp;gt;read&amp;lt;/b&amp;gt;)===&lt;br /&gt;
&lt;br /&gt;
Aceasta declaratie este folosita pentru preluarea datelor de la utilizator prin intermediul tastaturii si memorarea datelor in variabile.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 read variabila1, variabila2,... variabilaN&lt;br /&gt;
&lt;br /&gt;
Urmatorul script ii cere utilizatorului numele si apoi asteapta introducerea acestuia de la tastatura. Utilizatorul introduce numele la tastatura (dupa scrierea numelui trebuie apasata tasta ENTER) si numele introdus prin intermediul tastaturii este memorat in variabila &amp;lt;b&amp;gt;fname&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #mcedit script.sh&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 #script pentru citirea numelui de la tastatura&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Numele dumneavoastra va rog:&amp;quot;&lt;br /&gt;
 read fname&lt;br /&gt;
 echo &amp;quot;Buna $fname, ma bucur de cunostinta!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Rularea acestuia se va face in felul urmator:&lt;br /&gt;
&lt;br /&gt;
 #chmod 755 script.sh&lt;br /&gt;
 #./script.sh&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Numele dumneavoastra va rog:&amp;lt;b&amp;gt;adrian&amp;lt;/b&amp;gt;&lt;br /&gt;
 Buna adrian, ma bucur de cunostinta!&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Meta caracterele (folosite pentru specificarea globala a numelui unui fisier)===&lt;br /&gt;
&lt;br /&gt;
Meta caracterul:&lt;br /&gt;
&lt;br /&gt;
 * - potriveste orice caracter sau grup de caractere&lt;br /&gt;
 ? - potriveste orice caracter dar numai unul&lt;br /&gt;
 [...] - inlocuieste doar cu caracterele aflate intre paranteze&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #ls /bin/[a-c]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin care incep cu litera a, b sau c&lt;br /&gt;
&lt;br /&gt;
 #ls /bin/[!a-f]*   sau   #ls /bin/[^a-f]*&lt;br /&gt;
&lt;br /&gt;
va afisa toate fisierele si directoarele din directorul /bin cu exceptia celor care incep cu un caracter aflat in seria mentionata&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=720</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=720"/>
				<updated>2006-03-19T09:30:29Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Bazele programarii Shell (bash) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatie:&lt;br /&gt;
&lt;br /&gt;
* in exemplul de mai jos executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folosind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; - tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' - tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` - sunt folosite pentru a executa comanda aflata intre acestea&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #echo &amp;quot;Astazi este data&amp;quot;&lt;br /&gt;
 #echo &amp;quot;Astazi este `date`&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Se observa ca in primul caz a fost afisat sirul de caractere &amp;quot;Astazi este data&amp;quot; iar in cel de-al doilea caz este afisata data de astazi.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b&amp;gt;Exit Status&amp;lt;/b&amp;gt; - Starea de exit===&lt;br /&gt;
&lt;br /&gt;
De obicei, in Linux, daca o anumita comanda sau script au fost executatate, ele returneaza doua tipuri de valori, care sunt folosite pentru a vedea daca comanda sau scriptul au fost executate corect sau nu.&lt;br /&gt;
&lt;br /&gt;
Daca valoarea returnata este 0 atunci comanda a fost executata cu succes iar daca valoarea returnata este diferita de 0 atunci a aparut o eroare in executarea comenzii sau a scriptului.&lt;br /&gt;
&lt;br /&gt;
Pentru a avea valoarea starii de exit, se foloseste variabila speciala $?. Urmatoarele exercitii sper sa va lamureasca in legatura cu folosirea acestei variabile speciale.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # expr 1 + 2&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echo Buna ziua&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # wildwest sunt_obosit?&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # date&lt;br /&gt;
 # echo $?&lt;br /&gt;
 &lt;br /&gt;
 # echon $?&lt;br /&gt;
 # echo $?&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=673</id>
		<title>Discuție:Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=673"/>
				<updated>2006-03-17T17:32:55Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Mai multe despre ghilimele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=677</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=677"/>
				<updated>2006-03-17T17:32:00Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Bazele programarii Shell (bash) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatie:&lt;br /&gt;
&lt;br /&gt;
* in exemplul de mai jos executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folosind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; - tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' - tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` - sunt folosite pentru a executa comanda aflata intre acestea&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #echo &amp;quot;Astazi este data&amp;quot;&lt;br /&gt;
 #echo &amp;quot;Astazi este `date`&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Se observa ca in primul caz a fost afisat sirul de caractere &amp;quot;Astazi este data&amp;quot; iar in cel de-al doilea caz este afisata data de astazi.&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=672</id>
		<title>Discuție:Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=672"/>
				<updated>2006-03-17T17:30:48Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Mai multe despre ghilimele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; - tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' - tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` - sunt folosite pentru a executa comanda aflata intre acestea&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #echo &amp;quot;Astazi este data&amp;quot;&lt;br /&gt;
 #echo &amp;quot;Astazi este `date`&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Se observa ca in primul caz a fost afisat sirul de caractere &amp;quot;Astazi este data&amp;quot; iar in cel de-al doilea caz este afisata data de astazi.&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=670</id>
		<title>Discuție:Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=670"/>
				<updated>2006-03-17T17:30:38Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Mai multe despre ghilimele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; - tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' - tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` - sunt folosite pentru a executa comanda aflata intre acestea&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #echo &amp;quot;Astazi este data&amp;quot;&lt;br /&gt;
 #echo &amp;quot;Astazi este `date`&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Se observa ca in primul caz a fost afisat sirul de caractere &amp;quot;Astazi este data&amp;quot; iar in cel de-al doilea caz este afisata data de astazi.&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=669</id>
		<title>Discuție:Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=669"/>
				<updated>2006-03-17T17:27:59Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Mai multe despre ghilimele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; - tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' - tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` - sunt folosite pentru a executa comanda aflata intre acestea&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=668</id>
		<title>Discuție:Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=668"/>
				<updated>2006-03-17T17:27:36Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Mai multe despre ghilimele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` sunt folosite pentru a executa comanda aflata intre acestea&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=667</id>
		<title>Discuție:Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=667"/>
				<updated>2006-03-17T17:27:14Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Mai multe despre ghilimele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; &amp;quot; &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; ' &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'ghilimele simple' tot ceea ce se afla intre ghilimele simple va ramane neschimbat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; ` &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
`glilimele inclinate` sunt folosite pentru a executa comanda aflata intre acestea&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=666</id>
		<title>Discuție:Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=666"/>
				<updated>2006-03-17T17:25:27Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Mai multe despre ghilimele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; &amp;quot; &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=665</id>
		<title>Discuție:Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=665"/>
				<updated>2006-03-17T17:25:11Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Mai multe despre ghilimele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;b&amp;gt; &amp;quot; &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ghilimele duble&amp;quot; tot ceea ce se afla intre glilimele duble este considerat doar o insiruire de caractere, cu exceptia caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=664</id>
		<title>Discuție:Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Discu%C8%9Bie:Tutorial_Shell_Scripting&amp;diff=664"/>
				<updated>2006-03-17T17:24:01Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Mai multe despre ghilimele===&lt;br /&gt;
&lt;br /&gt;
In programarea de tip shell bash exista trei tipuri de ghilimele:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;b&amp;gt; &amp;quot; &amp;lt;/b&amp;gt; - &amp;quot;ghilimele duble&amp;quot; tot ceea ce se afla intre glilimele&lt;br /&gt;
 duble este considerat doar o insiruire de caractere, cu exceptia&lt;br /&gt;
 caracterelor &amp;lt;b&amp;gt;\&amp;lt;/b&amp;gt; si &amp;lt;b&amp;gt;$&amp;lt;/b&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=671</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=671"/>
				<updated>2006-03-17T17:18:30Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Bazele programarii Shell (bash) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatie:&lt;br /&gt;
&lt;br /&gt;
* in exemplul de mai jos executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folosind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Mai multe despre ghilimele===&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Discu%C8%9Bie_Utilizator:Xsimio&amp;diff=2341</id>
		<title>Discuție Utilizator:Xsimio</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Discu%C8%9Bie_Utilizator:Xsimio&amp;diff=2341"/>
				<updated>2006-02-28T09:27:17Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Discu%C8%9Bie_Utilizator:Xsimio&amp;diff=620</id>
		<title>Discuție Utilizator:Xsimio</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Discu%C8%9Bie_Utilizator:Xsimio&amp;diff=620"/>
				<updated>2006-02-28T09:27:04Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Operatii aritmetice */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Observatii==&lt;br /&gt;
* inmultirea se face folosind * , nu \* , backslashul e necesar uneori pt. a feri asteriskul de shell (vezi mai jos)&lt;br /&gt;
* backtickurile n-au nici o treaba cu expr&lt;br /&gt;
* expr e foarte greoi comparativ cu arithmetic evaluation din bash&lt;br /&gt;
&lt;br /&gt;
=exemple=&lt;br /&gt;
&lt;br /&gt;
 $ expr 2 + 3  # fara ` sau echo&lt;br /&gt;
 5&lt;br /&gt;
 $ set -f ; expr 2 * 3  # shell fara pathname expansion, no \* required, no backticks either&lt;br /&gt;
 6&lt;br /&gt;
 $ echo $[((2*2)**2+2*2+2/2)&amp;lt;&amp;lt;2/2] # eat that, expr!&lt;br /&gt;
 42&lt;br /&gt;
&lt;br /&gt;
see?  :)&lt;br /&gt;
[[Utilizator:Petre|Petre]] 20 Feb 2006 04:34 (EET)&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=662</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=662"/>
				<updated>2006-02-28T09:25:48Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Operatii aritmetice */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatie:&lt;br /&gt;
&lt;br /&gt;
* in exemplul de mai jos executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folosind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=618</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=618"/>
				<updated>2006-02-28T09:24:51Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Operatii aritmetice */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatii:&lt;br /&gt;
&lt;br /&gt;
* inmultirea se face folosind &amp;lt;b&amp;gt;\*&amp;lt;/b&amp;gt; si nu &amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* in exemplul de mai jos executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folosind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=617</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=617"/>
				<updated>2006-02-28T09:07:39Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele pot fi formate din cel putin un caracter alfanumeric sau pot incepe cu un caracter &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatii:&lt;br /&gt;
&lt;br /&gt;
* inmultirea se face folosind &amp;lt;b&amp;gt;\*&amp;lt;/b&amp;gt; si nu &amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folod\sind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=616</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=616"/>
				<updated>2006-02-19T22:44:50Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bazele programarii Shell (bash)==&lt;br /&gt;
&lt;br /&gt;
===Cum scriem scripturi shell===&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
===Variabilele in Shell===&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
===Cum sa utilizam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
===Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)===&lt;br /&gt;
&lt;br /&gt;
* Variabilele trebuie sa inceapa cu un caracter alfanumeric sau cu un &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Cum afisam si accesam variabilele definite de utilizator===&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;br /&gt;
&lt;br /&gt;
===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatii:&lt;br /&gt;
&lt;br /&gt;
* inmultirea se face folosind &amp;lt;b&amp;gt;\*&amp;lt;/b&amp;gt; si nu &amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folod\sind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Discu%C8%9Bie_Utilizator:Xsimio&amp;diff=612</id>
		<title>Discuție Utilizator:Xsimio</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Discu%C8%9Bie_Utilizator:Xsimio&amp;diff=612"/>
				<updated>2006-02-19T22:43:48Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Operatii aritmetice */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatii:&lt;br /&gt;
&lt;br /&gt;
* inmultirea se face folosind &amp;lt;b&amp;gt;\*&amp;lt;/b&amp;gt; si nu &amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folod\sind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;br /&gt;
&lt;br /&gt;
Trebuie mentionat ca intotdeauna folosirea ghilimelelor inclinate are ca efect executia comenzii shell care se afla intre acestea si folosirea in script a rezultatului obtinut prin executarea comenzii respective. Acest lucru este universal valabil in programarea shell, nu numai in cazul comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Discu%C8%9Bie_Utilizator:Xsimio&amp;diff=610</id>
		<title>Discuție Utilizator:Xsimio</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Discu%C8%9Bie_Utilizator:Xsimio&amp;diff=610"/>
				<updated>2006-02-19T22:40:26Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Operatii aritmetice */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\*&amp;lt;/b&amp;gt; inmultirea&lt;br /&gt;
&lt;br /&gt;
Exista si alti operatori matematici insa acestia vor fi discutati mai tarziu pe parcursul acestui tutorial.&lt;br /&gt;
&lt;br /&gt;
Observatii:&lt;br /&gt;
&lt;br /&gt;
* inmultirea se face folosind &amp;lt;b&amp;gt;\*&amp;lt;/b&amp;gt; si nu &amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* executia comenzii &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt; se face folod\sind ghilimele inclinate, si nu ghilimele simple si nici duble; urmatoarele exemple sper sa va lamureasca in legatura cu folosirea ghilimelelor pentru executia comenzilor:&lt;br /&gt;
&lt;br /&gt;
 #echo &amp;quot;expr 4 + 5&amp;quot;&lt;br /&gt;
 #echo 'expr 4 + 5'&lt;br /&gt;
 #echo `expr 4 + 5`&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Discu%C8%9Bie_Utilizator:Xsimio&amp;diff=609</id>
		<title>Discuție Utilizator:Xsimio</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Discu%C8%9Bie_Utilizator:Xsimio&amp;diff=609"/>
				<updated>2006-02-19T22:34:03Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Operatii aritmetice===&lt;br /&gt;
&lt;br /&gt;
Pentru efectuarea operatiilor aritmetice este folosira comanda &amp;lt;b&amp;gt;expr&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 expr argument1 operator_matematic argument2&lt;br /&gt;
&lt;br /&gt;
Operatorul matematic poate fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; adunarea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; scaderea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; impartirea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;%&amp;lt;/b&amp;gt; restul impartirii&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\*&amp;lt;/b&amp;gt; inmultirea&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Discu%C8%9Bie_Utilizator:Xsimio&amp;diff=608</id>
		<title>Discuție Utilizator:Xsimio</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Discu%C8%9Bie_Utilizator:Xsimio&amp;diff=608"/>
				<updated>2006-02-19T21:52:53Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;petre, sau cine se ocupa de treaba asta dragutza, nu ar fi interesant sa faci un update la versiunea de wiki? imi place mai mult ala nou :)&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=604</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=604"/>
				<updated>2006-02-19T16:26:05Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cum scriem scripturi shell==&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
==Variabilele in Shell==&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
==Cum sa utilizam variabilele definite de utilizator==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
==Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)==&lt;br /&gt;
&lt;br /&gt;
* Variabilele trebuie sa inceapa cu un caracter alfanumeric sau cu un &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Cum afisam si accesam variabilele definite de utilizator==&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=603</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=603"/>
				<updated>2006-02-19T16:24:55Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: /* &amp;lt;b&amp;gt;Bazele programarii Shell (bash)&amp;lt;/b&amp;gt; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;====Bazele programarii Shell (bash)====&lt;br /&gt;
&lt;br /&gt;
==Cum scriem scripturi shell==&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
==Variabilele in Shell==&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
==Cum sa utilizam variabilele definite de utilizator==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
==Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)==&lt;br /&gt;
&lt;br /&gt;
* Variabilele trebuie sa inceapa cu un caracter alfanumeric sau cu un &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Cum afisam si accesam variabilele definite de utilizator==&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=602</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=602"/>
				<updated>2006-02-19T16:24:12Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;lt;b&amp;gt;Bazele programarii Shell (bash)&amp;lt;/b&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
==Cum scriem scripturi shell==&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
==Variabilele in Shell==&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
==Cum sa utilizam variabilele definite de utilizator==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
==Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)==&lt;br /&gt;
&lt;br /&gt;
* Variabilele trebuie sa inceapa cu un caracter alfanumeric sau cu un &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Cum afisam si accesam variabilele definite de utilizator==&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=601</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=601"/>
				<updated>2006-02-19T16:22:45Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;====&amp;lt;b&amp;gt;Bazele programarii Shell (bash)&amp;lt;/b&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
==Cum scriem scripturi shell==&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
==Variabilele in Shell==&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
==Cum sa utilizam variabilele definite de utilizator==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
==Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)==&lt;br /&gt;
&lt;br /&gt;
* Variabilele trebuie sa inceapa cu un caracter alfanumeric sau cu un &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Cum afisam si accesam variabilele definite de utilizator==&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	<entry>
		<id>https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=600</id>
		<title>Tutorial Shell Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.lug.ro/index.php?title=Tutorial_Shell_Scripting&amp;diff=600"/>
				<updated>2006-02-19T16:21:41Z</updated>
		
		<summary type="html">&lt;p&gt;Xsimio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cum scriem scripturi shell==&lt;br /&gt;
&lt;br /&gt;
Urmatorii pasi sunt necesari pentru scrierea scripturilor shell:&lt;br /&gt;
&lt;br /&gt;
* folositi editorul dumneavoastra preferat (eu folosesc mcedit); primul rand din fisier trebuie sa fie urmatorul:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
* dupa scrierea scriptului, setati permisiunile fisierului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 chmod permisiuni script&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemplu:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # chmod +x scriptul-meu&lt;br /&gt;
 # chmod 755 scriptul-meu&lt;br /&gt;
&lt;br /&gt;
* executarea scriptului dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 bash scriptul-meu&lt;br /&gt;
 sh scriptul-meu&lt;br /&gt;
 ./scriptul-meu&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # bash scriptul-meu&lt;br /&gt;
 # sh scriptul-meu&lt;br /&gt;
 # ./scriptul-meu&lt;br /&gt;
&lt;br /&gt;
Acum suntem pregatiti sa scriem primul script shell care va afisa &amp;lt;b&amp;gt;&amp;quot;Acesta este primul meu script&amp;quot;&amp;lt;/b&amp;gt;. Vom crea fisierul scriptul-meu.sh in care vom pune liniile de mai jos. Crearea fisierului si scrierea lui se va face folosind comenzile:&lt;br /&gt;
&lt;br /&gt;
 # touch scriptul-meu.sh&lt;br /&gt;
 # mcedit scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Acesta este primul meu script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea fisierului putem rula scriptul cu urmatoarea comanda:&lt;br /&gt;
&lt;br /&gt;
 # ./scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Vom observa ca scriptul nu a fost rulat deoarece nu am setat atributul de executie scriptului. Pentru a face acest lucru vom rula comanda:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x scriptul-meu.sh&lt;br /&gt;
&lt;br /&gt;
Acest script va sterge ecranul si va afisa apoi pe acesta &amp;quot;&amp;lt;b&amp;gt;Acesta este primul meu script&amp;lt;/b&amp;gt;&amp;quot; Pentru scripturi scrise in shell scripting este recomandat sa se foloseasca extensia .sh penntru a fi mai usor recunoscute.&lt;br /&gt;
&lt;br /&gt;
Exercitiu. Scrieti si executati urmatorul script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 echo &amp;quot;Buna $USER&amp;quot;&lt;br /&gt;
 echo &amp;quot;Astazi este&amp;quot;; date&lt;br /&gt;
 echo &amp;quot;Numarul userilor logati este&amp;quot;; who | wc -l&lt;br /&gt;
 echo &amp;quot;Calendarul este&amp;quot;&lt;br /&gt;
 cal&lt;br /&gt;
&lt;br /&gt;
==Variabilele in Shell==&lt;br /&gt;
&lt;br /&gt;
In shell scripting exista doua tipuri de variabile:&lt;br /&gt;
&lt;br /&gt;
* Variabilele sistemului, acestea sunt create si mentinute de catre linux, si sunt scrise cu majuscule;&lt;br /&gt;
* Variabilele definite de catre utilizator, acestea sunt scrise cu minuscule.&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza o lista cu toate variabilele sistemului si valorile atribuite acestora, se poate da comanda shell:&lt;br /&gt;
&lt;br /&gt;
 # set&lt;br /&gt;
&lt;br /&gt;
Pentru a vizualiza doar valorile unor anumite variabile se pot da comenzile:&lt;br /&gt;
&lt;br /&gt;
 # echo $USER&lt;br /&gt;
 # echo $HOME&lt;br /&gt;
&lt;br /&gt;
==Cum sa utilizam variabilele definite de utilizator==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 numele_variabilei=valoare&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarea nu este corecta, deoarece numele variabilei trebuie sa se afle in stanga semnului egal iar valoare atribuita acesteia in dreapta.&lt;br /&gt;
&lt;br /&gt;
 # 10=numar&lt;br /&gt;
&lt;br /&gt;
Salvati si executati urmatorul script&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 clear&lt;br /&gt;
 numar=10&lt;br /&gt;
 echo $numar&lt;br /&gt;
&lt;br /&gt;
==Reguli in definirea variabilelor (atat cele ale sistemului cat si cele definite de utilizator)==&lt;br /&gt;
&lt;br /&gt;
* Variabilele trebuie sa inceapa cu un caracter alfanumeric sau cu un &amp;quot;underscore&amp;quot; (_) urmat de cel putin un caracter alfanumeric.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Exemple&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 HOME&lt;br /&gt;
 SYSTEM_VERSION&lt;br /&gt;
 vehicul&lt;br /&gt;
 numar&lt;br /&gt;
&lt;br /&gt;
* Nu folosite spatii in nici una din partile semnului egal.&lt;br /&gt;
&lt;br /&gt;
Urmatoarea atribuire este corecta:&lt;br /&gt;
&lt;br /&gt;
 numar=10&lt;br /&gt;
&lt;br /&gt;
Urmatoarele atribuiri sunt insa incorecte:&lt;br /&gt;
&lt;br /&gt;
 numar =10&lt;br /&gt;
 numar= 10&lt;br /&gt;
 numar = 10&lt;br /&gt;
&lt;br /&gt;
* Variabilele sunt case-sensitive, la fel ca si numele fisierelor in linux. Urmatoarele variabile nu sunt identice, ci diferite:&lt;br /&gt;
&lt;br /&gt;
 no=10&lt;br /&gt;
 No=11&lt;br /&gt;
 NO=20&lt;br /&gt;
 nO=2&lt;br /&gt;
&lt;br /&gt;
* Pot de asemenea fi definite variabile nule, dupa cum se vede in exemplul urmator:&lt;br /&gt;
&lt;br /&gt;
 vehicul=&lt;br /&gt;
 vehicul=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Cum afisam si accesam variabilele definite de utilizator==&lt;br /&gt;
&lt;br /&gt;
Pentru a afisa si accesa variabilele definite de utilizator se va utiliza:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;i&amp;gt;Sintaxa:&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $numele_variabilei&lt;br /&gt;
&lt;br /&gt;
Definirea variabilei vehicul si numar se va face dupa cum urmeaza:&lt;br /&gt;
&lt;br /&gt;
 # vehicul=autobuz&lt;br /&gt;
 # numar=10&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea variabilelor se va folosi:&lt;br /&gt;
&lt;br /&gt;
 # echo $vehicul&lt;br /&gt;
 # echo $numar&lt;br /&gt;
&lt;br /&gt;
Pentru afisarea valorii variabilei &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; nu folositi &amp;lt;b&amp;gt;echo vehicul&amp;lt;/b&amp;gt; deoarece va afisa cuvantul &amp;lt;b&amp;gt;vehicul&amp;lt;/b&amp;gt; si nu continutul acestei variabile.&lt;br /&gt;
&lt;br /&gt;
Exercitiu: scrieti si rulati urmatorul script. Va atentionam ca am introdus intentionat anumite greseli pentru a va testa vigilenta.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 numele_meu=ADI&lt;br /&gt;
 sistemul_meu = DEBIAN&lt;br /&gt;
 numarul_meu=10&lt;br /&gt;
 echo &amp;quot;Numele meu este $numele_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Sistemul meu este $sistemul_meu&amp;quot;&lt;br /&gt;
 echo &amp;quot;Numarul meu este numarul_meu, poti vedea acest numar?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Comanda &amp;lt;b&amp;gt;echo&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Aceasta comanda este folosita pentru a afisa pe ecran text sau valori ale unor variabile.&lt;br /&gt;
&lt;br /&gt;
Sintaxa generala a comenzii este:&lt;br /&gt;
&lt;br /&gt;
 #echo [optiuni] [insiruire de caractere, variabile...]&lt;br /&gt;
&lt;br /&gt;
Optiunile folosite sunt urmatoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-e&amp;lt;/b&amp;gt; activeaza interpretarea caracterului backslash in sirul de caractere care urmeaza&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;-E&amp;lt;/b&amp;gt; dezactiveaza interpretarea acestuia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\\&amp;lt;/b&amp;gt; afiseaza caracterul backslash in sine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\a&amp;lt;/b&amp;gt; efectueaza o avertizare sonora (eu sunt la distanta de server in acest moment)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\b&amp;lt;/b&amp;gt; are efectul apasarii tastei backspace de pe tastatura, sterge ultimul caracter afisat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\c&amp;lt;/b&amp;gt; sterge sirul de caractere care urmeaza acestei comenzi, va fi afisat doar ceea ce este in fata lui &amp;quot;\c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\n&amp;lt;/b&amp;gt; face trecerea la o linie noua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\r&amp;lt;/b&amp;gt; are efectul apasarii tastei enter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;\t&amp;lt;/b&amp;gt; afiseaza caracterul tab (invizibil)&lt;/div&gt;</summary>
		<author><name>Xsimio</name></author>	</entry>

	</feed>