Skip to main content

Cyber AI România

Joi, 1 octombrie 2026

Cum citești argumentele din linia de comandă într-un script Bash

Dacă ai început să scrii scripturi Bash, unul dintre primele lucruri pe care trebuie să le înțelegi este cum preiei argumentele primite din linia de comandă. Fie că vrei să trimiți un nume de fișier, o opțiune precum -f sau mai multe valori odată, Bash are reguli clare pentru citirea lor. Vestea bună este că mecanismul nu e complicat, dar merită folosit corect încă de la început.

Parametrii poziționali: baza oricărui script

Cele mai simple argumente ajung în așa-numiții parametri poziționali. În practică, asta înseamnă că primul argument este în $1, al doilea în $2, iar numărul total de argumente este în $#. Numele scriptului este disponibil în $0. Documentația oficială Bash explică și un detaliu important: pentru argumentele peste 9 trebuie folosite acolade, de exemplu ${10}, altfel shell-ul nu interpretează corect poziția dorită.

Această logică e suficientă pentru scripturile mici. Dacă, de exemplu, un script primește un fișier de intrare și unul de ieșire, $1 și $2 pot fi exact ce ai nevoie. În plus, verificarea lui $# te ajută să vezi rapid dacă utilizatorul a trimis numărul corect de valori.

“$@” versus “$*”: diferența care strică multe scripturi

Când ai nevoie de toate argumentele, apar de obicei primele greșeli. Diferența dintre “$@” și “$” contează. Manualul GNU Bash arată că “$@” extinde fiecare argument ca element separat, adică păstrează corect spațiile din interiorul unui argument. În schimb, “$” le unește într-un singur șir, separat de primul caracter din IFS.

Pentru scripturile moderne, regula practică este simplă: dacă vrei să transmiți mai departe argumentele exact cum au fost primite, folosește aproape întotdeauna “$@”. Este forma mai sigură și mai previzibilă.

De ce citarea contează

Aici intervine și partea de siguranță. ShellCheck, unul dintre cele mai cunoscute instrumente de verificare a scripturilor shell, avertizează explicit că folosirea lui $@ fără ghilimele poate rupe argumentele care conțin spații și poate activa globbing-ul. Cu alte cuvinte, un argument ca „raport final.txt” se poate sparge în două bucăți dacă nu este citat corect.

Din acest motiv, în bucle sau când pasezi argumentele către altă comandă, forma recomandată este for arg in “$@”; do …; done. Aceeași idee se aplică și pentru parametri individuali: când lucrezi cu nume de fișiere, directoare sau texte venite de la utilizator, citarea atentă previne surprizele neplăcute.

Cum verifici rapid argumentele obligatorii

Dacă scriptul are nevoie de două argumente obligatorii, primul pas sănătos este să verifici $# înainte să continui. E o practică banală, dar face diferența dintre un script care e ușor de folosit și unul care dă erori neclare. În loc să lași scriptul să pice mai târziu, poți opri execuția devreme și poți afișa un mesaj clar de utilizare.

Un alt detaliu util este separatorul –. În multe comenzi Unix, el marchează sfârșitul listei de opțiuni. Asta ajută mai ales când un argument începe cu minus și altfel ar putea fi confundat cu o opțiune. Nu este un truc exclusiv Bash, dar merită ținut minte când construiești scripturi care primesc valori variate.

Când ai opțiuni, intră în scenă getopts

Pentru opțiuni de tip -f fișier sau -o ieșire, Bash oferă builtin-ul getopts. Conform manualului GNU Bash, getopts parcurge parametrii poziționali, pune opțiunea curentă într-o variabilă aleasă de tine, argumentul opțiunii în OPTARG și indexul următorului element în OPTIND.

Aici mai există o nuanță importantă: documentația oficială precizează că OPTIND nu se resetează automat în aceeași sesiune shell. Dacă rulezi din nou parsarea pentru un alt set de parametri, resetarea trebuie făcută manual. În practică, asta contează mai ales în funcții sau în scripturi ceva mai elaborate.

După terminarea buclei getopts, de obicei urmează shift $((OPTIND-1)). Acest pas elimină opțiunile deja procesate și lasă în urmă argumentele rămase, dacă există.

Greșeli frecvente de evitat

Una dintre capcanele clasice este să salvezi $@ într-o variabilă simplă și să te aștepți să rămână listă de argumente. ShellCheck avertizează și aici că, în Bash, pentru mai multe elemente ar trebui folosit un array, de forma args=(“$@”). A doua greșeală frecventă este să presupui că toate intrările sunt „curate”, fără spații sau caractere speciale.

Pe scurt, citirea argumentelor într-un script Bash se bazează pe câteva piese esențiale: $1, $2 și $# pentru cazurile simple, “$@” pentru toate argumentele păstrate corect și getopts pentru opțiuni mai curate. Dacă le combini cu verificări de bază și cu citare atentă, scripturile tale devin mai robuste și mult mai ușor de întreținut.

Surse

Facebook
X
WhatsApp
Cum citești argumentele din linia de comandă într-un script Bash

Te-ar putea interesa si: