User Tools

Site Tools


school:uso:labs:shell_scripting_2

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
school:uso:labs:shell_scripting_2 [2009/08/09 18:32]
razvan
school:uso:labs:shell_scripting_2 [2020/07/20 09:16] (current)
Line 1: Line 1:
-= Laborator shell scripting - partea a 2-a =+====== Laborator shell scripting - partea a 2-a ======
  
-== Elemente importante ==+===== Elemente importante =====
  
-* variabile de mediu +   variabile de mediu 
-* source +   source 
-* globbing +   globbing 
-* find +   find 
-* expresii regulate +   expresii regulate 
-* grep +   grep 
-* sort, uniq +   sort, uniq 
-* read +   read 
-* sed +   sed 
-* awk+   awk
  
-== Seturi de task-uri ==+===== Seturi de task-uri =====
  
-=== variabile de mediu, source ===+==== variabile de mediu, source ====
  
-Intrați în directorul ''lab11/ex01/''+Intrați în directorul ''lab12/ex01/''
  
 ==== Tutorial === ==== Tutorial ===
  
-* Rulați comenzile de mai jos pentru afișarea valorii variabilelor de mediu ''PATH'' și ''HOME'':+   Rulați comenzile de mai jos pentru afișarea valorii variabilelor de mediu ''PATH'' și ''HOME'':
  
 {{{ {{{
Line 29: Line 29:
 }}} }}}
  
-* Rulați comenzile de mai jos pentru inițializarea și afișarea unei variabile (**nu** folosiți spații înainte sau după caracterul egal (''='')):+   Rulați comenzile de mai jos pentru inițializarea și afișarea unei variabile (**nu** folosiți spații înainte sau după caracterul egal (''='')):
  
 {{{ {{{
Line 36: Line 36:
 }}} }}}
  
-* Urmăriți conținutul scriptului ''show_var.sh'':+   Urmăriți conținutul scriptului ''show_var.sh'':
  
 {{{ {{{
Line 42: Line 42:
 }}} }}}
  
-* Rulați scriptul:+   Rulați scriptul:
  
 {{{ {{{
Line 48: Line 48:
 }}} }}}
  
-* **Doar** varibilele de mediu sunt propagate la procesele copil. Folosiți ''export'':+   **Doar** varibilele de mediu sunt propagate la procesele copil. Folosiți ''export'':
  
 {{{ {{{
Line 55: Line 55:
 }}} }}}
  
-==== Enunț ====+=== Enunț ===
  
 Creați un script ''update_path.sh'' care să actualizeze variabila de mediu ''PATH'' cu directorul ''bin/'' din home-ul utilizatorului curent. Rulați scriptul pentru a actualiza valoarea variabilei în shell-ul curent. Creați un script ''update_path.sh'' care să actualizeze variabila de mediu ''PATH'' cu directorul ''bin/'' din home-ul utilizatorului curent. Rulați scriptul pentru a actualiza valoarea variabilei în shell-ul curent.
  
-==== Pași ajutători ====+=== Pași ajutători ===
  
-* Actualizați variabila de mediu ''PATH'' cu directorul ''/opt/bin''. Afișați valoarea variabilei. +   Actualizați variabila de mediu ''PATH'' cu directorul ''/opt/bin''. Afișați valoarea variabilei. 
-* Creați un script ''update_path.sh'' care să actualizeze variabila de mediu ''PATH'' cu directorul ''bin/'' din home-ul utilizatorului curent. Folosiți ''export'' pentru exportarea variabilei. +   Creați un script ''update_path.sh'' care să actualizeze variabila de mediu ''PATH'' cu directorul ''bin/'' din home-ul utilizatorului curent. Folosiți ''export'' pentru exportarea variabilei. 
-* Rulați scriptul și afișați valoarea variabilei ''PATH''. De ce nu se modifică valoarea? +   Rulați scriptul și afișați valoarea variabilei ''PATH''. De ce nu se modifică valoarea? 
-* Folosiți source pentru a rula scriptul. Afișați valoarea variabilei ''PATH''.+   Folosiți source pentru a rula scriptul. Afișați valoarea variabilei ''PATH''.
  
-=== find, globbing ===+==== find, globbing ====
  
-* Intrați în directorul ''lab11/ex02/''.+   Intrați în directorul ''lab12/ex02/''.
  
-==== Tutorial ====+=== Tutorial ===
  
-* Comanda '''find''' afișează ierahia unui director. Dacă directorul lipsește se consideră implicit directorul curent (''.''). Rulați comanda de mai jos pentru a afișa intrările din ierarhia curentă (''.''):+   Comanda '''find''' afișează ierahia unui director. Dacă directorul lipsește se consideră implicit directorul curent (''.''). Rulați comanda de mai jos pentru a afișa intrările din ierarhia curentă (''.''):
  
 {{{ {{{
Line 79: Line 79:
 }}} }}}
  
