0% au considerat acest document util (0 voturi)
19 vizualizări1 pagină

Scripting

Shell scripting este o metodă de automatizare a sarcinilor în sistemele de operare Unix, utilizând diverse shell-uri precum bash. Acesta permite manipularea fișierelor, gestionarea proceselor și interacțiunea cu utilizatorul prin scripturi scrise în sintaxă specifică. Documentul oferă exemple de scripturi, explicații despre variabile, array-uri și structuri de control, precum if-then-else.

Încărcat de

addelyka
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
19 vizualizări1 pagină

Scripting

Shell scripting este o metodă de automatizare a sarcinilor în sistemele de operare Unix, utilizând diverse shell-uri precum bash. Acesta permite manipularea fișierelor, gestionarea proceselor și interacțiunea cu utilizatorul prin scripturi scrise în sintaxă specifică. Documentul oferă exemple de scripturi, explicații despre variabile, array-uri și structuri de control, precum if-then-else.

Încărcat de

addelyka
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

SO - suport seminar

Shell scripting
Shell scripting este o metodă prin care se creează
programe sau scripturi ce sunt executate într-un
shell al sistemului de operare. Shell scripting-ul este
puternic și flexibil, permițând automatizarea
sarcinilor repetitive, gestionarea sistemului,
executarea comenzi complexe și multe altele.

Scripturile shell sunt de obicei scrise pentru shell-


uri de tip Unix, cum ar fi Bourne Shell ( sh ), Bourne
Again Shell ( bash ), C Shell ( csh ), Korn Shell
( ksh ), și altele, fiecare având propria sa sintaxă și
set de funcționalități. Cel mai comun shell utilizat
pentru scripting în sistemele Linux și Unix este
bash .

Caracteristici principale ale Shell


Scripting:

• Automatizarea sarcinilor: Poți automatiza


sarcinile de rutină cum ar fi backup-ul de date,
actualizările de sistem și gestionarea fișierelor.

• Execuție de comenzi în loturi: Permite


executarea unei serii de comenzi într-o singură
rulare, fără intervenție manuală.

• Manipularea fișierelor și directoarelor: Poți


crea, șterge, muta și modifica fișiere și
directoare.

• Gestionarea proceselor: Permite oprirea,


pornirea și monitorizarea proceselor de sistem.

• Interacțiune cu utilizatorul: Poți solicita input de


la utilizator, afișa mesaje și oferi feedback.

Exemplu simplu de Shell


Script:
#!/bin/bash

# Afișează un mesaj de bun venit


echo "Bine ai venit!"

# Cere utilizatorului să introducă numele


echo -n "Te rog să îți introduci numele: "
read nume

# Salută utilizatorul
echo "Salut, $nume!"

Acest script utilizează:

• #!/bin/bash pentru a specifica interpretorul


care va executa scriptul.

• echo pentru a afișa mesaje.

• read pentru a citi intrarea de la tastatură.

Pentru a executa un script shell pe un sistem Unix


sau Linux, trebuie să urmezi câțiva pași simpli.
Presupunând că ai un script salvat cu numele
[Link] , iată cum l-ai putea rula:

1. Fă Scriptul Executabil

În primul rând, trebuie să te asiguri că scriptul are


permisiuni de executare. Acest lucru se face cu
comanda chmod (change mode). Deschide un
terminal și navighează la directorul unde ai salvat
scriptul. Apoi, rulează:

~$ chmod +x [Link]

Această comandă modifică permisiunile fișierului


[Link] pentru a permite executarea acestuia.

2. Execută Scriptul

După ce ai acordat permisiunile necesare, există


două moduri prin care poți executa scriptul:

Opțiunea 1: Folosind Calea Relativă sau Absolută

Dacă te afli în același director cu scriptul, îl poți


executa folosind o cale relativă:

~$ ./[Link]

Dacă scriptul se află într-un alt director, poți utiliza


calea absolută:

~$ /path/to/your/[Link]

Opțiunea 2: Folosind Interpretorul Direct

De asemenea, poți folosi shell-ul direct pentru a


executa scriptul, fără a modifica permisiunile de
executare. Dacă scriptul este scris pentru Bash,
folosești:

~$ bash [Link]

Acest mod de executare interpretează direct


conținutul fișierului ca un script Bash, fără a
necesita permisiuni de executare pe fișier.

Note Importante

• Asigură-te că prima linie a scriptului tău conține


