Script de shell (bash)
Un script de shell este un fișier text cu o listă de comenzi de shell și este executat ca un program pentru a efectua o sarcină sau un set de sarcini. Scopul principal al unui script shell este de a automatiza sarcinile și de a economisi timp. Este important să înțelegeți structura de bază a unui script shell, deoarece interacționați cu un cluster de calcul prin intermediul scripturilor shell (a se vedea capitolul următor despre Grid Engine)
ce este Bash?
Există multe shell-uri diferite disponibile în sistemele de tip Unix. Bourne Again Shell (Bash) este unul dintre ele, acesta fiind shell-ul implicit pe sistemele GNU/Linux. Are unele avantaje față de alte shell-uri și este practic shell-ul standard, iar mai jos vom arăta cum să îl folosim pentru scripting.
Scrierea unui script simplu de shell Bash
Un script de bază de shell este doar o serie de comenzi. Aceasta este ceea ce vom arăta în continuare.
Să scriem un script simplu care scoate pe ecran „hello world” folosind comanda echo
. Vom salva fișierul text ca myScript.sh
#!/bin/bash echo Hello World
executarea sintaxei unui script shell:bash your-script-name
. În cazul nostru, vom scrie:
$ bash myScript.sh Hello World
exemplu mai complicat
Să scriem un script ceva mai complicat folosind mai multe comenzi de shell. Scriptul folosește ls
pentru a lista fișierele și folosește comanda wc -l
care numără numărul de linii dintr-un anumit fișier sau din intrarea standard. În acest caz, wc -l
numără numărul de linii din ieșirea lui ls -l
. Toate acestea se realizează prin utilizarea pipe-ului |
.
Conținutul scriptului.sh:
#!/bin/bash echo here are the list of files ls -l echo The number of files: ls -l | wc -l
Îl putem executa după cum urmează:
$ bash script.sh
variabile în scripturile bash
De asemenea, puteți utiliza variabile în scripturile bash. Care sunt utile pentru a capta ieșirea comenzilor intermediare și a le utiliza pentru a executa alte comenzi. nu există tipuri de date pentru variabile. O variabilă în bash poate conține oricare dintre următoarele: un număr, un caracter sau un șir de caractere.
Nu este nevoie să declarați o variabilă, simpla atribuire a unei valori la referința sa o va crea.
Acum vom crea un script simplu cu o singură variabilă. Vom atribui Hello world
șirul Hello world
la acea variabilă și vom imprima acea variabilă cu echo
.
#!/bin/bash VAR="Hello world" echo $VAR
Când am atribuit variabila nu am folosit semnul $
, dar când am folosit variabila a trebuit să folosim semnul $
.
Argumente de linie de comandă în scripturile bash
Scriptul poate primi și argumente de linie de comandă. Aici modificăm scriptul care listează fișierul pentru a lua un argument de linie de comandă. Argumentul va fi o cale către un director.
conținutul scriptului2.sh:
#!/bin/bash VAR= echo here are the list of files ls -l $VAR echo The number of files: ls -l $VAR | wc -l
Iată cum se execută scriptul:
$ bash script2.sh /home/user/project
Argumentele sunt stocate în variabile cu un număr în ordinea argumentului începând de la 1
- Primul argument: $1
- Secundul argument: $2
- și așa mai departe…
În cazul nostru, corespunde lui
/home/user/project
.
Operații aritmetice scripturi bash
Operațiile aritmetice asupra numerelor întregi în bash se fac în următorul format:
#!/bin/bash x=6 y=2 $((10 - 5)) $((x-y)) echo $((x-y)) echo $((10-5))
Puteți, de asemenea, să copiați și să lipiți aceste comenzi în consolă pentru a vedea cum funcționează. Comenzile echo
ar trebui să dea ca rezultat 4
și 5
.
Aritmetica în bash nu suportă virgulă mobilă (de exemplu, operația 1,3 -1 nu va funcționa în bash), trebuie să folosiți comanda bc
. Consultați acest exemplu din stackOverflow pentru un exemplu de utilizare a bc
.
Lovind peste fișiere
Dacă încercați să automatizați o sarcină folosind scriptingul bash, este foarte probabil că va trebui să aplicați anumite comenzi pe fiecare fișier dintr-un director. Acest lucru ar putea fi realizat cu buclele cu caractere wild*
și for
. Următorul script stochează toate fișierele ‘.txt’ din directorul /path/to
în variabila FILES
. Apoi, pentru fiecare fișier calculează numărul de linii și îl scoate la ieșire cu comanda wc -l
.
#!/bin/bash FILES=/path/to/*.txt for f in $FILES do echo "Processing $f file..." # count number of lines and output that for file $f wc -l $f done
Mai multe despre scripturile bash
Puteți scrie scripturi shell și mai complicate folosind structuri de control (bucle if/else, for/while) și puteți realiza multe lucruri doar folosind scripturile shell, dar acest lucru depășește sfera de aplicare a acestui document. Consultați linkurile de mai jos dacă doriți să vă perfecționați în scrierea scripturilor shell.
- http://www.freeos.com/guides/lsst/
- http://www.tldp.org/LDP/Bash-Beginners-Guide/html/
.