Ce face getopts
getopts parcurge argumentele scriptului unul câte unul și pune litera opțiunii curente în variabila indicată (aici opt). Pentru opțiunile care primesc o valoare, valoarea ajunge în OPTARG.
Șirul de opțiuni descrie ce accepți: "vn:o:" înseamnă -v fără valoare și -n, -o cu valoare (litera urmată de :). Dacă șirul începe cu :, getopts nu mai afișează erori proprii, iar tu tratezi cazurile ? (opțiune necunoscută) și : (lipsește valoarea).
După buclă, OPTIND indică primul argument care nu este opțiune; shift $((OPTIND - 1)) le elimină pe cele procesate, ca în $@ să rămână doar fișierele sau celelalte argumente. getopts nu cunoaște opțiuni lungi (--nume).
Opțiuni și argumente
| Opțiune / Parametru | Descriere |
|---|---|
"vn:" |
Șirul de opțiuni: v fără valoare, n: cu valoare obligatorie. |
":vn:" |
Modul silențios: erorile se tratează în ramurile \? și :. |
OPTARG |
Valoarea opțiunii curente (sau litera greșită, în modul silențios). |
OPTIND |
Indexul următorului argument de procesat; pornește de la 1. |
shift $((OPTIND - 1)) |
Elimină opțiunile procesate din argumentele poziționale. |
Exemple
Exemplul 1: Un script cu opțiuni -n, -o și -v
set -- simulează argumentele primite de script, ca exemplul să ruleze singur.
set -- -v -n Ana -o Iași note.csv absente.csv
VERBOSE=0
NUME=""
ORAS="necunoscut"
while getopts "vn:o:" opt; do
case $opt in
v) VERBOSE=1 ;;
n) NUME=$OPTARG ;;
o) ORAS=$OPTARG ;;
esac
done
shift $((OPTIND - 1))
echo "Nume: $NUME, oraș: $ORAS, verbose: $VERBOSE"
echo "Fișiere rămase: $*"
Rezultat
Nume: Ana, oraș: Iași, verbose: 1
Fișiere rămase: note.csv absente.csv
Exemplul 2: Tratarea erorilor în modul silențios
Cu : la începutul șirului, scriptul scrie propriile mesaje. local OPTIND permite apelarea funcției de mai multe ori.
citeste_optiuni() {
local OPTIND opt
while getopts ":n:" opt; do
case $opt in
n) echo "Salut, $OPTARG!" ;;
\?) echo "Opțiune necunoscută: -$OPTARG" ;;
:) echo "Opțiunea -$OPTARG are nevoie de o valoare" ;;
esac
done
}
citeste_optiuni -n Mihai
citeste_optiuni -x
citeste_optiuni -n
Rezultat
Salut, Mihai!
Opțiune necunoscută: -x
Opțiunea -n are nevoie de o valoare
Greșeli frecvente
- Uitarea lui
shift $((OPTIND - 1)): în$@rămân și opțiunile, iar scriptul tratează-vca nume de fișier. - Opțiuni puse după argumente:
script.sh fisier.txt -v.getoptsse oprește la primul argument care nu începe cu-, deci-vnu este citit. - Folosirea lui
getoptsîntr-o funcție apelată de mai multe ori fărălocal OPTIND: la al doilea apel bucla pornește de unde a rămas și nu mai citește nimic.
Comenzi înrudite
case: Ramificare multi-opțiune bazată pe potrivirea de tipare text (pattern matching).while: Execută repetat un bloc de comenzi atâta timp cât condiția specificată rămâne adevărată.Variabile în Bash: Declararea, atribuirea, valorile implicite și expandarea corectă a variabilelor în Bash.Funcții în Bash: Gruparea instrucțiunilor în blocuri reutilizabile de cod, cu variabile locale și parametri.
Întrebări & Exemple de Cod:
getoptsAi o nelămurire despre utilizarea comenzii
getoptssau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.