M06 UF2:  Automatitzaciˇ de tasques i llenguatges de guiˇ
ASIX-2
GNU/Linux
Arxius de guiˇ del bash de Linux (Part 2)
12/03/19

Arxius de guiˇ del bash de Linux (Part 2)

1- Documentaciˇ 

1.1- Funcions

a)
Definiciˇ de funcions
b) Pas de parÓmetres a funcions
c) Variables locals de funcions

1.2- Expressions regulars: grep, awk, cut, tr, tail i head

a)
awk
b) cut
c) tr
d) Expressions regulars simples amb grep. Ampliaciˇ de awk.
e) https://www.regular-expressions.info/ip.html

1.3- Zenity

a)
Zenity (arxius de guiˇ amb interfÝcie grÓfica)

2- Exemples de treball amb funcions

a) AccÚs a arxius de guiˇ amb exemples de treball amb funcions

3- Exemples amb awk, cut, tr, tail i head
a)
Per imprimir columnes de les lÝnies d'un fitxer de text utilitzant carÓcters especial com a separador:
     awk  -F  ":"  '{print $1}'  /etc/passwd   --> Mostra la primera columa (el nom d'usuari) del fitxer /etc/passwd.
El carÓcter : serveix per identificar les columnes. 
    
awk  -F  ":"  '{print $1 "  "  $3}'  /etc/passwd   --> Mostra la primera columa i 3a columna (nom d'usuari i UID) del fitxer /etc/passwd
     cut  -d  ":"  -f 1  /etc/passwd  --> Talla la lÝnia a trossos i mostra el primer tros (usuari). El carÓcter : serveix per fer els talls.
    
cut  -d  ":"  -f 1,3  /etc/passwd  --> Talla la lÝnia a trossos i mostra el primer tros (usuari) i el 3r (UID). El carÓcter : serveix per fer els talls.
 b) Per canviar carÓcters o suprimir carÓcters repetits:
    
cut  -d  ":"  -f 1,3  /etc/passwd  |  tr  ":"  "  "  --> Talla la lÝnia a trossos i mostra el primer tros (usuari) i el 3r (UID). El carÓcter : serveix per fer els talls. Els ":" seran canviats per " ".
     echo "Hola     ---      mˇn......"  |  tr  -s  "  -." --> Mostra hola : mˇn. --> esborra espais en blanc, -  i .  repetits
     Nota:  \t representa el tabulador i \n el canvi de lÝnia.
c) Per mostrar el final o el principi d'un fitxer:
    tail  -n 10 /var/log/syslog   -->  Mostra les darreres 10 lÝnies de /var/log/syslog
    head 
-n 10 /var/log/syslog   -->  Mostra les primeres 10 lÝnies de /var/log/syslog
d) Per aprofitar cut amb una cadena de carÓcters:
    echo "35.098.567.T"  |  cut  -d  "."  -f  2  --> Mostra 098


4- Exemples de treball amb Zenity
a) Exemples bÓsics
b) Exemples-1
c) Exemples-2
d) Canalitzaciˇ cap a zenity
e) Zenity: Escollir un fitxer i una opciˇ dins d'una llista


PR└CTICA (PART 1) - FUNCIONS


1-
Fes un arxiu de guiˇ  de l'interpret d'ordres del bash shell per l'usuari root que tingui 2 funcions. La primera funciˇ s'anomenarÓ mostra_serveis() i desprÚs de netjar la pantalla, mostrarÓ un men˙ per escollir entre els segŘent serveis: a) cups, b) ssh i c) apache2. L'opciˇ escollida s'haurÓ d'enviar a una altra funciˇ de nom ctrl_servei() que posarÓ el servei en funcionament  si el servei no estÓ en marxa.  Si el servei estÓ en marxa no farÓ res i finalitzarÓ la funciˇ. El programa finalitzarÓ amb el codi de retorn 0. El script s'anomenarÓ ctrlsrv.sh.

2- Fes un arxiu de guiˇ  de l'interpret d'ordres del bash shell per l'usuari root que tingui 5 funcions:
    * Funciˇ menu() --> Neteja pantalla i mostra les 4 opcions del programa que sˇn:
                       a) Crea usuari
                       b) Crea grup
                       c) Afegeix un un usuari a un grup
                       d) Treu un usuari d'un grup
    * Funciˇ crusr() --> Neteja pantalla, demana dades per crear un usuari i crea el grup
    *
Funciˇ cgrp() --> Neteja pantalla, demana dades per crear un grup i crea el grup
    *
Funciˇ afegr() --> Neteja pantalla, demana dades d'un usuari i grup, i afegeix l'usuari al grup
   
* Funciˇ esbgr() --> Neteja pantalla, demana dades d'un usuari i grup, i treu l'usuari del grup

