User Tools

Site Tools


advanced-unix:capitole:capitol-06

6. Shell scripting

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: comandă, argumente/parametri, input, output, valoare de retur
  • Înlănțuirea comenzilor
  • Filtre de text
  • One linere
  • Variabile în shell, expandarea în shell
  • Comenzi pentru controlul fluxului

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

  • find, stat, basename, dirname
  • echo, cat, head, tail, nl, tac, rev
  • cut, tr, sort, uniq, grep, awk, sed
  • seq, for, if, test, while read

Resurse utile

Exerciții

Demo: Folosire filtre de bază

Folosire head, tail, sort, uniq, cut, tr.

Demo: Folosire sed și awk

Folosire sed pentru substituție.

Folosire sed pentru ștergere.

Folosire sed pentru interschimbare.

Folosire awk pentru afișarea unor coloane.

Folosire awk și expresii regulate pentru afișarea unor coloane.

Demo: Folosire avansată grep și sort

Afișați fișierele din ierarhia /usr/include în ordinea numărului de apariții ale cuvântului FILE.

Demo: Folosire while read

Listați numele protocoalelor cu număr de port între 100 și 200. Portul se obține din fișierul /etc/services.

Demo: Creare directoare în home-urile mai multor utilizatori

Pentru început adăugați în sistem utilizatorii ana, bogdan, corina, dan și elena folosind utilitarul adduser.

Ca root, parcurgeți utilizatorii sistemului care au home-ul în /home/, și creați un director public_html în home-ul fiecăruia.

Realizați apoi un one-liner sau un script care să șteargă directorul public_html.

Creare directoare și schimbare permisiuni

Ca root, parcurgeți utilizatorii sistemului care au home-ul în /home/, și creați un director public_html în home-ul fiecăruia. Schimbați ownership-ul acelui director la utilizator folosind chown.

Creare directoare cu un alt nume

Realizați pasul de mai sus doar că schimbați numele directorului nou creat în public_html_<UID> unde UID este numele de utilizator al utilizatorului.

Numele paginilor de manual dintr-o anumită secțiune

Afișați numele paginilor de manual din secțiunea 5. Numele sunt partea fără extensie din fișierele existente în /usr/share/man/man5/. De exemplu, pentru fișierul issue.5.gz, numele este issue.

Recomandăm pașii de mai jos.

Parcurgeți folosind for intrările din /usr/share/man/man5/.

Folosiți comanda basename pentru a extrage doar numele de bază al fișierului.

Comanda basename ca argumente numele fișierului și extensia care va fi eliminată din numele fișierului, rămânând doar cu numele de bază.

Trebuie să scoateți extensia 5.gz.

Din lista de mai sus, extrageți doar comenzile care încep cu o anumită literă. Adică din outputul de mai sus, folosiți o comandă de forma grep '^a' pentru a extrage liniile care încep cu litera a folosind grep.

Schimbare parolă utilizatori

Vrem să schimbăm parola utilizatorilor care au directorul home în /home și să facem asta corect :-) Vom crea un script numit change-home-users-pw.

Pentru început adăugați în sistem utilizatorii ana, bogdan, corina, dan și elena folosind utilitarul adduser.

În cadrul scriptului folosiți /etc/passwd, while și read pentru a afișa doar numele utilizatorilor (username) care au home-ul în /home.

În cadrul buclei while, puteți folosi o construcție de forma echo $var | grep '^/home/' pentru a afla dacă variabila var începe cu șirul /home.

Sau dacă folosiți awk nu mai aveți nevoie de construcția de mai sus.

Pentru parole generați o parolă folosind utilitarul pwgen. Parola trebuie să aibă 12 caractere și să conțină numere și caractere speciale.

Parcurgeți pagina de manual a comenzii pwgen sau exemplele de aici: http://www.maketecheasier.com/password-generators-for-linux/

Schimbați, în mod neinteractiv, folosind comanda chpasswd, parola pentru utilizatorii sistemului care au home-ul în /home. După schimbarea parolei afișați la ieșirea standard, pentru fiecare utilizator, numele de utilizator și noua parolă.

Folosiți o construcție de forma echo ... | sudo chpasswd pentru schimbarea parolei în mod neinteractiv. Vedeți și exemplele de aici: http://linoxide.com/linux-command/change-passwords-batch-mode-chpasswd/

advanced-unix/capitole/capitol-06.txt · Last modified: 2016/05/12 12:44 by razvan