====== 9. Shell scripting și automatizare ====== 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 ===== * Ce este un script shell? * Comenzi pentru controlul fluxului * 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 '' * ''tr'', ''cut'' * Shebang ''!#'' la începutul unui fișier ==== Utilitare folosite ==== * ''if'', ''test'', ''while read'' ===== Exerciții ===== ==== Demo-uri ==== === 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''. === 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 ./select_7.sh < register.csv. Creați scriptul ''select_7.sh'' și folosiți comanda read line 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 ==== 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''. ==== Parsare fișiere de log ==== Parsați fișierul ''bttrack.log'' din [[http://koala.cs.pub.ro/training/res/medium-unix/arc/cap-08-res.zip|arhiva capitolului]]. Este un fișier jurnal (//log//) al unui tracker BitTorrent. 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. Parcurgeți **DOAR** liniile care conțin ''/GET /announce''.