User Tools

Site Tools


medium-unix:capitole:capitol-08

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
medium-unix:capitole:capitol-08 [2016/05/15 21:55]
razvan created
medium-unix:capitole:capitol-08 [2016/05/19 19:38] (current)
razvan
Line 1: Line 1:
-====== ​XTODO ======+====== ​8Introducere în shell scripting ​======
  
-TODO+Pentru funcționalități de automatizare folosim shell scripting. Un script shell este o înlănțiure de comenzi agregate pentru un scop final. Un shell script este o formă //​quick'​n'​dirty//​ de automatizare. Pentru aspecte mai complexe, este util să se folosească forme avansate de automatizare precum Awk, Python, Perl sau altele.
  
 ===== Subiecte abordate ===== ===== Subiecte abordate =====
  
-  * TODO +  * Ce este un script shell? 
-  * TODO +  * Comenzi pentru controlul fluxului 
-  * TODO+  * Utilitare de lucru cu expresii regulate 
 + 
 +==== Best practices ==== 
 + 
 +  * Comenzi neinteractive în shell 
 +  * Shell scripting este //​quick'​n'​dirty//​ 
 +  * ''​for''​ vs. argumente în listă vs. ''​while read''​ 
 +  * ''​if <​command>''​ 
 +  * ''​tr''​ vs. ''​sed''​ 
 +  * ''​cut''​ vs. ''​awk''​
  
 ==== Utilitare folosite ==== ==== Utilitare folosite ====
  
-  * TODO +  * ''​if'',​ ''​test'',​ ''​while read''​ 
-  * TODO +  * ''​awk'',​ ''​sed''​
-  * TODO+
  
 ===== Resurse utile ===== ===== Resurse utile =====
Line 19: Line 27:
   * TODO   * TODO
   * TODO   * TODO
 +
 +==== Slide-uri ====
 +
 +[[http://​koala.cs.pub.ro/​training/​res/​medium-unix/​slides/​cap-08.pdf|Slide-uri capitol 8]]
 +
 +<​html>​
 +  <​center>​
 +    <iframe src="​http://​docs.google.com/​viewer?​url=http://​koala.cs.pub.ro/​training/​res/​medium-unix/​slides/​cap-08.pdf&​embedded=true"​ width="​600"​ height="​470" ​  ​style="​border:​ none;"></​iframe>​
 +  </​center>​
 +</​html>​
  
 ===== Exerciții ===== ===== Exerciții =====
Line 24: Line 42:
 ==== Demo-uri ==== ==== Demo-uri ====
  
-TODO+=== Demo: Folosire sed și awk === 
 + 
 +Folosire sed pentru substituție. ''​sed''​ este ''​tr++''​ 
 + 
 +Folosire sed pentru ștergere. 
 + 
 +Folosire sed pentru interschimbare. 
 + 
 +Folosire awk pentru afișarea unor coloane. ''​awk''​ este ''​cut++''​ 
 + 
 +Folosire awk și expresii regulate pentru afișarea unor coloane. 
 + 
 +=== Demo: Folosire if test === 
 + 
 +Un script care verifică faptul că primește un argument. Verifică dacă argumentul primit este un nume existent de utilizator. Dacă **nu**, iese din script. Altfel, schimbă parola utilizatorului cu o parolă generată cu ajutorul comenzii ''​pwgen''​. 
 + 
 +=== Demo: Folosire while read și test === 
 + 
 +Un script care afișează utilizatorii care au user id-ul mai mare sau egal decât ''​500''​. 
 + 
 +Un script care afișează utilizatorii care au user id-ul între ''​100''​ și ''​500'',​ adică mai mare decât ''​100''​ și mai mic decât ''​500''​. 
 + 
 +==== Extragere informații dintr-un fișier CSV ==== 
 + 
 +Pornind de la catalogul din fișierul ''​register.csv''​ din [[http://​koala.cs.pub.ro/​training/​res/​medium-unix/​arc/​cap-08-res.zip|arhiva capitolului]],​ creați scriptul ''​select_7.sh''​ care să afișeze numele și grupa celor care au nota mai mare sau egală cu ''​7''​. 
 + 
 +Puteți urma pașii ajutători de mai jos. 
 + 
 +Fișierul să primească la standard input fișierul ''​register.csv''​. Adică să ruleze în forma<​code>​ 
 +./​select_7.sh < register.csv. 
 +</​code>​ 
 + 
 +Creați scriptul ''​select_7.sh''​ și folosiți comanda<​code>​ 
 +read line 
 +</​code>​ 
 +pentru a citi prima linie din fișier (antetul). 
 + 
 +Actualizați în cadrul scriptului variabila ''​IFS''​ pentru ca read să folosească pe post de separator caracterul virgulă ('',''​). 
 + 
 +Citiți coloanele folosind ''​while''​ și ''​read''​ (ne interesează numele și grupa studenților). 
 + 
 +Folosiți ''​if''​ și ''​test''​ pentru a selecta studenții care au nota mai mare sau egală cu ''​7''​. 
 + 
 +==== Calcul medie ====
  
-TODO+Calculați media notelor de mai sus într-un script ''​compute_average.sh''​. Puteți folosi fie shell scripting (''​while'',​ ''​read'',​ expandarea aritmetică) și comanda ''​bc'',​ fie puteți folosi ''​awk''​.
  
-==== TODO 2 ====+==== Parsare fișiere de log ====
  
-TODO+Parsați fișierul ''​bttrack.log''​ din [[http://​koala.cs.pub.ro/​training/​res/​medium-unix/​arc/​cap-08-res.zip|arhiva capitolului]].
  
-==== TODO 2 ====+Este un fișier jurnal (//log//) al unui tracker BitTorrent.
  
-TODO+Creați un script denumit ''​parse-tracker-log.sh''​ care parsează intrarea standard și afișează la ieșirea standard 3 coloane: cantitatea de date descărcate de un peer, adresa IP a peer-ului și numele clientului.
  
 +<note tip>
 +Parcurgeți **DOAR** liniile care conțin ''/​GET /​announce''​.
 +</​note>​
medium-unix/capitole/capitol-08.1463338516.txt.gz · Last modified: 2016/05/15 21:55 by razvan