El programa mostrarÓ pantalla el men˙, i executarÓ la funciˇ corresponent d'acord amb l'opciˇ escollida. Un cop realitzada la tasca escollida, el programa ha de demanar a l'usuari  si vol continuar treballant o sortir del programa. Si l'usuari escriu 's' llavors es tornarÓ a mostrar el menu i en cas contrari el programa finalitzarÓ enviant un 0 com a codi de retorn. El script s'anomenarÓ usrgrp.sh.

3- Fes un arxiu de guiˇ  de l'interpret d'ordres del bash shell que mostri per pantalla el n˙mero de fitxers amb permisos de lectura (per l'usuari que l'executa) i de mida diferent a zero que es troben en un directori del qual es demanarÓ el nom a l'usuari. A continuaciˇ, el nom del directori es passarÓ com a parÓmetre a una funciˇ de nom compte() que serÓ l'encarregada de comptar el n˙mero de fitxers que compleixen les condicions indicades al principi i mostrar el resultat per pantalla. El programa finalitzarÓ amb el codi de retorn 0. El nom del script serÓ compte_fitxers.sh.               


PR└CTICA (PART 2) - EXPRESSIONS REGULARS

1-
Fes un arxiu de guiˇ que demani a l'usuari per teclat el nom i directori d'un arxiu de configuraciˇ principal d'un servei de Linux i crei una nova versiˇ del fitxer sense comentaris que s'haurÓ de desar a una carpeta personal de l'usuari de nom FitxConfBackup. El programa ha de crear la carpeta si no existeix. El nom del fitxer desat a FitxConfBackup ha de ser el mateix que l'original. Si el fitxer ja existeix, s'ha de sobreescriure. El programa finalitzarÓ amb el codi de retorn 0. El nom del programa serÓ backup.sh.

2- Fes un arxiu de guiˇ que extregui tots els punt de muntatge i formats del fitxers /etc/fstab i desi aquesta informaciˇ dins d'un fitxer de nom mountpoint.txt dins una carpeta personal de l'usuari de nom FitxConfBackup. El programa ha de crear la carpeta si no existeix. Si el fitxer ja existeix, s'ha de sobreescriure. El programa finalitzarÓ amb el codi de retorn 0. El nom del programa serÓ mountpoints.sh.

3- Fes un  arxiu de guiˇ que descarregui error.logs i a continuaciˇ extregui totes les lÝnies que tinguin un error per una data determinada que l'usuari haurÓ d'entrar per teclat (dia, mes i any) i desi aquesta informaciˇ dins d'un fitxer de nom errXXXXYYYDD.log dins una carpeta personal de l'usuari de nom FitxConfBackup. XXXX representa l'any introduit per teclar. YYY representa el mes i DD el dia. El programa ha de crear la carpeta si no existeix. Si el fitxer ja existeix, s'ha de sobreescriure. El programa finalitzarÓ amb el codi de retorn 0. El nom del programa serÓ errors.sh.

4- Fes un arxiu de guiˇ que demani a l'usuari l'adreša IP dels servidors DNS del sistema. L'arxiu crearÓ un nou fitxer /etc/resolv.conf  a sobre del fitxer ja existent amb les noves IP de servidor DNS. Abans de crear el nou arxiu, el programa s'ha d'assegurar que les adreces IP tenen el format correcte. Si les adreces no sˇn correctes,  el programa finalitzarÓ immediatament enviant el codi de sortida 1 i sense modificar l'arxiu /etc/resolv.conf.
Si les adreces sˇn correctes,  el programa crearÓ un nou fitxer /etc/resolv.conf i finalitzarÓ immediatament enviant el codi de sortida 0. El nom del programa serÓ dns.sh.

5-
Fes un  arxiu de guiˇ que descarregui dins del directori des del qual s'executa el programa el fitxer mails.tmp i a continuaciˇ extregui totes les lÝnies que tinguin una adreša de correu electr˛nic amb el format correcte. Amb aquestes adreces s'ha de crear un nou arxiu de nom mails_ok.txt en el mateix directori a on s'ha executat el programa.  El nom del programa serÓ mails.sh.

6-
Fes un arxiu de guiˇ que demani a l'usuari una adreša URL, comprovi si es correcta i a continuaciˇ cridi a firefox per obrir l'adreša introduida. Si l'adreša URL no tÚ el format correcte, llavors el programa finalitzarÓ immediatament enviant el codi de sortida 1.  Si l'adreša URL no tÚ el format correcte, llavors el programa obrirÓ firefox amb l'adreša indicada i finalitzarÓ el codi de sortida 0.  El nom del programa serÓ url.sh.

PR┬CTICA (PART 3) - ZENITY