shebang-ul ( #! ) urmat de calea către
interpretorul adecvat. Pentru un script Bash,
aceasta este de obicei #!/bin/bash .

• Dacă întâmpini erori referitoare la "bad


interpreter: No such file or directory", verifică
shebang-ul pentru erori de cale.

Comentarii în Bash Script


• Comentarii pe o singură linie: Încep cu simbolul
# . Tot textul de pe linie după # este tratat ca
un comentariu.

• Comentarii pe mai multe linii: Bash nu are o


sintaxă specifică pentru comentariile pe mai
multe linii similar cu alte limbaje de programare,
dar poți folosi mai multe linii de comentarii pe o
singură linie sau un hack folosind :
'...comment...' .

#!/bin/bash

# Acest script afișează un mesaj de salut.

echo "Salut!"

# Calcularea sumei a două numere


numar1=5
numar2=10
suma=$((numar1 + numar2)) # Adună numărul1
și numărul2

echo "Suma este: $suma"

# Următoarele linii sunt comentate și nu


vor fi executate
# echo "Acesta este un comentariu pe mai
multe linii."
# echo "Această parte a codului este
dezactivată pentru demonstrație."

# Folosind hack-ul pentru comentarii pe mai


multe linii
: '
Acesta este un exemplu de comentariu
pe mai multe linii folosind hack-ul cu :
'

Utilizarea Variabilelor
În exemplul anterior, variabilele numar1 și numar2
sunt folosite pentru a stoca valori numerice. Apoi,
aceste valori sunt folosite pentru a efectua un calcul
matematic.

numar1=5
numar2=10

Alocarea valorilor variabilelor se face fără spații în


jurul semnului = . Pentru a accesa valoarea unei
variabile, se utilizează semnul $ înaintea numelui
variabilei.

Calculul Expresiei Matematice

Shell-ul Bash permite efectuarea calculului


expresiilor matematice folosind diverse metode. În
exemplul dat, este folosită comanda internă
$((expresie)) pentru a evalua suma a două
numere.

suma=$((numar1 + numar2)) # Adună numărul1 și n

Acest mecanism, $((expresie)) , evaluează


expresia matematică specificată în interiorul
parantezelor duble și atribuie rezultatul variabilei
suma . În acest caz, numar1 și numar2 sunt
adunate, iar rezultatul lor, 15 , este stocat în
variabila suma .

Afișarea rezultatului se face folosind echo :

echo "Suma este: $suma"

Aceasta afișează valoarea variabilei suma în


consolă, care în exemplul nostru este 15 .

În Bash scripting, variabilele nu sunt tipizate în mod


strict în sensul limbajelor de programare static
tipizate precum Java sau C++. În schimb, Bash
tratează toate variabilele ca șiruri de caractere
(strings). Cu toate acestea, Bash permite efectuarea
de operații aritmetice pe variabile fără a necesita
conversia explicită între tipuri de date, atâta timp cât
valorile variabilelor pot fi interpretate ca numere.

Caracteristici ale Variabilelor în Bash:

• Dinamice: Variabilele în Bash pot stoca atât


numere cât și text, și tipul lor poate fi schimbat
dinamic în timpul execuției scriptului.

• Conversia Automată: Când efectuați operații


aritmetice, Bash încearcă să convertească
automat valorile la numere. Dacă o variabilă
conține un șir care poate fi interpretat ca un
număr, atunci poate fi utilizat direct în expresii
aritmetice.

• Lipsa Declarației: Nu este necesar să declari


tipul unei variabile înainte de a o folosi.
Atribuirea unei valori unei variabile este
suficientă pentru a o declara.

Chiar dacă Bash gestionează variabilele într-un mod


flexibil, această flexibilitate vine cu
responsabilitatea de a asigura că valorile variabilelor
sunt adecvate pentru operațiile la care sunt supuse.
De exemplu, încercarea de a efectua o operație
aritmetică cu un șir de caractere care nu poate fi
interpretat ca un număr va duce la o eroare.

Array-uri (Vectori)

Array-urile permit stocarea mai multor valori într-o


singură variabilă, fiecare valoare putând fi accesată
printr-un index. Bash suportă array-uri
unidimensionale.

Exemplu de Declarare și Utilizare:

nume=('Alice' 'Bob' 'Carol')


echo "${nume[0]}" # Afișează Alice
echo "${nume[@]}" # Afișează toate elementele a
echo "${#nume[@]}" # Afișează numărul de elemen

nume+=("Dave")
echo "${nume[@]}" # Afișează toate elementele a

Lucrul cu sub-array-uri (sau porțiuni dintr-un array)


se poate face utilizând sintaxa de slicing de array-
uri. Aceasta permite extragerea unei secțiuni dintr-
un array bazată pe indicii de start și stop. Sintaxa
generală pentru slicing este:

${array[@]:pozitie_start:lungime}

Unde:

• array este numele array-ului din care vrei să


extragi sub-array-ul.

• pozitie_start este indicele elementului de la


care începe extracția (indicele începe de la 0).

• lungime este numărul de elemente de extras


din array, începând cu pozitie_start .

Exemplu de Utilizare

Să presupunem că avem următorul array:

numere=(0 1 2 3 4 5 6 7 8 9)

Dacă dorim să extragem un sub-array care începe


de la indicele 3 și are lungimea 4, vom folosi:

echo "${numere[@]:3:4}"

Acesta va afișa:

3 4 5 6

• Dacă omiti parametrul lungime , se vor extrage


toate elementele începând cu pozitie_start
până la sfârșitul array-ului.

• Bash nu suportă direct array-uri


multidimensionale, așa că lucrul cu sub-array-
uri necesită manipulare manuală sau abordări
creative pentru structuri de date mai complexe.

Array-uri Asociative (Dictionare sau Map-


uri)

Array-urile asociative sunt o extensie a array-urilor


simple și permit accesarea valorilor folosind chei
unice, în loc de indici numerici. Sunt similare cu
dictionarele din Python sau obiectele din JavaScript.

Exemplu de Declarare și Utilizare:

Pentru a folosi array-uri asociative, trebuie să


declarăm variabila folosind declare -A :

declare -A capitale
capitale["Franța"]="Paris"
capitale["Germania"]="Berlin"
echo "Capitala Franței este: ${capitale["Franța

IF / THEN / ELSE
Structura if-then-else în Bash este o construcție
fundamentală folosită pentru a testa condiții și a
executa diferite blocuri de cod bazate pe rezultatul
testului. Această structură permite scripturilor să ia
decizii și să execute diferite acțiuni în funcție de
diferite condiții.

Sintaxa de bază

if [ condiție ]; then
# Comenzi executate dacă condiția este adevăr
else
# Comenzi executate dacă condiția este falsă
fi

• if - începe testul condițional.

• [ condiție ] - condiția care trebuie evaluată.


Parantezele drepte [ ] reprezintă comanda
test în Bash.

• then - dacă condiția evaluată este adevărată,


comenzile care urmează până la else sau fi
vor fi executate.

• else - (opțional) specifică comenzile care vor


fi executate dacă condiția este falsă.

• fi - încheie blocul if .

Exemplu 1: Test simplu

#!/bin/bash

numar=10

if [ $numar -eq 10 ]; then


echo "Numărul este egal cu 10."
else
echo "Numărul nu este egal cu 10."
fi

Acest script va afișa "Numărul este egal cu 10."


pentru că condiția testată ( $numar -eq 10 ) este
adevărată.

Exemplu 2: Verificarea Existentei unui


Fișier

#!/bin/bash

filename="[Link]"

if [ -e "$filename" ]; then
echo "Fișierul există."
else
echo "Fișierul nu există."
fi

Acest script verifică dacă fișierul [Link]


există în directorul curent. Dacă fișierul există, va
afișa "Fișierul există."; altfel, va afișa "Fișierul nu
există."

Exemplu 3: Structură If-Elif-Else

Bash permite și utilizarea elif pentru a testa


condiții multiple în aceeași structură if .

#!/bin/bash

nota=85

if [ $nota -ge 90 ]; then


echo "Ai obținut A."
elif [ $nota -ge 80 ]; then
echo "Ai obținut B."
else
echo "Ai obținut C sau mai jos."
fi

Acest script evaluează o notă și afișează


calificativul corespunzător. În exemplul nostru, va
afișa "Ai obținut B.".

• Este important să pui spațiu după [ și înainte


de ] în condiția if .

• Pentru a testa mai multe condiții în cadrul


aceleiași instrucțiuni if , poți folosi operatorii
logici && (și) și || (sau).

• Folosirea ghilimelelor în jurul variabilelor, de


exemplu, "$filename" , previne erori legate de
valori goale sau conținând spații.

În Bash, operatorii de test sunt folosiți pentru a


evalua condiții în instrucțiunile de control, cum ar fi
if , while , și until . Acești operatori permit
compararea numerică, verificarea șirurilor de
caractere, testarea atributelor fișierelor și altele. Iată
o listă a celor mai comuni operatori de test în Bash:

Testarea Numerică

• -eq : egal cu (ex: $a -eq $b )

• -ne : nu este egal cu (ex: $a -ne $b )

• -gt : mai mare decât (ex: $a -gt $b )

• -ge : mai mare sau egal cu (ex: $a -ge $b )

• -lt : mai mic decât (ex: $a -lt $b )

• -le : mai mic sau egal cu (ex: $a -le $b )

Testarea Șirurilor de Caractere

• = sau == : egal (ex: $a = $b )

• != : nu este egal (ex: $a != $b )

• -z : șirul este gol (ex: -z $a )

• -n : șirul nu este gol (ex: -n $a )

• $a : șirul a are o lungime mai mare decât 0

Testarea Fișierelor

• -e : fișierul există (ex: -e [Link] )

• -f : fișierul există și este un fișier obișnuit (nu


un director sau un dispozitiv) (ex: -f
[Link] )

• -d : fișierul există și este un director (ex: -d


director )

• -r : fișierul există și este citibil (ex: -r


[Link] )

• -w : fișierul există și este scriibil (ex: -w


[Link] )

• -x : fișierul există și este executabil (ex: -x


[Link] )

• -s : fișierul există și nu este gol (are


dimensiunea mai mare decât zero) (ex: -s
[Link] )

• -L : fișierul există și este un link simbolic (ex: -


L link_simbolic )

Operatori Logici

• ! : negație (inversarea stării de adevăr) (ex: !


-e [Link] )

• -a sau && : și logic (ex: [$a -lt 20] && [$b -


gt 100] )

• -o sau || : sau logic (ex: [$a -lt 20] || [$b


-gt 100] )

Pentru a utiliza acești operatori în scripturile tale


Bash, poți folosi comanda test sau paranteze
pătrate (de exemplu, [ $a -lt $b ] ). Este
important să pui spațiu după [ , înainte de ] , și în
jurul operatorilor pentru a asigura interpretarea
corectă a expresiei de către shell.

Structuri repetitive: FOR /


WHILE / UNTIL
Aceste structuri sunt esențiale pentru scrierea
scripturilor care necesită iterație, cum ar fi
procesarea colecțiilor de date sau așteptarea
schimbării unei condiții.

1. FOR

Structura for repetă un set de comenzi pentru


fiecare element dintr-o listă.

Exemplu:

#!/bin/bash

for nume in Alice Bob Carol


do
echo "Salut, $nume!"
done

Acest script va afișa un mesaj de salut pentru


fiecare nume specificat în listă.

Structura for în Bash poate fi utilizată și cu un


iterator numeric, permițând iterarea printr-o
secvență de numere. Acest lucru este des realizat
folosind o sintaxă specifică, care seamănă cu cea
din limbajele de programare tradiționale. Iată un
exemplu care afișează numerele de la 1 la 5:

Exemplu 2:

#!/bin/bash

for (( i=1; i<=5; i++ ))


do
echo "Numărul curent este: $i"
done

Exemplu 3:

#!/bin/bash

#iterarea element cu element printr-un array, c


nume=('Alice' 'Bob' 'Carol')
for i in "${!nume[@]}"; do
echo "Salut, ${nume[i]}!"
done

Aici, ${!nume[@]} generează o listă de indici


pentru array-ul nume , iar for iterează prin acești
indici. Variabila i reprezintă pe rând fiecare indice,
permițându-ți să accesezi elementul corespunzător
din array ( ${nume[i]} ).

2. WHILE

Structura while execută un bloc de comenzi atât


timp cât o condiție este adevărată.

Exemplu:

#!/bin/bash

contor=1
while [ $contor -le 5 ]
do
echo "Iterația $contor"
((contor++))
done

Acest script va afișa numărul iterației de cinci ori,


incrementând variabila contor la fiecare pas până
când aceasta devine mai mare decât 5.

3. UNTIL

Structura until este similară cu while , dar


repetă comenzi până când condiția devine
adevărată (adică face loop pe condiție falsă).

Exemplu:

#!/bin/bash

contor=1
until [ $contor -gt 5 ]
do
echo "Iterația $contor"
((contor++))
done

Acest script funcționează la fel ca exemplul while ,


afișând numărul iterației până când contor
depășește 5. Diferența principală este în verificarea
condiției: until execută blocul de comenzi atât
timp cât condiția este falsă.

Exemple comenzi in script


1. Căutarea unui Text în Fișiere

Acest script folosește grep pentru a căuta un șir


specific în toate fișierele .txt din directorul curent.

#!/bin/bash

search_string="error"
for file in *.txt; do
echo "Caută '$search_string' în $file:"
grep "$search_string" "$file" && echo
"Găsit în $file" || echo "Nu a fost găsit
în $file"

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