-* Rulați comanda de mai jos pentru a afișa fișierele din ierahia curentă:+   Rulați comanda de mai jos pentru a afișa fișierele din ierahia curentă:
  
 {{{ {{{
Line 85: Line 85:
 }}} }}}
  
-* Caracterul star (''*'') este folosit pentru a reprezenta orice șir de caractere (de la caracterul vid până la șirul infinit). Rulați comanda de mai jos pentru a afișa fișierele cu extensia ''.conf'' din ''/etc/''.+   Caracterul star (''*'') este folosit pentru a reprezenta orice șir de caractere (de la caracterul vid până la șirul infinit). Rulați comanda de mai jos pentru a afișa fișierele cu extensia ''.conf'' din ''/etc/''.
  
 {{{ {{{
Line 91: Line 91:
 }}} }}}
  
-==== Enunț ====+=== Enunț ===
  
-* Folosiți ''find'' pentru a identifica fișierele cu drept de execuție care **nu** au extensia ''.sh'' aflate în **subdirectoarele** directorului ''lab11/ex02''.+   Folosiți ''find'' pentru a identifica fișierele cu drept de execuție care **nu** au extensia ''.sh'' aflate în **subdirectoarele** directorului ''lab12/ex02/''.
  
-==== Pași ajutători ====+=== Pași ajutători ===
  