1- Fes un arxiu de guiˇ de l'interprets d'ordres del bash shell, que tingui un GUI utilitzant amb zenity, que permeti primer de tot escollir a l'usuari un directori (el directori  d'inici sempre ha de ser el directori personal de l'usuari que executa el programa) desprÚs escriure un nom de fitxer a crear dins d'aquest directori i finalment escolir una extensiˇ dins d'una llista. La llista serÓ de tipus "radiolist" i tindrÓ les segŘents opcions: 1) .c., 2) .sh, i 3) .conf. A continuaciˇ es mostrarÓ un quadre de diÓleg que permiti introduir un text que Ús desarÓ dins del fitxer escollit. El fitxer es crearÓ amb els permisos per defecte i l'usuari  haurÓ d'escollir  entre donar-li permÝs d'execuciˇ o no si el fitxer tÚ extensiˇ ".sh", utilitzant una finestra de tipus "Question Dialog". El nom del script serÓ dialog01.sh.

2- Fes un arxiu de guiˇ de l'interprets d'ordres del bash shell per l'usuari primari (root), que tingui un GUI utilitzant amb zenity, i que mostri un formulari que demani totes les dades necessÓries per crear un nou usuari. Un cop donades les dades, el programa crearÓ l'usuari, i enviarÓ a la pantalla un avÝs d'usuari creat.  El password de l'suari no s'ha poder veure quan s'escriu. El nom del script serÓ dialog02.sh.

3- Fes un arxiu de guiˇ de l'interprets d'ordres del bash shell per l'usuari primari (root), que tingui un GUI utilitzant amb zenity, i que permeti afegir una nova lÝnia al fitxer /etc/crontab. El programa haurÓ de demanar el minut, hora i dia a la qual s'haurÓ d'executar l'arxiu de guiˇ crontolat des de cron. Les hores poden ser les 00, 06, 12 i 18 (que es poden escollir des d'un men˙) i els minuts poden ser 00,15,30 i 45 (que es poden escollir des d'un men˙). El dia tambÚ s'ha de poder escollir des d'un calendari. TambÚ s'ha de poder escollir l'arxiu de guiˇ que s'executarÓ a l'hora i dia demanats. A continuaciˇ el nou fitxer /etc/crontab serÓ mostrar per pantalla. Al principi de tot, l'arxiu de guiˇ haurÓ de fer una c˛pia de seguretat de l'arxiu /etc/crontab de nom /etc/crontab.old. El nom del script serÓ dialog03.sh.

4- Fes un arxiu de guiˇ de l'interprets d'ordres del bash shell per l'usuari primari (root), que tingui un GUI utilitzant amb zenity, i que permeti fer la c˛pia de seguretat de tots els fitxers que tinguin una extensiˇ que s'ha de demanar amb un "Text entry dialog" d'un directori que s'ha d'escollir amb un "File selection Dialog". Els fitxers s'han de copiar tots junts en ˙nic fitxer que desprÚs s'ha de comprimir. El nom del fitxer de backup s'ha de demanar amb un "Text entry dialog". S'ha d'afegir la data de creaciˇ amb l'ajut d'un "Calendar dialog". S'ha de demanar el directori a on es desa el backup amb l'ajut d'un "File selection dialog". El nom del script serÓ dialog04.sh.

5- Fes un arxiu de guiˇ de l'interprets d'ordres del bash shell, que tingui un GUI utilitzant amb zenity, que permeti primer de tot escollir a l'usuari el directori a on ha desat tots els seus arxiu multimŔdia (video i audio). La finestra haurÓ de tenir el tÝtol segŘent "Selecciona la carpeta a on has desat les teves canšons" i hauria de tenir una amplada de 1000. El directori  d'inici sempre ha de ser el directori personal de l'usuari que executa el programa. Un cop escollit el directori, l'arxiu de guiˇ ha de mostrar una finestra amb una llista de tots els arxiu amb l'extensiˇ ".flv" (Flash Video --> Format dels fitxers del You Tube).  Un cop escollit el fitxer multimŔdia a reproduir, sortirÓ una pantalla amb el tÝtol" Escull volum" que permetrÓ a l'usuari escollir el volum inicial de reproducciˇ (entre 0 i 500) i a continuaciˇ es reproduirÓ el fitxer multimŔdia amb el programa vlc. Per poder fe aquesta part s'haurÓ de treballar amb l'opciˇ --scale del programa zenity. El nom de l'arxiu de guiˇ serÓ dialog05.sh.

6- Fes un arxiu de guiˇ de l'interprets d'ordres del bash shell per l'usuari root que mostri un formulari per realitzar la configuraciˇ bÓsica d'un servidor DHCP. El programa ha de fer les segŘents tasques:
El nom de l'arxiu de guiˇ serÓ dialog06.sh.

7-  Fes un arxiu de guiˇ de l'interprets d'ordres del bash shell  per l'usuari root, en el qual se li demanin totes les dades necessÓries per crear un nombre N d'usuaris. El programa ha de:
El nom del programa serÓ dialog07.sh.