Intrați în directorul lab12/ex01/
PATH
și HOME
:=
)):show_var.sh
:export
:
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.
PATH
cu directorul /opt/bin
. Afișați valoarea variabilei.update_path.sh
care să actualizeze variabila de mediu PATH
cu directorul bin/
din home-ul utilizatorului curent. Folosiți export
pentru exportarea variabilei.PATH
. De ce nu se modifică valoarea?PATH
.lab12/ex02/
.'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ă (.
):*
) 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/
.conf}
find
pentru a identifica fișierele cu drept de execuție care nu au extensia .sh
aflate în subdirectoarele directorului lab12/ex02/
.find
pentru a afișa ierarhia din subdirectoare. (Hint: -mindepth
)find
pentru a afișa fișierele din ierarhia din subdirectoare cu extensia .sh
. (Hint: -name
, -type
)find
pentru a afișa fișierele din ierarhia din subdirectoare care nu au extensia .sh
. (Hint: OPERATORS
în pagina de manual)find
pentru a afișa fișierele din ierarhia din subdirectoare cu drept de execuție care nu au extensia .sh
. (Hint: -perm
)lab12/ex03/
.${parameter%word}
(descrisă și aici) permite eliminarea din variabila descrisă de parameter
a porțiunii finale descrisă de șirul word
. Rulați exemplele de mai jos:var_ana_are_mere_echo_var_mere_var_a.c.bak_echo_var_.bak_var_nebuchadnezzar_echo_var_d}
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
).find
pentru a afișa fișierele cu extensia .dist
din ierahia lab12/ex03/horde/
. (Hint: -type
, -name
)for
, find
și ls -l
pentru a afișa informații complete despre fișierele de mai sus.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
.for
, find
și cp
pentru a crea copii de lucru ale fișierelor de mai sus.lab12/ex04/
.head
și tail
permit, respectiv, eliminarea ultimelor linii și a primelor linii dintr-un fișier. Rulați comenzile de mai jos:head_-n_-1_numbers.txt_tail_-n_2_numbers.txt_head_-n_-3_numbers.txt_tail_-n_2_numbers.txt}
read
permite parsarea unui șir primit la intrare folosind spații albe ca separator implicit:read
este folosit împreună cu while
pentru a citi un întreg fișier.
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
.
select_7.sh
și folosiți tail
pentru a afișa toate liniile mai puțin prima linie (linia de antet). (Hint: -n +N
)IFS
pentru ca read să folosească pe post de separator caracterul virgulă (,
). (Hint: detalii aici sau în pagina de manual a Bash - căutare după “Word splitting”
)tail
, while
și read
pentru a afișa doar numele și grupa studenților din fișierul catalog.txt
, separate prin caracterul două puncte (:
).if
pentru a selecta studenții care au nota mai mare sau egală cu 7
.lab12/ex05/
.grep
este folosită pentru a selecta liniile ce conțin un anumit șablon (expresie regulată):grep_ana_names.txt_grep_a._a_names.txt}
-v
(revert selection) va selecta liniile ce nu conțin un anumit șablon:
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
:
ssl_update.sh
.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
.vhost_new.conf
.</VirtualHost>
).lab12/ex06/
.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
: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:sed
folosiți -e
: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;DEST_ADDRESS
- destinatarul;my_send_mail.sh
în cadrul căruia afișați valoarea variabilei SUBJECT
din fișierul config
. (Hint: folosiți source
)sed
pentru a substitui șirul dest_name} din mail_template.txt
cu valoarea variabilei DEST_NAME
din fișierul config
.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
.lab12/ex07/
.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:grep_ana_nonsense.txt_grep_ana_nonsense.txt_grep_ana_nonsense.txt}
-i
al utilitarului sed
permite modificarea “in place” a unui fișier:svn.passwd
conține linii de forma username: password
folosite pentru autentificare în Subversion. Creați scriptul update_svn_passwd.sh
care actualizează fișierul cu parole:username
) și parola (password
);update_svn_passwd.sh
care primește doi parametri și îi afișează.svn.passwd
linia asociată numelui de utilizator primit ca prim argument. ((Hint: ^
, $1
)yes
sau no
după cum numele de utilizator primit ca prim argument se gasește în fișierul svn.passwd
. (Hint: $?
)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
, »
)svn.passwd
, actualizați linia asociată. (Hint: sed
, \1
, -i
)lab12/ex08/
.grep
folosesc caractere care au rol special (^
, $
, *
, +
, .
). Pentru a putea fi folosite cu rol de caracter ASCII se citează folosind backslash (\
):grep "run*for" echo -e "run*for*it \n runforit" | grep "run\*for" }
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 \< .. \>
:
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
.
grep
pentru a selecta liniile ce conțin șirul gmail
.grep
pentru a selecta liniile ce conțin șirul gmail.com
. (Hint: folosiți \
pentru citare)grep
pentru a selecta liniile ce conțin cuvântul gmail.com
. (Hint: \<
ș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)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ă)lab12/ex09/
.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:sort
sortează liniile de la intrare. Este folosit de obicei în conjuncție cu uniq
: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.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:
).|
) ș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)grep
pentru a elimina liniile albe (liniile care conțin doar spații sau caractere TAB sau care nu conțin nimic).|
) și sort
pentru a sorta adresele de e-mail ale destinatarilor.|
) și uniq
pentru a “uniciza” adresele de e-mail ale destinatarilor cu afișarea numărului de apariții ale acestora. (Hint: -c
)|
) și sort
pentru a sorta adreselele de e-mail după numărul de apariții ale acestora .(Hint: -r
, -n
)lab12/ex10/
.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ă.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:
).|
) ș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)|
) și sort
pentru a sorta datele mesajelor.|
) și uniq
pentru a “uniciza” datele mesajelor cu afișarea numărului de apariții ale acestora (Hint: -c
)|
) și sort
pentru a sorta datele mesajelor după numărul de apariții ale acestora (Hint: -r
, -n
).php.dist
împreună cu directoarele asociate)