This shows you the differences between two versions of the page.
uso:cursuri:curs-06 [2020/11/16 18:10] ebru.resul [for, while, if, else] |
uso:cursuri:curs-06 [2022/11/07 15:27] (current) sergiu.weisz |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Curs 06 - Automatizarea sarcinilor. Shell scripting ======= | ====== Curs 06 - Automatizarea sarcinilor. Shell scripting ======= | ||
- | * [[https://drive.google.com/file/d/1T1e_WwzO09TRIqOFq8uxet2jJFubZejq/view?usp=sharing| Slide-uri curs]] | + | * [[https://docs.google.com/presentation/d/1WF2R5P-L0bRIQu--DwQNH3lMeJY03qAT/edit?usp=sharing&ouid=108131427433094834232&rtpof=true&sd=true| Slide-uri curs]] |
- | * [[https://drive.google.com/open?id=1NlzJf0mJ7rpgp3lYJsEdQa7sPF-0a8pj| Handout 3on1 and notes space]] | + | |
- | * [[https://drive.google.com/open?id=1WD_veJN7rYfo7b3eJsPsN4lTOREYjpR3 | Handout 6on1]] | + | |
* **Suport de curs** | * **Suport de curs** | ||
- | * [[http://elf.cs.pub.ro/uso/res/carte/uso_cap-13-auto.pdf|Capitolul 13: Automatizarea sarcinilor]] | + | * [[https://github.com/systems-cs-pub-ro/carte-uso/releases | Utilizarea sistemelor de operare]] |
+ | * Secțiunea 13 - Automatizarea sarcinilor | ||
+ | <HTML> | ||
+ | <center> | ||
+ | <iframe src="https://docs.google.com/presentation/d/e/2PACX-1vSX5DZFvcDSXTq-6Ix7A7b4u0eJyuS2akgtTf88P5WUazC6opuAfqtkLsFyC3H4jg/embed?start=false&loop=false&delayms=3000" frameborder="0" width="480" height="389" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe> | ||
+ | </center> | ||
+ | </HTML> | ||
===== Demo ===== | ===== Demo ===== | ||
Line 16: | Line 20: | ||
Shell-ul este un interpretor de comenzi care faciliteaza accesul utilizatorului la resursele sistemului de operare. | Shell-ul este un interpretor de comenzi care faciliteaza accesul utilizatorului la resursele sistemului de operare. | ||
- | Cum arata un script shell: | + | Cum arată un script shell: |
<code> | <code> | ||
#!/bin/bash | #!/bin/bash | ||
Line 22: | Line 26: | ||
</code> | </code> | ||
- | * Ce inseamna ''#!/bin/bash?'' | + | * Ce înseamnă ''#!/bin/bash?'' |
- | Secventa de caractere (''shebang'') care este prezenta tot timpul la inceputul unui script si care indica interpretorul scriptului (in exemplul dat fiind shell-ul Bash). | + | Secvența de caractere (''shebang'') care este prezentă tot timpul la începutul unui script și care indică interpretorul scriptului (în exemplul dat fiind shell-ul Bash). |
- | * Cum cream si rulam un script? | + | * Cum creăm și rulăm un script? |
- | Putem deschide command line-ul, cream un fisier cu extensia ''.sh'' (good practice), pe care ulterior il editam folosind orice editor text (vim, Sublime etc.), caruia ulterior trebuie sa ii dam drepturi de executie (chmod pentru a schimba si ls -l pentru verificare). La sfarsit, putem rula script-ul ca pe orice executabil. | + | Putem deschide command line-ul, creăm un fișier cu extensia ''.sh'' (good practice), pe care ulterior îl edităm folosind orice editor text (vim, Sublime etc.), căruia ulterior trebuie sa îi dăm drepturi de execuție (chmod pentru a schimba și ls -l pentru verificare). La sfârșit, putem rula script-ul ca pe orice executabil. |
<code> | <code> | ||
student@uso:~/Documents$ vi script.sh | student@uso:~/Documents$ vi script.sh | ||
Line 37: | Line 41: | ||
* De ce shell scripting? | * De ce shell scripting? | ||
- | Script-urile ofera posibilitatea de automatizare a sarcinilor putand utiliza o serie mai mare de comenzi laolalta. De asemenea, structurile repetitive (for, while) si cele decizionale (if, else) pot fi implementate usor folosind shell scripting. Operatorii logici sunt si ei des folositi pentru a inlantui mai multe comenzi, la fel ca si pipe-urile (“|”) - folosite pentru a folosi output-ul unei comenzi in comanda urmatoare. | + | Script-urile oferă posibilitatea de automatizare a sarcinilor putând utiliza o serie mai mare de comenzi laolaltă. De asemenea, structurile repetitive (for, while) și cele decizionale (if, else) pot fi implementate ușor folosind shell scripting. Operatorii logici sunt și ei des folosiți pentru a înlănțui mai multe comenzi, la fel ca și pipe-urile (“|”) - folosite pentru a folosi output-ul unei comenzi în comanda următoare. |
- | Mai jos este un demo cu comenzile cele mai folosite pentru shell scripting si pentru a automatiza lucrul in linia de comanda. | + | Mai jos este un demo cu comenzile cele mai folosite pentru shell scripting și pentru a automatiza lucrul în linia de comandă. |
==== Comanda grep ==== | ==== Comanda grep ==== | ||
- | Comanda grep extrage liniile care contin o expresie regulata data dintr-un fisier. | + | Comanda grep extrage liniile care conțin o expresie regulata dată dintr-un fișier. |
<code> | <code> | ||
student@uso:~/Documents$ cat cap_si_pajura | grep frate | student@uso:~/Documents$ cat cap_si_pajura | grep frate | ||
Line 50: | Line 54: | ||
Am fost frate pentru frate. x2 | Am fost frate pentru frate. x2 | ||
Am fost frate pentru frate. x2 | Am fost frate pentru frate. x2 | ||
- | <code> | + | </code> |
- | ==== Comenzile head si tail ==== | + | ==== Comenzile head și tail ==== |
- | Comenzile head si tail sunt folosite pentru afisarea primelor/ultimelor linii sau caractere dintr-un input | + | Comenzile head si tail sunt folosite pentru afișarea primelor/ultimelor linii sau caractere dintr-un input |
<code> | <code> | ||
Line 67: | Line 71: | ||
==== Comanda seq ==== | ==== Comanda seq ==== | ||
- | Comanda seq este folosita pentru a genera o secventa de numere. | + | Comanda seq este folosită pentru a genera o secvență de numere. |
- | Flagul -s este folosit pentru a stabili caracterul care delimiteaza numerele. Delimitatorul implicit este ‘\n’. | + | Flagul -s este folosit pentru a stabili caracterul care delimitează numerele. Delimitatorul implicit este ‘\n’. |
<code> | <code> | ||
student@uso:~$ seq 4 | student@uso:~$ seq 4 | ||
Line 79: | Line 83: | ||
</code> | </code> | ||
- | In comanda de mai sus 1 reprezinta numarul de la care pornim numaratoarea, 2 este incrementul, iar 5 este numarul la care ne oprim. | + | În comanda de mai sus 1 reprezintă numarul de la care pornim numărătoarea, 2 este incrementul, iar 5 este numărul la care ne oprim. |
- | Optiunea -f este folosita pentru a afisa secventa intr-un anumit format. | + | Opțiunea -f este folosită pentru a afișa secvența într-un anumit format. |
<code> | <code> | ||
student@uso:~$ seq -f "Star Wars Episode %01g" 3 | student@uso:~$ seq -f "Star Wars Episode %01g" 3 | ||
Line 90: | Line 94: | ||
==== Comanda cut ==== | ==== Comanda cut ==== | ||
- | Comanda cut este folosita pentru a taia aceeasi sectiune din fiecare linie a unui input si a afisa aceste parti ale liniilor. | + | Comanda cut este folosită pentru a tăia aceeași secțiune din fiecare linie a unui input și a afișa aceste părți ale liniilor. |
- | De exemplu, pentru urmatorul fisier vrem sa afisam doar numele filmelor, nu si anul in care au avut loc premiera fiecaruia. | + | De exemplu, pentru următorul fișier vrem să afișăm doar numele filmelor, nu și anul în care a avut loc premiera fiecăruia. |
<code> | <code> | ||
student@uso:~$ cat asok.txt | student@uso:~$ cat asok.txt | ||
Line 110: | Line 114: | ||
</code> | </code> | ||
- | Optiunea ''-f'' se foloseste selecta ce coloane din input vrem sa fie afisate, iar optiunea ''-d'' defineste delimitatorul dintre coloane. | + | Opțiunea ''-f'' se folosește pentru a selecta ce coloane din input vrem să fie afișate, iar opțiunea ''-d'' definește delimitatorul dintre coloane. |
==== Comanda sed ==== | ==== Comanda sed ==== | ||
- | Comanda sed se poate folosi cu mai multe scopuri, sed fiind un stream editor avansat. Se foloseste in principal pentru insertii sau steregere de caractere intr-un input. | + | Comanda sed se poate folosi cu mai multe scopuri, sed fiind un stream editor avansat. Se folosește în principal pentru inserții sau șteregere de caractere într-un input. |
<code> | <code> | ||
student@uso:~$ cat text.txt | student@uso:~$ cat text.txt | ||
Line 132: | Line 136: | ||
</code> | </code> | ||
- | In exemplul de mai sus, prima aparitie de pe fiecare linie a cuvantului “unu” este inlocuita cu “bani”. Caracterul s care vine imediat dupa sed indica operatia care se face pe input (substitution) | + | În exemplul de mai sus, prima apariție de pe fiecare linie a cuvântului “unu” este înlocuită cu “bani”. Caracterul s care vine imediat după sed indică operația care se face pe input (substitution). |
- | Mai jos sunt schimbate toate aparitiile cuvantului “unu”. | + | Mai jos sunt schimbate toate aparițiile cuvântului “unu”. |
<code> | <code> | ||
student@uso:~$ sed 's/unu/bani/g' text.txt | student@uso:~$ sed 's/unu/bani/g' text.txt | ||
Line 146: | Line 150: | ||
</code> | </code> | ||
- | Comanda se poate folosi si pentru a sterge linii din input. | + | Comanda se poate folosi și pentru a șterge linii din input. |
<code> | <code> | ||
Line 157: | Line 161: | ||
</code> | </code> | ||
- | Comanda de mai sus sterge a treia linie. | + | Comanda de mai sus șterge a treia linie. |
- | Mai jos se sterge linia care contine cuvantul secventa de caractere “cinci”. | + | Mai jos se șterge linia care conține secvența de caractere “cinci”. |
<code> | <code> | ||
Line 169: | Line 173: | ||
</code> | </code> | ||
- | Folosind regex-uri, putem face pattern matching destul de usor folosind aceasta comanda. | + | Folosind regex-uri, putem face pattern matching destul de ușor folosind această comandă. |
- | De exemplu, comanda de mai jos sterge linia care contine string-ul “nu” la inceputul unui sir. | + | De exemplu, comanda de mai jos șterge linia care conține string-ul “nu” la începutul unui șir. |
<code> | <code> | ||
Line 182: | Line 186: | ||
==== Comanda wc ==== | ==== Comanda wc ==== | ||
- | Comanda wc este folosita pentru a numara liniile, cuvintele sau carcterele dintr-un input. | + | Comanda wc este folosită pentru a număra liniile, cuvintele sau carcterele dintr-un input. |
<code> | <code> | ||
Line 194: | Line 198: | ||
</code> | </code> | ||
- | 4 este numarul de linii, 56 este numarul de cuvinte, iar 307 este numarul de caractere. | + | 4 este numărul de linii, 56 este numărul de cuvinte, iar 307 este numărul de caractere. |
==== for, while, if, else ==== | ==== for, while, if, else ==== | ||
- | Inainte de a prezenta aceste instructiuni, trebuie sa intelegem ce presupune folosirea caracterului ''$'' in niste situatii. | + | Înainte de a prezenta aceste instrucțiuni, trebuie să înțelegem ce presupune folosirea caracterului ''$'' in niște situații. |
- | ''$(command)'' - se inlocuieste cu output-ul comenzii “command” | + | ''$(command)'' - se înlocuiește cu output-ul comenzii “command” |
<code> | <code> | ||
student@uso:~$ echo Output-ul este $(echo acesta) | student@uso:~$ echo Output-ul este $(echo acesta) | ||
Line 206: | Line 210: | ||
student@uso:~$ | student@uso:~$ | ||
</code> | </code> | ||
- | ''$(var)'' - valoarea ce se gaseste in variabila var | + | ''$(var)'' - valoarea ce se găsește în variabila var |
<code> | <code> | ||
student@uso:~$ a=5 | student@uso:~$ a=5 | ||
Line 215: | Line 219: | ||
==== Instructiunea if ==== | ==== Instructiunea if ==== | ||
- | Sintaxa lui if este urmatoarea: | + | Sintaxa lui if este următoarea: |
<code> | <code> | ||
Line 223: | Line 227: | ||
fi | fi | ||
</code> | </code> | ||
- | Pe langa aceasta mai putem avea si if-else sau if-elif-else-fi spre exemplu | + | Pe lângă aceasta mai putem avea și if-else sau if-elif-else-fi spre exemplu |
<code> | <code> | ||
if [ conditie ] | if [ conditie ] | ||
Line 243: | Line 247: | ||
fi | fi | ||
</code> | </code> | ||
- | Mai jos este un exemplu de folosire a unui if intr-un script. Sintaxele diferite de mai sus functioneaza la fel ca cele de pe care le stim de la programare. In schimb, conditiile sunt cele care necesita un plus de atentie. | + | Mai jos este un exemplu de folosire a unui if într-un script. Sintaxele diferite de mai sus funcționează la fel ca cele pe care le știm de la programare. În schimb, condițiile sunt cele care necesită un plus de atenție. |
<code> | <code> | ||
Line 265: | Line 269: | ||
</code> | </code> | ||
- | Instructiunile for si while pot fi folosite atat in cadrul terminalului in comenzi, dar pot fi folosite si in script-uri. | + | Instrucțiunile for și while pot fi folosite atât în cadrul terminalului în comenzi, cât și în script-uri. |
- | Mai jos este un exemplu cu loop-ul for folosit intr-o comanda | + | Mai jos este un exemplu cu loop-ul for folosit într-o comandă |
<code> | <code> | ||
Line 290: | Line 294: | ||
student@uso:~$ | student@uso:~$ | ||
</code> | </code> | ||
- | Script-ul de mai sus afiseaza suma numerelor de la 1 la 4. | + | Script-ul de mai sus afișează suma numerelor de la 1 la 4. |
- | In acelasi mod poate fi folosit si while: | + | În același mod poate fi folosit și while: |
<code> | <code> | ||
#!/bin/bash | #!/bin/bash | ||
Line 303: | Line 307: | ||
</code> | </code> | ||
- | Script-ul afiseaza valorile de la 0 la 3 | + | Script-ul afișează valorile de la 0 la 3 |
<code> | <code> | ||
student@uso:~$ ./script.sh | student@uso:~$ ./script.sh | ||
Line 312: | Line 316: | ||
student@uso:~$ | student@uso:~$ | ||
</code> | </code> | ||
- | Mai jos avem un script care pune la sfarsitul liniilor pare dintr-un text un string: | + | Mai jos avem un script care pune la sfârșitul liniilor pare dintr-un text un string: |
<code> | <code> | ||
#!/bin/bash | #!/bin/bash | ||
Line 327: | Line 331: | ||
done | done | ||
</code> | </code> | ||
- | Se observa ca acest script foloseste atat un while, cat si un if, precum si comanda sed. | + | Se observă că acest script folosește atât un while, cât și un if, precum și comanda sed. |
<code> | <code> | ||
student@uso:~$ cat text.txt | student@uso:~$ cat text.txt | ||
Line 344: | Line 348: | ||
student@uso:~$ | student@uso:~$ | ||
</code> | </code> | ||
- | |||
- | |||
- | |||
- |