Fisiere de comenzi
1. Inlantuirea comenzilor(generalitati)
În Unix, dar și, parțial, în DOS, majoritatea comenzilor folosesc așa-numitele fișiere standard de intrare și fișiere standard de ieșire. Acestea sunt concepte abstracte care reprezintă sursa din care comenzile își iau datele de intrare, respectiv destinația în care ele scriu rezultatele. Deci comenzile citesc din intrarea standard și scriu în ieșirea standard. În mod normal, intrarea standard este reprezentată de tastatura calculatorului, iar 16316b124q ieșirea standard de către dispozitivul de afișare (monitorul).
Exemplu: comanda sort (existentă atât în DOS cât și în UNIX) funcționează după principiul enunțat. Dacă este apelată fără nici un parametru, ea va aștepta introducerea liniilor de text de la tastatură (intrarea standard), până la introducerea caracterului ^Z urmat de Enter în MS-DOS, sau a caracterului ^D, în Unix, după care va sorta liniile și le va afișa în ordine pe ecran (ieșirea standard).
Intrarea și ieșirea standard pot fi schimbate folosind operatorii de redirectare. Redirectarea "conectează" intrarea sau ieșirea comenzilor la un fișier dat. Pentru redirectarea intrării se folosește operatorul '<', iar pentru redirectarea ieșirii operatorul '>'.
Exemplu: comanda următoare preia liniile care trebuie sortate din fișierul date.txt, iar rezultatele vor fi afișate pe ecran. Se redirectează, deci, numai intrarea standard:
sort < date.txt
Pentru a redirecta numai ieșirea, adică liniile de text să fie citite de la tastatură, dar rezultatul să fie scris într-un fișier, se folosește următoarea formă:
sort > ordonat.txt
Redirectările se pot combina, astfel încât liniile să fie citite dintr-un fișier, iar rezultatul să fie scris în altul:
sort < date.txt > ordonat.txt
Comenzile se pot și înlănțui, în sensul că ieșirea generată de una devine intrare pentru alta. Pentru aceasta, se folosește operatorul '|', numit uneori operatorul pipe (conductă).
Exemplu: Comanda more realizează afișarea pagină cu pagină a datelor citite din intrarea standard. O construcție de forma:
ls | more
face ca ieșirea lui dir să fie
legată la intrarea lui more, astfel
încât, efectul va fi afișarea pagină cu pagină a fișierelor din directorul
curent.
Se pot înlănțui oricâte comenzi și, prin urmare, pentru afișarea pagină cu pagină,
ordonate alfabetic, a numelor tuturor fișierelor din directorul curent, se
folosește comanda:
ls | sort | more
Observație: Toate aceste considerente sunt valabile atât în DOS, cât și în UNIX.
2. Fisiere de comenzi
2.1 Fisiere de comenzi MS-DOS
Interpretorul de comenzi MS-DOS permite crearea și folosirea așa-numitelor fișiere de comenzi indirecte. Acestea sunt, de fapt, fișiere care conțin înlănțuiri de comenzi MS-DOS și directive speciale pentru executarea de către interpretor a unor sarcini ceva mai complexe. Modul de realizare a acestor fișiere seamănă cu scrierea de programe într-un limbaj de programare.
Înainte de a trece la descrierea directivelor utilizate în fișierele de comenzi, trebuie să explicăm noțiunea de variabilă de mediu. Interpretorul de comenzi deține o zonă de memorie specială în care pot fi păstrate diferite variabile. Aceste variabile sunt numite variabile de mediu și pot fi accesate prin intermediul comenzii set. Definirea unei variabile se face astfel:
set nume=valoare
atribuindu-se variabilei nume valoarea valoare. Valoarea unei variabile este întotdeauna un șir de caractere. Pentru accesarea valorii unei astfel de variabile din interiorul fișierelor de comenzi sau din linie de comandă se folosește construcția %nume%. Iată un scurt exemplu: fie o variabilă a căreia dorim să-i atribuim valoarea abcde. Acest lucru se face astfel:
set a=abcde
Pentru a afișa valoarea acestei variabile se scrie:
echo %a%
Există un set de variabile de mediu a căror semnificație este predefinită. De exemplu, variabila PATH descrie căile (directoarele) în care interpretorul de comenzi caută programele executabile atunci când utilizatorul nu precizează explicit locația la care se află programul pe care dorește să îl lanseze. Un alt exemplu este variabila DIRCMD care stochează parametrii pe care interpretorul îi adaugă fiecărei comenzi dir pe care o întâlnește. Dacă scriem set DIRCMD=/p, atunci orice comandă dir viitoare se va comporta ca și cum ar fi fost introdusă sub forma dir /p, deci va afișa numele fișierelor pagină cu pagină.
Directivele utilizabile în fișiere de comenzi sunt:
goto etichetă
Se execută salt necondiționat la eticheta etichetă. O etichetă este un șir de maxim 8 caractere, precedat de ':' Exemplu:
:salt
rem ciclu infinit
goto salt
call fișier de comenzi
Se execută fișierul de comenzi precizat (extensia implicită a numelui fișierului este .bat), după care execuția revine la linia de după call. Se poate lansa în execuție un fișier de comenzi fără a se mai reveni în fișierul inițial; aceasta se face scriind numele fișierului la sfârșitul celui inițial (pe ultima linie).
if [not] condiție comandă
Este singura instrucțiune condițională acceptată de MS-DOS. Efectul este executarea comenzii comanda dacă a fost îndeplinită condiția condiție. Condiția poate fi:
ERRORLEVEL nr
Orice program, la terminare, poate să returneze un număr prin care indică modul în care și-a încheiat execuția. Acest lucru se poate realiza, de exemplu în programele scrise în C, prin apelarea funcției exit() cu un parametru (valoarea de returnat în sistem) sau apelând, în funcția main(), instrucțiunea return cu parametru întreg. În MS-DOS, valoarea returnată de programe poate fi testată folosind ERRORLEVEL. Condiția ERRORLEVEL nr este considerată adevărată dacă ERRORLEVEL este mai mare sau egală cu nr. ERRORLEVEL va lua valoarea returnată de ultimul program apelat.
șir1==șir2
Condiția e îndeplinită dacă șirurile sunt egale. Șirurile nu trebuie puse între ghilimele. Iată câteva exemple utile:
if %2 == abcde rem parametrul al doilea a fost șirul abcde
if .%1 == . rem nu există parametri în linia de comandă
EXIST fișier
Testează dacă există un fișier.
for %%var in (mulțime) do comandă
Variabila var ia pe rând valorile din mulțime, la fiecare pas executându-se comandă. În comandă, fiecare apariție a lui %%var este înlocuită cu valoarea curentă din mulțime. Mulțimea poate conține și nume globale de fișiere, care conțin caracterele '*' sau '?'.
pause comentariu
Așteaptă apăsarea unei taste afișând comentariul dat.
echo on
echo off
echo text
echo on face ca
fiecare linie din fișierul de comenzi să fie afișată în momentul în care e
executată. Acest efect poate fi inhibat prin echo off. Comanda echo text realizează afișarea mesajului text.
Observații:
Orice comandă poate începe cu caracterul @, caz în care nu mai este afișată la execuție, indiferent de starea setată prin echo.
Numele fișierelor de comenzi trebuie să aibă extensia .bat.
Parametrii
pe care fișierul de comenzi îi primește în linia de comandă atunci când este
lansat pot fi accesați folosind construcții de tipul %nr. %1 reprezintă primul parametru, %2 al doilea ș.a.m.d. până la %9.
Dacă programul din fișierul de comenzi are nevoie de mai mult de 9 parametri în
linia de comandă, atunci se poate folosi directiva shift. După primul apel al directivei shift, %1 va reprezenta
al doilea parametru, %2 al treilea ș.a.m.d. Fiecare nou apel
al lui shift va deplasa cu o poziție
spre dreapta semnificația construcțiilor %nr. Deci un al doilea apel va face ca %1 să fie al treilea parametru, iar %9 al unsprezecelea.
Exemplu: fie programul exmp.bat,
apelat astfel: exmp unu doi
trei. Mai jos este prezentat programul și efectul său:
@echo off |
C:\>exmp unu doi trei |
|