Desigur, toți cei care comunică cu sistemul de operare Linux cel puțin o dată s-au împărțit (în orice caz au auzit exact) cu comanda BASH. Dar BASH nu este doar un shell de comandă, ci este de asemenea un excelent limbaj de programare scripting.
Scopul acestui articol - pentru a cunoaște utilizatorii cu bash, pentru a spune despre sintaxa tehnicilor de bază și bucăți de limbă, chiar și un utilizator obișnuit poate scrie rapid un script simplu pentru a rula de zi cu zi (săptămâni, luni-vechi) de muncă de rutină, sau, să zicem, „pe genunchi "Pentru a construi un script pentru copia de siguranță a directorului.
BASH - Bourne Again Shell (care poate fi tradus ca "renaștere a fost," sau „Born Again a fost (creatorul sh)»), cel mai popular shell în sistemele * nix, în special în GNU / Linux. Mai jos voi da o serie de comenzi încorporate, pe care le vom folosi pentru a crea propriile noastre scripturi.
- pauză - ieșire din for, în timp ce sau până la buclă
- continuă - executarea următoarei iterații pentru, în timp ce sau până la buclă
- echo - ieșirea argumentelor separate de spații la un dispozitiv de ieșire standard
- ieșire - ieșire din coajă
- export - marchează argumentele ca variabile pentru transferul la procesele copil în mediul înconjurător
- hash - își amintește numele căilor complete ale comenzilor specificate ca argumente, astfel încât să nu le caute la accesul următor
- ucide - trimite un semnal de încheiere a procesului
- pwd - Afișează directorul curent de lucru
- citire citește un șir de la intrarea în shell și îl utilizează pentru a atribui valori variabilelor specificate.
- return - determină ieșirea funcției shell cu valoarea specificată
- schimbare - mișcă parametrii poziționali spre stânga
- test - evaluează expresia condiționată
- ori - afișează numele utilizatorului și timpul de sistem folosit de shell și copiii săi
- trap - specifică comenzile care trebuie executate atunci când shell-ul primește un semnal
- unset - cauzează distrugerea variabilelor shell
- așteptați - așteaptă ieșirea din procesul copilului și raportează starea de ieșire.
Și, bineînțeles, în plus față de comenzile încorporate, vom folosi o grămadă de programe de comandă externe, separate, pe care le vom cunoaște deja în proces
Ce trebuie să știți încă de la început
1. Orice bash-script ar trebui să înceapă cu linia:
în această linie după #! calea către bash-interpret, așa că, dacă aveți instalat într-o altă locație (în cazul în care puteți învăța tastarea bash whereis) și schimbați-o pe drum.
2. Comentariile încep cu un # (cu excepția primei linii).
3. În bash, variabilele nu au un tip (acestea vor fi discutate mai jos)
Variabilele și parametrii scriptului
Voi exemplifica un exemplu mic, pe care îl vom analiza:
# specificați unde avem bash-interpret
parametr1 = $ 1 # aloca parametrul1 la valoarea primului parametru al scriptului
script_name = $ 0 # atribuie variabilei script_name valoarea numelui scriptului
echo "Ați pornit un script cu numele $ script_name și parametrul $ parametr1" # comanda ecou afișează un șir specific, variabilele sunt accesate prin intermediul $ variable_name.
echo „difuzați un script numit $ SCRIPT_NAME și parametrul $ parametr1“ # aici vom vedea alte citate, diferența este că nu există variabile de substituție în ghilimele simple.
ieșire 0 # Ieșiți cu codul 0 (finalizarea cu succes a scriptului)
Rezultatul scriptului:
Porniți un script numit ./test.sh și parametrul qwerty
Ați executat un script numit $ script_name și parametrul $ parametr1
După ce ne-am familiarizat cu modul de utilizare a variabilelor și treci parametrii în scenariu, timpul de cunoaștere a variabilelor rezervate:
Condiționați operatorii, cred, sunt familiari aproape tuturor celor care au încercat cel puțin o dată să scrie programe pe ceva. În condiții de bash, este scrisă o urmă. (de obicei, pe un exemplu):
sursă = $ 1 # în sursa variabilă, vom împinge primul parametru al scriptului
dest = $ 2 # la variabila dest, împingeți al doilea parametru al scriptului
dacă [["$ source" -eq "$ dest"]] # în ghilimele, specificăm numele variabilelor de comparat. -eq - o comparație logică care denotă "egală"
apoi # dacă sunt într-adevăr egale
echo "Aplică $ dest și sursa $ sursă este același fișier!"
ieșire 1 # ieșire cu eroare (1 - cod de eroare)
altceva # dacă nu sunt egali
cp $ source $ dest # apoi executați comanda cp: copiați sursa la receptor
fi # indica sfârșitul afecțiunii.
Rezultatul scriptului:
Aplicabil 1 și sursa 1 este același fișier!
Structura if-then-else este folosită după cum urmează:
dacă <команда или набор команд возвращающих код возврата(0 или 1)>
<если выражение после if истино, то выполняется этот блок>
<если выражение после if ложно, тот этот>
Deoarece comenzile care returnează codul de returnare, structurile [[. [. test (()) sau orice altă comandă linux (sau mai mult).
- test - utilizat pentru compararea logică. după expresie, este necesar suportul de închidere "]"
- [- sinonim pentru test
- [[- Versiunea extinsă a "[" (din versiunea 2.02) (ca în exemplu), în interiorul căreia || (Sau) (S). Trebuie să aibă un suport apropiat "]]"
- ()) este o comparație matematică.
Pentru a construi condiții multi-gradate ale formularului:
pentru consistența și lizibilitatea codului, puteți utiliza structura:
Condiții. Mai multe opțiuni
Dacă doriți să comparați o singură variabilă cu un număr mare de parametri, atunci este mai rezonabil să utilizați instrucțiunea caz.
ecou "Selectați editorul pentru a rula:"
echo "1 Rulați programul nano"
ecou "2 Început vi"
echo "3 Pornirea programului emacs"
citiți-ne faceți # aici citim în variabila $ făcând din intrarea standard
/ usr / bin / nano # dacă $ doing conține 1, atunci executați nano
/ usr / bin / vi # dacă $ doing conține 2, apoi rulați vi
/ usr / bin / emacs # dacă $ doing conține 3, apoi rulați emacs
*) # Dacă este tastat pe tastatură, ceea ce nu este descris în caz, efectuați următoarele:
ecou "A fost introdusă acțiunea nevalidă"
esac # sfârșitul instrucțiunii caz.
Selectați editorul pentru a rula:
1 Pornirea programului nano
2 Rulați programul vi
3 Pornirea programului emacs
Voi enumera operatorii logici care sunt folosiți pentru construcția if-then-else-fi:
- -z # șirul este gol
- -n # șirul nu este gol
- =, (==) # liniile sunt egale
- != # linii nu sunt egale
- -eq # este egal cu
- -ne # neuniform
- -lt, (<) # меньше
- -le, (<=) # меньше или равно
- -gt, (>) # mai mult
- -ge, (> =) # este mai mare sau egală cu
- ! # Negarea unei expresii booleene
- -a, () # logică "ȘI"
- -o, (||) # logică "OR"
Cu elementele de bază ale limbajului și a condițiilor, ne-am dat seama că să nu supraîncărcați articolul, să-l rupeți în mai multe părți (să zicem 3). În a doua parte, vom analiza operatorii de buclă și vom efectua operații matematice.