Shell script-uri în linux os

Dacă puteți introduce comenzi în shell-ul Linux, puteți scrie script-uri de shell Bourne (bash). Un script este o secvență de comenzi scrise într-un fișier, iar shell-ul citește aceste comenzi din fișier, ca și cum ați tastat aceste comenzi de la terminal.

Ca și în cazul oricărui program pe sistemele Unix, aveți nevoie de un set de biți de execuție pentru fișierul script, dar puteți seta și biții de citit. Iată cel mai simplu mod de a face acest lucru:

Linux Shell Basics

Pentru a testa comenzile, puteți instala Linux pe PC sau puteți comanda un server și chiar VPS. Toate scripturile shell Bourne trebuie să înceapă cu următoarea linie, ceea ce înseamnă că programul / bin / sh trebuie să execute comenzi în fișierul script:

Asigurați-vă că nu există spații la începutul fișierului. Puteți compila o listă a tuturor comenzilor pe care doriți să le transferați în coajă după linia #! / bin / sh. Iată un exemplu foarte simplu:

#! / bin / sh
#
# Imprimați ceva, apoi executați ls
ecou Despre pentru a rula comanda ls. ls

După crearea scriptului și a setării permisiunilor acestuia, puteți rula scriptul plasând fișierul script într-unul din directoarele și apoi executând fișierul script din linia de comandă. Alternativ, puteți rula ./script dacă script-ul este localizat în același director pe care lucrați în prezent.

Restricții la scripturile shell

Fii atent la dimensiunea scripturilor tale. Bash script-urile nu ar trebui să fie foarte mari (deși vă veți întâlni, fără îndoială, cu monștrii reali în timpul lor).

Citând o constantă

O constantă este un șir pe care shell-ul nu trebuie să-l schimbe atunci când sa mutat la linia de comandă. Pentru a vedea unde poate fi folosită o constantă, luați în considerare un exemplu de modul în care interpretul Bash distribuie de obicei * toate fișierele și directoarele din directorul curent și apoi trece toate aceste elemente în linia de comandă curentă. Dacă doriți doar ca steaua (*) să fie folosită de o comandă, cum ar fi pentru grep și alte programe care utilizează expresii obișnuite: aveți nevoie de un sistem special de notație pentru a ocoli constanta *.

Cea mai ușoară modalitate de a vă asigura că shell-ul nu atinge șirul este să închideți întregul șir în citate simple. Iată un exemplu pentru grep și *.

grep 'r. * t' / etc / passwd

Toate caracterele plasate între două citate simple, inclusiv spațiile, sunt convertite într-o singură constantă. Prin urmare, următoarea comandă nu va funcționa, deoarece cere comanda grep să caute linia r. * T / etc / passwd din ieșirea standard (deoarece este specificat un singur parametru):

grep 'r. * t / etc / passwd'

