Limbi de scriptare (partea 1)

Folosind exemple selectate, această prelegere arată cât de extinse sunt posibilitățile programelor shell sub Linux. În special, această primă parte acoperă expresii regulate în detaliu și oferă o imagine de ansamblu asupra multor mici instrumente care pot face atât de mult lucru pentru dvs.

limbi

Prezentare generală

Următoarea prezentare generală prezintă toate metacaracterele importante care pot fi utilizate în expresiile regulate.

. Indică orice personaj. * Reprezintă orice număr de apariții ale personajului imediat în fața acestuia. [. ] Reprezintă unul dintre caracterele cuprinse între paranteze drepte. \ < n, m \>Reprezintă o apariție repetată a unui singur personaj imediat înaintea acestuia. ^ Presupune că este îndeplinită următoarea condiție logică la începutul liniei. $ Presupune că este îndeplinită următoarea condiție logică la sfârșitul liniei. \ Semnificația specială a următorului caracter este anulată. \ (\) Transferă modelul închis între \ (și \) într-un buffer special. Până la nouă modele pot fi salvate într-o singură linie în acest fel. \ n Reprezintă al șaselea model care a fost salvat anterior cu \ (și \).

Efectul metacaracterelor individuale ar trebui clarificat oarecum cu următoarele exemple simple.

Aritmetic

Bash-ul permite calcule aritmetice. Expresia în $ [. ] este evaluat conform regulilor uzuale. În plus față de operațiile aritmetice de bază întregi, sunt acceptate o gamă întreagă de operații pe biți și operații logice.

Următorul script shell așteaptă un număr ca parametru. Se contorizează de la 1 la acest număr, cu un număr ieșit în fiecare secundă.

Realizarea programelor

Ieșirile programelor pot fi ușor utilizate într-un script shell. Asta între `. Comanda `închisă este executată în acest moment, iar ieșirea comenzii poate fi utilizată în script.

Următorul exemplu citește dintr-o serie de fișiere Postscript câte pagini conțin și adaugă toate paginile.

Redirecționarea fișierelor

Bash oferă o varietate de opțiuni pentru redirecționarea ieșirii programelor. Ar trebui prezentate două posibilități deosebit de interesante.

1. Îmbinați stdout și stderr

Multe programe își scriu ieșirea în stdout și stderr. Dacă ambele fluxuri vor fi direcționate într-un singur fișier, procedați după cum urmează:

Expresia înseamnă că ieșirea din stderr este redirecționată către stdout, care la rândul său este ieșită la fișierul file_out.

Al doilea număr pe stderr

Uneori există dorința de a scrie ieșirea pe stderr dintr-un script pentru a separa ieșirea scriptului shell. Cu ecou și redirecționarea fișierului, acest lucru este posibil după cum urmează:

Ieșirile apar pe stderr .

Aici se documentează

Cu comanda echo și redirecționarea fișierului este posibil să creați un fișier nou dintr-un script shell:

Dacă mai multe linii vor fi scrise continuu în fișier, următoarea soluție poate fi utilizată în locul mai multor linii de ecou:

Separator de intrare

Următoarea problemă: În scriptul shell, un fișier text ar trebui citit câmp cu câmp, câmpurile fiind separate prin file. De obicei, livrați următoarele rânduri

fișierul cuvânt cu cuvânt.

Pentru a separa o linie în cuvinte individuale, Bash folosește variabila internă IFS, care conține toți separatorii posibili. IFS = este setat aici în mod implicit.

Problema pusă mai sus este acum rezolvată de următoarele linii:

Ceas vorbitor

Un exemplu ceva mai extins de programare a shell-ului este ceasul vorbitor. Skirpt stăpânește, în esență, trei tipuri diferite de ceasuri: un ceas de vorbire, un ceas de biserică și un ceas cu cuc. Cu primele două, ora este afișată la fiecare sfert de oră prin anunțarea orei folosind fișiere de sunet gata făcute sau prin apăsarea ceasului în consecință. Ceasul cu cuc arată numărul de ore la fiecare oră completă.

Cel mai simplu mod de a apela ceasul este prin crontab. Următoarele fișiere de sunet sunt, de asemenea, necesare pentru a utiliza ceasul.

Următoarea prezentare generală prezintă o serie de programe mai mult sau mai puțin puternice care pot fi de diverse folosiri la scrierea scripturilor shell.