-* Folosiți ''find'' pentru a afișa ierarhia din subdirectoare. (Hint: ''-mindepth''+   Folosiți ''find'' pentru a afișa ierarhia din subdirectoare. (Hint: ''-mindepth''
-* Folosiți ''find'' pentru a afișa fișierele din ierarhia din subdirectoare cu extensia ''.sh''. (Hint: ''-name'', ''-type''+   Folosiți ''find'' pentru a afișa fișierele din ierarhia din subdirectoare cu extensia ''.sh''. (Hint: ''-name'', ''-type''
-* Folosiți ''find'' pentru a afișa fișierele din ierarhia din subdirectoare care **nu** au extensia ''.sh''. (Hint: ''OPERATORS'' în pagina de manual) +   Folosiți ''find'' pentru a afișa fișierele din ierarhia din subdirectoare care **nu** au extensia ''.sh''. (Hint: ''OPERATORS'' în pagina de manual) 
-* Folosiți ''find'' pentru a afișa fișierele din ierarhia din subdirectoare cu drept de execuție care **nu** au extensia ''.sh''. (Hint: ''-perm'')+   Folosiți ''find'' pentru a afișa fișierele din ierarhia din subdirectoare cu drept de execuție care **nu** au extensia ''.sh''. (Hint: ''-perm'')
  
-=== find, shell expansion ===+==== find, shell expansion ====
  
-* Intrați în directorul ''lab11/ex03/''.+   Intrați în directorul ''lab12/ex03/''.
  
-==== Tutorial ====+=== Tutorial ===
  
-* Construcția ''${parameter%word}'' (descrisă și [[http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html|aici]]) permite eliminarea din variabila descrisă de ''parameter'' a porțiunii finale descrisă de șirul ''word''. Rulați exemplele de mai jos:+   Construcția ''${parameter%word}'' (descrisă și [[http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html|aici]]) permite eliminarea din variabila descrisă de ''parameter'' a porțiunii finale descrisă de șirul ''word''. Rulați exemplele de mai jos:
  
 {{{ {{{
Line 119: Line 119:
 }}} }}}
  
-==== Enunț ====+=== Enunț ===
  
-* Folosiți ''find'' și ''cp'' pentru a crea copii de lucru ale fișierelor de configurare de distribuție din ierarhia ''lab11/ex03/horde''. Fișierele de distribuție au extensia ''.dist'' (de exemplu ''conf.php.dist''); o copie de lucru este un fișier fără extensia ''.dist'' (de exemplu: ''conf.php'').+   Folosiți ''find'' și ''cp'' pentru a crea copii de lucru ale fișierelor de configurare de distribuție din ierarhia ''lab12/ex03/horde/''. Fișierele de distribuție au extensia ''.dist'' (de exemplu ''conf.php.dist''); o copie de lucru este un fișier fără extensia ''.dist'' (de exemplu: ''conf.php'').
  
-==== Pași ajutători ====+=== Pași ajutători ===
  
-* Folosiți ''find'' pentru a afișa fișierele cu extensia ''.dist'' din ierahia ''lab11/ex03/horde''. (Hint: ''-type'', ''-name''+   Folosiți ''find'' pentru a afișa fișierele cu extensia ''.dist'' din ierahia ''lab12/ex03/horde/''. (Hint: ''-type'', ''-name''
-* Folosiți ''for'', ''find'' și ''ls -l'' pentru a afișa informații complete despre fișierele de mai sus. +   Folosiți ''for'', ''find'' și ''ls -l'' pentru a afișa informații complete despre fișierele de mai sus. 
-* Inițializați variabila ''MY_FILE'' la valoarea ''conf.php.dist''. Folosiți ''echo'' și construcția ''${parameter%word}'' pentru a afișa valoarea variabilei ''MY_FILE'' fără extensia ''.dist''+   Inițializați variabila ''MY_FILE'' la valoarea ''conf.php.dist''. Folosiți ''echo'' și construcția ''${parameter%word}'' pentru a afișa valoarea variabilei ''MY_FILE'' fără extensia ''.dist''
-* Folosiți ''for'', ''find'' și ''cp'' pentru a crea copii de lucru ale fișierelor de mai sus.+   Folosiți ''for'', ''find'' și ''cp'' pentru a crea copii de lucru ale fișierelor de mai sus.
  
-=== read ===+==== read ====
  
-* Intrați în directorul ''lab11/ex04/''.+   Intrați în directorul ''lab12/ex04/''.
  
-==== Tutorial ====+=== Tutorial ===
  
-* Comenzile ''head'' și ''tail'' permit, respectiv, eliminarea ultimelor linii și a primelor linii dintr-un fișier. Rulați comenzile de mai jos:+   Comenzile ''head'' și ''tail'' permit, respectiv, eliminarea ultimelor linii și a primelor linii dintr-un fișier. Rulați comenzile de mai jos:
  
 {{{ {{{
Line 145: Line 145:
 }}} }}}
  
-* Comanda ''read'' permite parsarea unui șir primit la intrare folosind spații albe ca separator implicit:+   Comanda ''read'' permite parsarea unui șir primit la intrare folosind spații albe ca separator implicit:
  
 {{{ {{{
Line 152: Line 152:
 }}} }}}
  
-* În general, ''read'' este folosit împreună cu ''while'' pentru a citi un întreg fișier.+   În general, ''read'' este folosit împreună cu ''while'' pentru a citi un întreg fișier.
  
 {{{ {{{
Line 158: Line 158:
 }}} }}}
  
-==== Enunț ====+=== Enunț ===
  
 Pornind de la catalogul din fișierul ''catalog.csv'', creați scriptul ''select_7.sh'' care să afișeze numele și grupa celor care au nota mai mare sau egală cu ''7''. Pornind de la catalogul din fișierul ''catalog.csv'', creați scriptul ''select_7.sh'' care să afișeze numele și grupa celor care au nota mai mare sau egală cu ''7''.
  
-==== Pași ajutători ====+=== Pași ajutători ===
  
-* Creați scriptul ''select_7.sh'' și folosiți ''tail'' pentru a afișa toate liniile mai puțin prima linie (linia de antet). (Hint: ''-n +N''+   Creați scriptul ''select_7.sh'' și folosiți ''tail'' pentru a afișa toate liniile mai puțin prima linie (linia de antet). (Hint: ''-n +N''
-* Actualizați în cadrul scriptului variabila ''IFS'' pentru ca read să folosească pe post de separator caracterul virgulă ('',''). (Hint: detalii [[http://www.faqs.org/docs/bashman/bashref_33.html|aici]] sau în pagina de manual a Bash - căutare după ''"Word splitting"''+   Actualizați în cadrul scriptului variabila ''IFS'' pentru ca read să folosească pe post de separator caracterul virgulă ('',''). (Hint: detalii [[http://www.faqs.org/docs/bashman/bashref_33.html|aici]] sau în pagina de manual a Bash - căutare după ''"Word splitting"''
-* Folosiți ''tail'', ''while'' și ''read'' pentru a afișa doar numele și grupa studenților din fișierul ''catalog.txt'', separate prin caracterul două puncte ('':''). +   Folosiți ''tail'', ''while'' și ''read'' pentru a afișa doar numele și grupa studenților din fișierul ''catalog.txt'', separate prin caracterul două puncte ('':''). 
-* Folosiți ''if'' pentru a selecta studenții care au nota mai mare sau egală cu ''7''.+   Folosiți ''if'' pentru a selecta studenții care au nota mai mare sau egală cu ''7''.
  
-=== grep, here document ===+==== grep, here document ====
  
-* Intrați în directorul ''lab11/ex05/''.+   Intrați în directorul ''lab12/ex05/''.
  
-==== Tutorial ====+=== Tutorial ===
  
-* Comanda ''grep'' este folosită pentru a selecta liniile ce conțin un anumit șablon (expresie regulată):+   Comanda ''grep'' este folosită pentru a selecta liniile ce conțin un anumit șablon (expresie regulată):
  
 {{{ {{{
Line 182: Line 182:
 }}} }}}
  
-* Argumentul ''-v'' (revert selection) va selecta liniile ce **nu** conțin un anumit șablon:+   Argumentul ''-v'' (revert selection) va selecta liniile ce **nu** conțin un anumit șablon:
  
 {{{ {{{
Line 188: Line 188:
 }}} }}}
  
-==== Enunț ====+=== Enunț ===
  
 Creați un script ''ssl_update.sh'' care să adauge opțiunea de redirectare HTTPS în cadrul unui fișier de tip vhost pentru Apache. Adăugați opțiunea de mai jos la sfârșitul directivei ''<VirtualHost>'' din cadrul fișierului ''vhost.conf'': Creați un script ''ssl_update.sh'' care să adauge opțiunea de redirectare HTTPS în cadrul unui fișier de tip vhost pentru Apache. Adăugați opțiunea de mai jos la sfârșitul directivei ''<VirtualHost>'' din cadrul fișierului ''vhost.conf'':
Line 204: Line 204:
 }}} }}}
  
-==== Pași ajutători ====+=== Pași ajutători ===
  
-* Creați scriptul ''ssl_update.sh''+   Creați scriptul ''ssl_update.sh''
-* Folosiți ''grep'' pentru a afișa toate liniile mai puțin linia de încheiere a directivei vhost (''</VirtualHost>'') (Hint: ''-v''). Stocați rezultatul în fișierul ''vhost_new.conf''+   Folosiți ''grep'' pentru a afișa toate liniile mai puțin linia de încheiere a directivei vhost (''</VirtualHost>'') (Hint: ''-v''). Stocați rezultatul în fișierul ''vhost_new.conf''
-* Folosiți un [[http://www.faqs.org/docs/bashman/bashref_42.html|here document]] pentru a **adăuga** setul de directive de mai sus la sfârșitul fișierului ''vhost_new.conf''+   Folosiți un [[http://www.faqs.org/docs/bashman/bashref_42.html|here document]] pentru a **adăuga** setul de directive de mai sus la sfârșitul fișierului ''vhost_new.conf''
-* Completați here document-ul pentru a adăuga inclusiv forma de încheiere a directivei (''</VirtualHost>'').+   Completați here document-ul pentru a adăuga inclusiv forma de încheiere a directivei (''</VirtualHost>'').
  
-=== variabile, source, sed ===+==== variabile, source, sed ====
  
-* Intrați în directorul ''lab11/ex06/''.+   Intrați în directorul ''lab12/ex06/''.
  
 ==== Tutorial === ==== Tutorial ===
  
-* Comanda ''mail'' permite transmiterea unui e-mail. În mod obișnuit se specifică subiectul și destinatarul. Comanda de mai jos trimite mesajul ''"Say hello to my little friend"'' cu subiectul ''"Hello"'' utilizatorului ''student'':+   Comanda ''mail'' permite transmiterea unui e-mail. În mod obișnuit se specifică subiectul și destinatarul. Comanda de mai jos trimite mesajul ''"Say hello to my little friend"'' cu subiectul ''"Hello"'' utilizatorului ''student'':
  
 {{{ {{{
Line 223: Line 223:
 }}} }}}
  
-* Utilitarul ''sed'' (stream editor) permite efectuarea a diverse operații pe un fișier la nivel de linie. În mod uzual este folosit pentru a substitui un șablon (expresie regulată) cu un șir:+   Utilitarul ''sed'' (stream editor) permite efectuarea a diverse operații pe un fișier la nivel de linie. În mod uzual este folosit pentru a substitui un șablon (expresie regulată) cu un șir:
  
 {{{ {{{
Line 229: Line 229:
 }}} }}}
  
-* Pentru a concatena mai multe prelucrări ''sed'' folosiți ''-e'':+   Pentru a concatena mai multe prelucrări ''sed'' folosiți ''-e'':
  
 {{{ {{{
Line 235: Line 235:
 }}} }}}
  
-==== Enunț ====+=== Enunț ===
  
-* Creați scriptul ''my_send_mail.sh'' care trimite un e-mail cu un mesaj personalizat pornind de la un template-ul ''mail_template.txt'' și fișierul de configurare ''config''. Fișierul de configurare specifică variabilele folosite de script: +   Creați scriptul ''my_send_mail.sh'' care trimite un e-mail cu un mesaj personalizat pornind de la un template-ul ''mail_template.txt'' și fișierul de configurare ''config''. Fișierul de configurare specifică variabilele folosite de script: 
-*''SUBJECT'' - subiectul mesajul; +     ''SUBJECT'' - subiectul mesajul; 
-*''DEST_ADDRESS'' - destinatarul; +     ''DEST_ADDRESS'' - destinatarul; 
-*celelalte variabile reprezintă informații de substituit în template.+     celelalte variabile reprezintă informații de substituit în template.
  
-==== Pași ajutători ====+=== Pași ajutători ===
  
-* Creați scriptul ''my_send_mail.sh'' în cadrul căruia afișați valoarea variabilei ''SUBJECT'' din fișierul ''config''. (Hint: folosiți ''source''+   Creați scriptul ''my_send_mail.sh'' în cadrul căruia afișați valoarea variabilei ''SUBJECT'' din fișierul ''config''. (Hint: folosiți ''source''
-* Folosiți ''sed'' pentru a substitui șirul {{{__DEST_NAME__}}} din ''mail_template.txt'' cu ''Daniel''+   Folosiți ''sed'' pentru a substitui șirul {{{__DEST_NAME__}}} din ''mail_template.txt'' cu ''Daniel''
-* Folosiți ''sed'' pentru a substitui șirul {{{__DEST_NAME__}}} din ''mail_template.txt'' cu valoarea variabilei ''DEST_NAME'' din fișierul ''config''+   Folosiți ''sed'' pentru a substitui șirul {{{__DEST_NAME__}}} din ''mail_template.txt'' cu valoarea variabilei ''DEST_NAME'' din fișierul ''config''
-* Completați scriptul ''my_send_mail.sh'' pentru a trimite un e-mail cu un mesaj personalizat pornind de la un template-ul ''mail_template.txt'' și fișierul de configurare ''config''.+   Completați scriptul ''my_send_mail.sh'' pentru a trimite un e-mail cu un mesaj personalizat pornind de la un template-ul ''mail_template.txt'' și fișierul de configurare ''config''.
  
-=== grep, sed ===+==== grep, sed ====
  
-* Intrați în directorul ''lab11/ex07/''.+   Intrați în directorul ''lab12/ex07/''.
  
-==== Tutorial ====+=== Tutorial ===
  
-* Utilitarul ''grep'' folosește un șablon (expresie regulată) pentru selectarea liniilor. Caracterele căciulă (''^'') și dolar (''$'') se potrivesc, respectiv, cu începutul și sfârșitul unei linii:+   Utilitarul ''grep'' folosește un șablon (expresie regulată) pentru selectarea liniilor. Caracterele căciulă (''^'') și dolar (''$'') se potrivesc, respectiv, cu începutul și sfârșitul unei linii:
  
 {{{ {{{
Line 263: Line 263:
 }}} }}}
  
-* Argumentul ''-i'' al utilitarului ''sed'' permite modificarea "in place" a unui fișier:+   Argumentul ''-i'' al utilitarului ''sed'' permite modificarea "in place" a unui fișier:
  
 {{{ {{{
Line 272: Line 272:
 }}} }}}
  
-==== Enunț ====+=== Enunț ===
  
-* Fișierul ''svn.passwd'' conține linii de forma ''username: password'' folosite pentru autentificare în [[http://subversion.tigris.org/|Subversion]]. Creați scriptul ''update_svn_passwd.sh'' care actualizează fișierul cu parole: +   Fișierul ''svn.passwd'' conține linii de forma ''username: password'' folosite pentru autentificare în [[http://subversion.tigris.org/|Subversion]]. Creați scriptul ''update_svn_passwd.sh'' care actualizează fișierul cu parole: 
-*scriptul primește două argumente: numele de utilizator (''username'') și parola (''password''); +     scriptul primește două argumente: numele de utilizator (''username'') și parola (''password''); 
-*dacă numele de utilizator există se actualizează (substituie) parola; +     dacă numele de utilizator există se actualizează (substituie) parola; 
-*dacă numele de utilizator nu există se adaugă parola.+     dacă numele de utilizator nu există se adaugă parola.
  
-==== Pași ajutători ====+=== Pași ajutători ===
  
-* Creați scriptul ''update_svn_passwd.sh'' care primește doi parametri și îi afișează. +   Creați scriptul ''update_svn_passwd.sh'' care primește doi parametri și îi afișează. 
-* Folosiți grep pentru a extrage din fișierul ''svn.passwd'' linia asociată numelui de utilizator primit ca prim argument. ((Hint: ''^'', ''$1''+   Folosiți grep pentru a extrage din fișierul ''svn.passwd'' linia asociată numelui de utilizator primit ca prim argument. ((Hint: ''^'', ''$1''
-* Afișați ''yes'' sau ''no'' după cum numele de utilizator primit ca prim argument se gasește în fișierul ''svn.passwd''. (Hint: ''$?''+   Afișați ''yes'' sau ''no'' după cum numele de utilizator primit ca prim argument se gasește în fișierul ''svn.passwd''. (Hint: ''$?''
-* În cazul în care numele de utilizator primit ca argument **nu** se găsește în fișierul ''svn.passwd'' **adăugați** linia ''$username: $password'' la sfârșitul fișierului. (''$username'' este primul argument, iar ''$password'' este al doilea argument) (Hint: ''echo'', ''>>''+   În cazul în care numele de utilizator primit ca argument **nu** se găsește în fișierul ''svn.passwd'' **adăugați** linia ''$username: $password'' la sfârșitul fișierului. (''$username'' este primul argument, iar ''$password'' este al doilea argument) (Hint: ''echo'', ''>>''
-* În cazul în care numele de utilizator primit ca argument se găsește în fișierul ''svn.passwd'', actualizați linia asociată. (Hint: ''sed'', ''\1'', ''-i'')+   În cazul în care numele de utilizator primit ca argument se găsește în fișierul ''svn.passwd'', actualizați linia asociată. (Hint: ''sed'', ''\1'', ''-i'')
  
-=== grep, expresii regulate ===+==== grep, expresii regulate ====
  
-* Intrați în directorul ''lab11/ex08/''.+   Intrați în directorul ''lab12/ex08/''.
  
-==== Tutorial ====+=== Tutorial ===
  
-* Expresiile regulate utilizate de ''grep'' folosesc caractere care au rol special (''^'', ''$'', ''*'', ''+'', ''.''). Pentru a putea fi folosite cu rol de caracter ASCII se citează folosind backslash (''\''):+   Expresiile regulate utilizate de ''grep'' folosesc caractere care au rol special (''^'', ''$'', ''*'', ''+'', ''.''). Pentru a putea fi folosite cu rol de caracter ASCII se citează folosind backslash (''\''):
  
 {{{ {{{
Line 300: Line 300:
 }}} }}}
  
-* ''grep'' selectează linii care conțin un șir descris printr-o expresie regulată. Pentru a extrage un cuvânt se folosește ''-w'' sau construcția ''\< .. \>'':+   ''grep'' selectează linii care conțin un șir descris printr-o expresie regulată. Pentru a extrage un cuvânt se folosește ''-w'' sau construcția ''\< .. \>'':
  
 {{{ {{{
Line 308: Line 308:
 }}} }}}
  
-==== Enunț ====+=== Enunț ===
  
 Folosiți ''grep'' pentru a selecta alias-urile cu destinația de forma ''nume.prenume@gmail.com'' din fișierul ''aliases''. Intrările din fișierul ''aliases'' se consideră de forma ''alias: destinație''. Folosiți ''grep'' pentru a selecta alias-urile cu destinația de forma ''nume.prenume@gmail.com'' din fișierul ''aliases''. Intrările din fișierul ''aliases'' se consideră de forma ''alias: destinație''.
  
-==== Pași ajutători ====+=== Pași ajutători ===
  
-* Folosiți ''grep'' pentru a selecta liniile ce conțin șirul ''gmail''+   Folosiți ''grep'' pentru a selecta liniile ce conțin șirul ''gmail''
-* Folosiți ''grep'' pentru a selecta liniile ce conțin șirul ''gmail.com''. (Hint: folosiți ''\'' pentru citare) +   Folosiți ''grep'' pentru a selecta liniile ce conțin șirul ''gmail.com''. (Hint: folosiți ''\'' pentru citare) 
-* Folosiți ''grep'' pentru a selecta liniile ce conțin cuvântul ''gmail.com''. (Hint: ''\<'' și ''\>''+   Folosiți ''grep'' pentru a selecta liniile ce conțin cuvântul ''gmail.com''. (Hint: ''\<'' și ''\>''
-* Folosiți ''grep'' pentru a selecta liniile ce conțin cuvântul ''gmail.com'' în destinație. (Hint: dacă folosiți ''+'' acesta trebuie citat cu ''\'' pentru a avea rol în expresia regulată - unul sau mai multe caractere) +   Folosiți ''grep'' pentru a selecta liniile ce conțin cuvântul ''gmail.com'' în destinație. (Hint: dacă folosiți ''+'' acesta trebuie citat cu ''\'' pentru a avea rol în expresia regulată - unul sau mai multe caractere) 
-* Folosiți ''grep'' pentru a selecta liniile ce conțin șirul-cuvânt ''nume.prenume@gmail.com'' în destinație. (**Atenție**: intrarea ce conține ''j.r.r.tolkien@gmail.com'' este invalidă)+   Folosiți ''grep'' pentru a selecta liniile ce conțin șirul-cuvânt ''nume.prenume@gmail.com'' în destinație. (**Atenție**: intrarea ce conține ''j.r.r.tolkien@gmail.com'' este invalidă)
  
-=== grep, awk, sort, uniq ===+==== grep, awk, sort, uniq ====
  
-* **Dificultate sporită** +   **Dificultate sporită** 
-* Intrați în directorul ''lab11/ex09/''.+   Intrați în directorul ''lab12/ex09/''.
  
-==== Tutorial ====+=== Tutorial ===
  
-* Utilitarul ''awk''' permite manipulări avansate ale unui fișier la nivel de linie. Sintaxa este similară cu cea a limbajului C. Poate fi folosit ca o versiune avansată a comenzilor ''read'' și ''cut'' (pentru parsarea intrării). Argumentul ''-F'' permite precizarea separatorului:+   Utilitarul ''awk''' permite manipulări avansate ale unui fișier la nivel de linie. Sintaxa este similară cu cea a limbajului C. Poate fi folosit ca o versiune avansată a comenzilor ''read'' și ''cut'' (pentru parsarea intrării). Argumentul ''-F'' permite precizarea separatorului:
  
 {{{ {{{
-cat lista.txt | awk -F '[ \t]+' "{ print "prenume:", $1, "nume:", $2; }" +cat lista.txt | awk -F '[ \t]+' '{ print "nume:", $1, "prenume", $2; }' 
-cat /etc/passwd | awk -F ':' "{ print "nume: $1", "home:", $6; }"+cat /etc/passwd | awk -F ':' '{ print "nume:", $1, "home:", $6; }'
 }}} }}}
  
-* Utilitarul ''sort'' sortează liniile de la intrare. Este folosit de obicei în conjuncție cu ''uniq'':+   Utilitarul ''sort'' sortează liniile de la intrare. Este folosit de obicei în conjuncție cu ''uniq'':
  
 {{{ {{{
Line 341: Line 341:
 }}} }}}
  
-==== Enunț ====+=== Enunț ===
  
-* Fișierul ''mail.txt'' conține mesaje trimise de un utilizator. Creați un script ''dest_sort.sh'' care sortează mesajele trimise de un utilizator după destinatari; se vor afișa adresa de e-mail a destinatarului și numărul de mesaje transmise de acesta.+   Fișierul ''sent_mail.txt'' conține mesaje trimise de un utilizator. Creați un script ''dest_sort.sh'' care sortează mesajele trimise de un utilizator după destinatari; se vor afișa adresa de e-mail a destinatarului și numărul de mesaje transmise de acesta.
  
-==== Pași ajutători ====+=== Pași ajutători ===
  
-* Creați scriptul ''dest_sort.sh'' și folosiți ''grep'' pentru a extrage din fișierul ''mail.txt'' liniile care specifică destinatarul (liniile care încep cu ''To:''). +   Creați scriptul ''dest_sort.sh'' și folosiți ''grep'' pentru a extrage din fișierul ''sent_mail.txt'' liniile care specifică destinatarul (liniile care încep cu ''To:''). 
-* Folosiți înlănțuirea comenzilor (''|'') și ''awk'' pentru a extrage **doar** adresa de e-mail a destinatarului+   Folosiți înlănțuirea comenzilor (''|'') și ''awk'' pentru a extrage **doar** adresa de e-mail a primului destinatar. (Hint: folosiți ''<'' și ''>'' ca separatori; vor exista excepții dar sunt tolerabile) 
-* Folosiți înlănțuirea comenzilor (''|'') și ''sort'' pentru a sorta adresele de e-mail ale destinatarilor. +  *  Folosiți înlănțuirea comenzilor și ''grep'' pentru a elimina liniile albe (liniile care conțin doar spații sau caractere TAB sau care nu conțin nimic)
-* Folosiți înlănțuirea comenzilor (''|'') și ''uniq'' pentru a "uniciza" adresele de e-mail ale destinatarilor cu afișarea numărului de apariții ale acestora. (Hint: ''-c''+   Folosiți înlănțuirea comenzilor (''|'') și ''sort'' pentru a sorta adresele de e-mail ale destinatarilor. 
-* Folosiți înlănțuirea comenzilor (''|'') și ''sort'' pentru a sorta adreselele de e-mail după numărul de apariții ale acestora .(Hint: ''-r'', ''-n'')+   Folosiți înlănțuirea comenzilor (''|'') și ''uniq'' pentru a "uniciza" adresele de e-mail ale destinatarilor cu afișarea numărului de apariții ale acestora. (Hint: ''-c''
 +   Folosiți înlănțuirea comenzilor (''|'') și ''sort'' pentru a sorta adreselele de e-mail după numărul de apariții ale acestora .(Hint: ''-r'', ''-n'')
  
-=== grep, awk, sort, uniq ===+==== grep, awk, sort, uniq ====
  
-* **Dificultate sporită** +   **Dificultate sporită** 
-* Intrați în directorul ''lab11/ex10/''.+   Intrați în directorul ''lab12/ex10/''.
  
-==== Enunț ====+=== Enunț ===
  
-* Fișierul ''mail.txt'' conține mesaje trimise de un utilizator. Creați un script ''dest_sort.sh'' care script care sortează mesajele trimise de un utilizator în funcție de data la care au fost transmise; se vor afișa data de transmitere a mesajului și numărul de mesaje transmise la acea dată.+   Fișierul ''sent_mail.txt'' conține mesaje trimise de un utilizator. Creați un script ''dest_sort.sh'' care script care sortează mesajele trimise de un utilizator în funcție de data la care au fost transmise; se vor afișa data de transmitere a mesajului și numărul de mesaje transmise la acea dată.
  
-==== Pași ajutători ====+=== Pași ajutători ===
  
-* Creați scriptul ''date_sort.sh'' și folosiți ''grep'' pentru a extrage din fișierul ''mail.txt'' liniile care specifică data (liniile care încep cu ''Date:''). +   Creați scriptul ''date_sort.sh'' și folosiți ''grep'' pentru a extrage din fișierul ''sent_mail.txt'' liniile care specifică data (liniile care încep cu ''Date:''). 
-* Folosiți înlănțuirea comenzilor (''|'') și ''awk'' pentru a extrage **doar** data de transmitere a mesajului. +   Folosiți înlănțuirea comenzilor (''|'') și ''awk'' pentru a extrage **doar** data de transmitere a mesajului. (Hint: se presupune data în formatul ''Day, DD Mon YYYY'' - adică 4 cuvinte separate prin spațiu) 
-* Folosiți înlănțuirea comenzilor (''|'') și ''sort'' pentru a sorta datele mesajelor. +   Folosiți înlănțuirea comenzilor (''|'') și ''sort'' pentru a sorta datele mesajelor. 
-* Folosiți înlănțuirea comenzilor (''|'') și ''uniq'' pentru a "uniciza" datele mesajelor cu afișarea numărului de apariții ale acestora (Hint: ''-c''+   Folosiți înlănțuirea comenzilor (''|'') și ''uniq'' pentru a "uniciza" datele mesajelor cu afișarea numărului de apariții ale acestora (Hint: ''-c''
-* Folosiți înlănțuirea comenzilor (''|'') și ''sort'' pentru a sorta datele mesajelor după numărul de apariții ale acestora (Hint: ''-r'', ''-n'')+   Folosiți înlănțuirea comenzilor (''|'') și ''sort'' pentru a sorta datele mesajelor după numărul de apariții ale acestora (Hint: ''-r'', ''-n'')
  
-== Idei pentru shell scripting 1 ==+===== Idei pentru shell scripting 1 =====
  
-* script care copiază un set de fișire în home-ul unor utilizatori primiți ca argument pe sistemul local și schimbă owner-ul acestora +   script care copiază un set de fișire în home-ul unor utilizatori primiți ca argument pe sistemul local și schimbă owner-ul acestora 
-* adăugarea unei chei publice pe un sistem la distanță într-un one liner +   adăugarea unei chei publice pe un sistem la distanță într-un one liner 
-* script care copiază un fișier pe mai multe sisteme din rețeaua locală (poate integrat cu mdns)+   script care copiază un fișier pe mai multe sisteme din rețeaua locală (poate integrat cu mdns)
  
-== Extra ==+===== Extra =====
  
-* copierea unei ierarhii (doar fișierele cu extensia ''.php.dist'' împreună cu directoarele asociate) +   copierea unei ierarhii (doar fișierele cu extensia ''.php.dist'' împreună cu directoarele asociate) 
-* gestiunea unei adrese electronice (address book)+   gestiunea unei adrese electronice (address book)
school/uso/labs/shell_scripting_2.1249831959.txt.gz · Last modified: 2009/08/09 18:32 by razvan