Citatele duble (") funcționează la fel ca și citatele singulare, cu excepția faptului că Bash se extinde la toate variabilele care sunt în interiorul ghilimelelor duble, în timp ce nu se aplică variabilelor din ghilimele simple. Puteți vedea diferențele executând următoarea comandă și, înlocuind ghilimele duble cu cele unice, porniți-o din nou.

echo "Nu există * în calea mea: $ PATH"

Trucul principal atunci când se utilizează constante în shell-ul Bourne este de a transmite o constantă în citate unice comenzii. Acest lucru se poate face prin plasarea unei loviri înapoi înainte de caracterul de cotație unică:

echo Nu-mi plac contractiile din interiorul scripturilor shell.

Atât citatul, cât și coloana vertebrală trebuie să fie în afara oricărei perechi de ghilimele simple. Chords precum * nu duc la erori de sintaxă. Cu toate acestea, destul de ciudat, puteți închide citate singulare în ghilimele duble, după cum arată următorul exemplu (ieșirea este identică cu cea din comanda anterioară):

echo "Nu-mi plac contractele în interiorul scripturilor shell".

Variabile speciale pentru shell-ul Linux

Cele mai multe script-uri de shell înțeleg parametrii liniei de comandă și interacționează cu comenzile pe care le execută. Pentru a scrie scripturile din listele simple de comenzi pentru programe mai flexibile, trebuie să știți cum să utilizați variabilele speciale ale interpretului Bourne Shell. Utilizarea variabilelor speciale nu este mult diferită de utilizarea oricăror alte variabile de shell, dar nu puteți modifica valoarea unor variabile speciale specifice.

După ce ați citit următoarele secțiuni, veți înțelege de ce scripturile de shell acumulează o mulțime de caractere speciale, după ce ați scris. Dacă încercați să înțelegeți unul dintre scenariile și să întâlniți un șir care pare absolut de neînțeles, analizați-l în părți.

$ 1, $ 2, ...
$ 1, $ 2 și toate variabilele denumite numere pozitive nonzero conțin valorile parametrilor sau argumentelor scriptului. Să presupunem că următorul script este denumit pshow:
#! / bin / sh
ecou Primul argument: $ 1
echo Al treilea argument: $ 3

Rularea [pshow one two three] produce următoarea ieșire:

Primul argument: un al treilea argument: trei

Comanda încorporată de schimbare este utilizată fără argumente de argument. Această comandă șterge primul argument ($ 1) și avansează argumentele rămase înainte - adică $ 2 devine $ 1, $ 3 devine $ 2.

Să presupunem că numele următorului script shiftex este:

#! / bin / sh
echo Argument: $ 1
schimbare
echo Argument: $ 1
schimbare
echo Argument: $ 1
schimbare

Începeți shiftex o două două trei. Veți vedea ieșirea:

Argument: unul, Argument: două Argument: trei

$ #
Variabila $ # conține numărul de argumente transmise scriptului. Această variabilă este deosebit de importantă atunci când rulați comutarea într-o buclă pentru a selecta argumente; Când $ # este 0, nu mai există argumente, deci $ 1 este gol.

# r / bin / sh
gs -q -dBATCH -dSAFER -s OutputFile = - -sDevice = pnmraw $ @

#! / bin / sh
gs -q -Dbatch -dNOPAUSE -dSAFER \
-s OutputFile = - -sDevice = pnmraw $ @

Concluzia $ @ în ghilimele duble ("$ @") se aplică parametrilor separați de spații.

$ 0
Variabila $ 0 conține numele scriptului și este foarte utilă pentru crearea mesajelor de diagnosticare. Să presupunem că scriptul dvs. trebuie să raporteze un argument greșit, care este stocat în variabila $ BADPARM. Puteți imprima un mesaj de diagnostic utilizând următoarea linie, astfel încât numele de script apare în mesajul de eroare:

echo $ 0: opțiunea rău $ BADPARM

echo $ 0: opțiunea rău $ BADPARM 1> # 038; 2

$$
Variabila $$ conține ID-ul procesului shell.

$?
Variabila $? conține codul de ieșire din ultima comandă pe care shell-ul a executat. Codul de completare este foarte important pentru gestionarea scripturilor shell și va fi acoperit mai târziu.

Coduri de completare

Când programul Linux iese, acesta lasă în urma codului de finalizare a procesului părinte care a lansat programul. Codul de iesire este un numar si uneori se numeste cod de eroare. Când codul de completare este zero (0), înseamnă că programul funcționează fără probleme. Cu toate acestea, în cazul în care există o eroare în program, de obicei se termină cu un număr nonzero.

Codul pentru completarea ultimei comenzi este conținut în variabila specială $. astfel încât să puteți să-l testați singur în promptul dvs. de shell:

$ Este /> / dev / null
$ echo $?
0
$ Is / asdfasdf> / dev / null
Este: / asdfasdf: Nu există un astfel de fișier sau director
$ echo $?
1

Veți vedea că comanda de succes a returnat 0 și comanda nereușită a revenit 1. Dacă intenționați să utilizați codul de completare a comenzii, trebuie să utilizați sau să salvați codul imediat după rularea comenzii. De exemplu, dacă executați un al treilea ecou $? imediat după secvențele de comandă anterioare, rezultatul este 0, deoarece a doua dintre cele două comenzi de ecou a avut succes.

Când scrieți codul shell care întrerupe execuția scriptului anormal, ar trebui să utilizați ceva ca ieșirea 1 pentru a trece codul de terminare a unității înapoi la orice proces parent care a pornit scriptul. Nu este nevoie să utilizați 1; de exemplu, dacă doriți, puteți utiliza numere diferite pentru diferite condiții.

Unele programe, cum ar fi diff și grep, utilizează un cod de ieșire diferit de zero pentru a denumi condiții normale. De exemplu, grepul returnează 1 dacă găsește ceva potrivit modelului său în intrare și 0 dacă nu îl găsește. În acest caz, un cod de ieșire diferit de zero nu este o eroare. Aceste comenzi utilizează alte coduri de terminare pentru erori: grep și diff utilizează 2 pentru probleme reale. Dacă credeți că programul utilizează un cod de ieșire non-standard, citiți pagina manuală. Codul de completare este, de obicei, extins în secțiunea DIAGNOSTICĂ.

VPS / VDS pentru 389 r. de la RigWEB.RU cu administrație

Articole similare