Salut, bine ati venit pe ItAssistant.org, numele meu este Vlad si astazi va voi prezenta unele notiuni introductive despre shell scripting.
Pentru inceput sa discutam despre o serie de comenzi si facilitati oferite de Bash, care se vor dovedi utile in cadrul scripting-ului efectiv.
Pentru inceput, comanda type primeste drept parametru numele altei comenzi si ne va oferi diferite informatii despre aceasta.
Spre exemplu :
itassistant@ubuntu:~$ type cd cd is a shell builtin
Sau
itassistant@ubuntu:~$ type rm rm is hashed (/bin/rm)
De asemenea, type detecteaza si aliasurile catre diferite comenzi :
itassistant@ubuntu:~$ type ls ls is aliased to 'ls --color=auto'
Un alias este de fapt o scurtatura pentru o comanda mai lunga pe care o folosim destul de des. Daca, de exemplu, folosim destul de des comanda ‘ls -alh’, ii putem face alias-ul ‘la’ pentru o tastare mai rapida.
Pentru a face acest lucru, va trebuie sa editam fisierul ~/.bashrc , si sa adaugam urmatoarea linie :
alias la = 'ls -alh'
Bash-ul ne permite sa secventiem o serie de operatii, sau sa le realizam in paralel.
Pentru a realiza doua operatii in mod secvential, putem sa introducem caracterul special ; intre cele doua comenzi. De exemplu, pentru a crea un director nou si pentru a-l accesa, putem tasta:
mkdir folder_nou ; cd folder_nou
Pentru a executa doua comenzi in paralel, pentru a economisi timp in cazul in care dispunem de un procesor multi-core, vom folosi caracterul special &, astfel :
task1 & task2De asemenea, este foarte important sa intelegem cum functioneaza operatorul | si redirectarile in fisiere, motiv pentru care va recomand sa parcurgeti si ACEST TUTORIAL.
Ce este de fapt un shell script ? Acest este un fisier cu extensia .sh ( dar acest lucru nu este obligatoriu ) care contine comenzi bash. Putem rula un shell script in doua moduri.
1. Daca fisierul este executabil si daca prima sa linie este #!/bin/bash , atunci il putem rula ca pe orice alt executabil folosind:
./nume_script.sh2. Ruland-ul prin intermediul bash, astfel:
bash nume_script.shFoarte important de retinut este ca atunci cand este rulat un script se porneste de fapt un nou proces care va rula comenzile din fisier. In momentul in care se ajunge la sfarsitul fisierului, controlul se da inapoi terminalului care l-a lansat.
Ca in orice limbaj de programare putem crea variabile noi, astfel:
a=5
Pentru a afisa o variabila, o vom referentia folosind caracterul $, astfel :
echo $a
Important de retinut este faptul ca, spre deosebire de C sau alte limbaje, spatierea este foarte importanta in Bash. Un spatiu inainte sau dupa egal va conduce la o eroare, iar variabila noastra nu va fi instantiata.
itassistant@ubuntu:~$ b =5 bash: b: command not found
O variabila definita in cadrul unui proces Bash nu sunt vizibile in cadrul altui proces Bash. Pentru a face acest lucru, este necesar ca variabila sa fie exportata, folosind comanda:
itassistant@ubuntu:~$ export a=5
Din acest moment, orice shell script care va fi executat din cadrul terminalului curent va mosteni in mod automat si variabila $a.
Sa trecem acum efectiv la elemente de shell scripting. De obicei, un shell script va primi o serie de parametri.
Pentru a-i accesa putem proceda astfel :
- $0 este numele scriptului
- $# este numarul de parametrii pasati scriptului
- $@ reprezinta un string format din toti parametrii
- $1, $2, etc reprezinta fiecare parametru in parte
Spre exemplu, pentru a afisat numele tuturor parametrilor unui script, putem proceda astfel:
for i in $@ do echo $i done
Pentru mai multe detalii despre modalitatile de a itera prin anumite elemente ( for, while ) si de asemenea sintaxa pe care o putem folosi pentru if , va recomand ACEST TUTORIAL.
In continuare sa vorbim despre un subiect nou, respectiv valorile de iesire ale programelor in bash.
Orice aplicatie rulata in bash va intoarce un exit code, care ne va comunica modul in care s-a terminat respectiva aplicatia, cu eroare sau cu succes.
Pentru a accesa exit code-ul ultimulei aplicatii rulate in bash putem afisa variabila $?:
itassistant@ubuntu:~$ pwd /home/itassistant itassistant@ubuntu:~$ echo $? 0 itassistant@ubuntu:~$ cd forbidden bash: cd: forbidden/: Permission denied itassistant@ubuntu:~$ echo $? 1
Dupa cum putem observa, codul de exit 0 inseamna faptul ca respectiva aplicatie s-a terminat cu succes, pe cand un cod de eroare 1 semnifica faptul ca a avut loc o eroare.
Putem folosi codul de eroare al aplicatiilor pentru a le inlantui logic, folosind operatiile de SI ( && ) respectiv SAU ( || ) logic.
De exemplu, pentru a intra intr-un folder si pentru a crea un fisier in nou in acel folder vom proceda astfel:
cd folder && touch file
Daca nu avem permisiuni pentru a accesa respectivul folder, fisierul nu va mai fi creat.
De asemenea, putem folosi SAU logic pentru a rula o comanda in cazul in care prima comanda s-a intors cu eroare.
Spre exemplu, daca dorim sa rulam o comanda cu sudo doar in cazul esueaza la rularea normala, putem proceda astfel:
comanda || sudo comanda


