Bash pentru bărbați reali - universul notei geek

Vă prezentăm un articol de instruire despre scripturile bash, care presupune că cunoștințele despre bash sunt egale sau aproape de zero. Promitem că, cu ajutorul acestui articol, veți înțelege că crearea de scripturi bash este extrem de simplă. Cu toate acestea, în cazul în care în acest articol, tot nu va găsi răspunsuri la toate întrebările dvs. (bine, sau pentru alte motive pentru care este nevoie de ajutorul surse terțe), se poate aplica direct managerului nostru :)

Deci, să începem să studiem shell-ul de comandă Bash.
Să începem antrenamentul cu un simplu script "Hello World".

1. Bash script Hello World
Mai întâi trebuie să aflați unde se află traducătorul. Pentru aceasta, introduceți următoarea comandă:

Ei bine, acum sunteți complet gata să creați primul dvs. bash-script:


2. Bash-script simplu pentru backup:


3. Variabile
În acest exemplu, declarăm o variabilă bash simplu și afișăm-o folosind comanda ecou.

Script pentru backup și variabile:


3.1. Variabile locale și globale


4. Transmiterea argumentelor în scriptul bash


5. Executați comenzile shell cu bash


6. Citirea datelor de intrare ale utilizatorilor


8.2. Importarea unui fișier în matricea bash


Executarea scriptului bash cu ieșirea la execuția fișierului cu o ieșire:


9. Scripturile Bash cu if / else / fi
9.1. O expresie Bash simplă cu if / else
Acordați atenție semnalelor în paranteze [și]! Fără aceste spații, scenariul nu va funcționa.


10.2. Comparați șirurile
= egal
!= nu egal
mai mare decât atunci
-n s1 șirul s1 nu este gol
-z s1 șirul s1 este gol


11. Verificarea dosarului Bash
-b filename - blocarea unui fișier
-c nume fișier - fișierul conține date speciale. simboluri
-d directorname - verificarea existenței directorului
-e nume fișier - verificați dacă fișierul există
-f nume fișier - verificați existența NEDirectories
-G filename Verificați dacă fișierul există și este deținut de ID-ul grupului eficient.
-g filename true dacă fișierul există și este set-grup-id.
-k file bit Sticky
-L nume de fișier Legătură simbolică
-O nume fișier Adevărat dacă fișierul există și este proprietatea id-ului de utilizator efectiv.
-r nume fișier - verificați disponibilitatea fișierului
-S filename Verificați dacă fișierul este socket
-s filename - verificați dacă fișierul este mai mare decât zero
-u nume fișier Verificați dacă bitul set-set-ser-id este setat
-w nume fișier - verificați dacă este posibilă rescrierea fișierului
-x nume fișier - verificați executabilitatea fișierului

În mod similar, pentru a testa existența unui fișier, puteți utiliza buclă în timp. Acest script nu va funcționa atât timp cât fișierul există. Observați operatorul de negație a bash "!", Care anulează funcția -e.

Rularea buclă din linia de comandă bash:


12.4. Controlul ciclului bash
Mai jos este un exemplu de buclă în timp, controlată de intrarea standard. Bash în timp ce buclă funcționează în timp ce există o tranziție de la STDOUT la STDIN și la comanda de citire.


16. Citate din Bash
Citatele sunt un element important al scrierilor bash și bash. Mai jos veți găsi câteva elemente de bază despre utilizarea citatelor în bash.
16.1. Escaping caractere speciale
Înainte de a începe să folosim ghilimele, trebuie să învățăm cum să scăpăm de caractere speciale. Această procedură va permite bashului să recunoască direct semnificația acestor caractere. Pentru a face acest lucru, trebuie să folosim spătarul "# 092;". De exemplu:


16.2. Citate unice
Citatele singulare din bash scapă de valoarea tuturor caracterelor speciale. Astfel, caracterele speciale vor fi recunoscute literalmente. În acest caz, nu puteți utiliza o singură cotă în două alte cotații similare, chiar dacă una dintre ele este scăpată cu un backslash.


16.3. Citate duble
Citatele duble sunt folosite în bash pentru a scăpa de toate caracterele speciale, cu excepția "# 036;", "# 092;" și ``. Toate celelalte sunt speciale. caracterele vor fi recunoscute literal. Spre deosebire de paragraful anterior, puteți utiliza citate simple în interiorul ghilimelelor duble. Dacă trebuie să utilizați un alt ghilimele duble între ghilimele duble, puteți forța bash să le recunoască literalmente folosind spătarul "# 092;". De exemplu:

Ansi-c desemnarea pentru bash-ecran: # 036; ''. exemplu:


17. Operațiuni aritmetice
17.1. Exemplu de adăugare utilizând bash


17.3. Se rotunjește un număr cu virgulă mobilă


17.4. Calculul virgulă flotantă Bash


18. Redirecționări
18.1. STDOUT din scriptul bash în STDERR

Pentru a verifica redirecționarea STDOUT la STDERR, puteți redirecționa ieșirea scriptului într-un fișier:

18.2. STDERR din scriptul bash în STDOUT

Pentru a verifica redirecționarea STDERR la STDOUT, puteți redirecționa ieșirea scriptului într-un fișier:

18.3. STDOUT pe ecran
O modalitate simplă de a redirecționa STDOUT este pur și simplu să utilizați orice comandă, deoarece STDOUT implicit este afișată automat pe ecran. Dar, mai întâi, creați fișierul "file1":

Așa cum puteți vedea din exemplul de mai sus, executarea comenzii ls a apelurilor STDOUT, care este afișată în mod implicit.

18.4. STDOUT la dosar
Pentru a bloca comportamentul implicit al STDOUT, putem folosi ">" pentru a redirecționa ieșirea într-un fișier:


18.5. STDERR la dosar
În mod implicit, se afișează STDERR:

În următorul exemplu, redirecționăm eroarea standard (stderr) la un fișier, iar stdout - ca implicit, pe ecran. Rețineți că STDOUT este afișat și STDERR este scris în fișier sub numele STDERR:


18.6. STDOUT în STDERR
De asemenea, este posibil să redirecționați STDOUT și STDERR la un fișier. În următorul exemplu, redirecționați STDOUT la același descriptor ca STDERR. Atât STDOUT, cât și STDERR vor fi redirecționați către fișierul "STDERR_STDOUT".

Acum fișierul STDERR_STDOUT conține atât STDOUT, cât și STDERR.

18.7. STDERR la STDOUT
Exemplul de mai sus poate fi rescris pentru a redirecționa STDERR la același descriptor ca SDTOUT:


18.8. STDERR și STDOUT la dosar
Ambele exemple superioare au redirecționat STDOUT și STDERR la un fișier. Există un alt mod de a obține același efect: