Unul dintre instrumentele puternice ale shell-urilor moderne (inclusiv Bash) este caracterele cu caractere de tip wildcard care vă permit să specificați câteva nume de comenzi sau fișiere într-o singură expresie. Să luăm în considerare un exemplu simplu. Dacă introduceți o comandă,
răspunsul la aceasta va fi o listă completă a fișierelor din directorul curent. Să presupunem că trebuie să găsim un fișier care știe doar că numele său începe cu litera "z". Introducem comanda,
în care argumentul z * înseamnă toate fișierele ale căror nume încep cu litera "z". Pentru utilizatorii de DOS sau Windows, o astfel de aplicare a unui asterisc este probabil familiarizată. După introducerea listelor de comandă Bash shell toate fișierele ale căror nume încep cu „Z“ și înlocuiește z argumentul * această listă. Numele de fișiere din listă sunt transmise ca argumente la comanda Is -1. În shell-ul Bash, caracterul "*" este cu mult mai larg decât în fereastra DOS sau Windows DOS.
Wildcards în desemnarea directoarelor și fișierelor
Una dintre utilizările caracterelor de tip wildcard este desemnarea directoarelor și fișierelor. Aici, în afară de asterisc, sunt folosite două simboluri. Toate simbolurile, precum și valorile acestora, sunt prezentate în Tabelul. 16.3.
Tabel. 16.3. Folosirea de caractere de tip wildcard în desemnarea directoarelor și a fișierelor
Orice caracter unic
Orice caracter unic inclus în paranteze
Orice caracter unic care se încadrează în intervalul specificat
Orice caracter, cu excepția parantezelor
Orice caracter unic care nu se încadrează în intervalul specificat
Să luăm în considerare câteva exemple.
Să presupunem că este necesar să se facă o listă cu toate fișierele cu numele de trei caractere, primul dintre care „o“, iar ultima - „z“. Acest lucru se poate face prin introducerea comenzii
Dacă vom înlocui semnul de întrebare cu un asterisc, vom obține o listă de fișiere ale căror nume începe cu un „dar“ și se termină cu „Z“.
Semnul de întrebare denotă un caracter arbitrar, un asterisc indică un număr, inclusiv zero.
Luați în considerare situația când trebuie să obțineți o listă a fișierelor ale căror nume încep cu a, b, c sau d._ Puteți folosi următoarea comandă pentru a face acest lucru.
Cu toate acestea, această formă este oarecum dificilă. Este mult mai convenabil să utilizați următoarele: $ Is -I [abed] *
Expresia în paranteze pătrate înseamnă oricare dintre literele listate, un asterisc este orice număr de caractere arbitrare care o urmează.
Deoarece aceste litere formează o secvență continuă, comanda poate fi simplificată:
În cele din urmă, uneori este necesar să excludem unul sau mai multe caractere, inclusiv toate celelalte. Luați în considerare crearea unei arhive comprimate a tuturor directoarelor sursă ale sistemului. Să presupunem că doriți să arhivați toate directoarele cu excepția celor ale căror nume încep cu litera "m". Pentru a face acest lucru, puteți utiliza comanda,
dar următoarea formă a aceleiași comenzi este mult mai convenabilă:
Aici expresia în paranteze pătrate denotă orice caracter, cu excepția literei "m".
Puteți complica sarcina, excluzând arhivarea directoarelor ale căror nume încep cu literele m, n sau o. Comanda corespunzătoare va avea forma
bretele
Caracterele din paranteze au aceleași proprietăți, dar se aplică și numelor care nu sunt asociate neapărat cu fișierele sau directoarele existente. Luați în considerare un exemplu de comandă cu o expresie în paranteze curbate.
Această comandă creează patru directoare cu numele testdirl, testdir2, testdir3 și testdir4.
Rețineți că elementele de expresie din acoladele curbate sunt separate prin virgule și toate sunt folosite secvențial pentru a forma numele dorite. Elementele delimitate sugerează că acestea separând, spre deosebire de elementele din paranteze pătrate, poate conține mai mult de un simbol, cum ar fi:
Rețineți că expresia în paranteze curbate trebuie să conțină cel puțin o virgulă.
Este interesant faptul că în expresiile în bretele coiterale puteți introduce expresii cu simboluri de substituire ale denumirilor de fișiere și de directoare, precum și alte expresii în paranteze curbate. Aceasta este o consecință a faptului că caracterele imbricate sunt înlocuite mai întâi. Luați în considerare următorul exemplu.
În această comandă se creează următoarele cataloage.
În comanda de mai sus, expresia este închisă într-o altă expresie în paranteze curbate.
În mod similar, expresii cu metacaractere pentru nume de fișiere și directoare pot fi specificate în coarde curbate. La comandă
există o modificare a permisiunilor de accesare a unei serii de fișiere, inclusiv a tuturor fișierelor care corespund expresiilor de test. tx. testfile.bak și de la testfile.00 la testfile.09.
Command substitution
De exemplu, ia în considerare situația în care trebuie să comprimați toate fișierele cu extensia. Bak. O listă a acestor fișiere poate fi obținută prin introducerea comenzii
Aceeași comandă cu pavilionul exec poate fi utilizată pentru a comprima toate fișierele.
O altă opțiune este înlocuirea comenzii, ca în exemplul următor.
Aici, comanda de găsire este cuprinsă în citate simple inverse care indică faptul că rezultatele acesteia ar trebui folosite ca parte a liniei de comandă - în acest caz, ca argumente pentru comanda gzip.
Există o formă alternativă a acestui design - fără backquote:
Principala diferență dintre cele două construcții este simțul coloanei înapoi (\) în primul dintre ele. Acest sens este reținut doar dacă sunt specificate caracterele "$", "" sau "".
Lista de mai sus a caracterelor cu machete pentru coaja Bash nu este completă. O listă completă, împreună cu o descriere detaliată, poate fi găsită pe pagina de manual Bash. Cu toate acestea, și ceea ce am descris, oferă o mulțime de oportunități. Dacă aveți nevoie de unelte suplimentare legate de caractere cu repere, consultați pagina manuală utilizând comanda man bash.