This shows you the differences between two versions of the page.
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: | ||
- | ====== X. TODO ====== | + | ====== 8. Introducere î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> |