
Multe valori importante sunt stocate pe sistemele Linux în ceea ce numim „variabile”, dar există de fapt mai multe tipuri de variabile și unele comenzi interesante care vă pot ajuta să lucrați cu ele. Într-o postare anterioară, am analizat variabilele de mediu și unde sunt definite. În această postare, vom analiza variabilele utilizate pe linia de comandă și în scripturi.
Variabilele de utilizator
Deși este destul de ușor să configurați o variabilă pe linia de comandă, există câteva trucuri interesante. Pentru a configura o variabilă, tot ce trebuie să faceți este ceva de genul:
$ myvar = 11 $ myvar2 = "unsprezece"
Pentru a afișa valorile, pur și simplu faceți acest lucru:
$ ecou $ myvar 11 $ ecou $ myvar2 unsprezece
De asemenea, puteți lucra cu variabilele dvs. De exemplu, pentru a crește o variabilă numerică, puteți utiliza oricare dintre aceste comenzi:
$ myvar = $ ((myvar + 1)) $ ecou $ myvar 12 $ ((myvar = myvar + 1)) $ ecou $ myvar 13 $ ((myvar + = 1)) $ ecou $ myvar 14 $ ((myvar ++)) $ ecou $ myvar 15 $ let "myvar = myvar + 1" $ ecou $ myvar 16 $ let "myvar + = 1" $ ecou $ myvar 17 $ let "myvar ++" $ ecou $ myvar 18
Cu unele dintre acestea, puteți adăuga mai mult de 1 la valoarea unei variabile. De exemplu:
$ myvar0 = 0 $ ((myvar0 ++)) $ ecou $ myvar0 1 $ ((myvar0 + = 10)) $ ecou $ myvar0 11
Cu toate aceste opțiuni, veți găsi probabil cel puțin una ușor de reținut și convenabilă de utilizat.
Poti de asemenea unset o variabilă - practic nedefinirea acesteia.
$ unset myvar $ ecou $ myvar
O altă opțiune interesantă este că puteți configura o variabilă și o puteți face read-only. Cu alte cuvinte, odată setată doar în citire, valoarea sa nu poate fi modificată (cel puțin nu fără o vrăjitorie foarte complicată a liniei de comandă). Asta înseamnă că nici nu o puteți șterge.
$ readonly myvar3 = 1 $ ecou $ myvar3 1 $ ((myvar3 ++)) -bash: myvar3: variabil readonly $ unset myvar3 -bash: unset: myvar3: nu poate fi desetat: variabil readonly
Puteți utiliza oricare dintre opțiunile de setare și incrementare pentru atribuirea și manipularea variabilelor în scripturi, dar există și unele foarte utile variabile interne pentru lucrul în scripturi. Rețineți că nu puteți să le reasignați valorile sau să le incrementați.
Variabile interne
Există destul de multe variabile care pot fi utilizate în scripturi pentru a evalua argumentele și pentru a afișa informații despre scriptul în sine.
- $ 1, $ 2, 3 $ etc. reprezintă primul, al doilea, al treilea, etc. argumente pentru script.
- $ # reprezintă numărul de argumente.
- $ * reprezintă șirul argumentelor.
- $ 0 reprezintă numele scriptului în sine.
- $? reprezintă codul de retur al comenzii rulate anterior (0 = succes).
- $$ arată ID-ul procesului pentru script.
- $ PPID arată ID-ul procesului pentru shell-ul dvs. (procesul părinte pentru script).
Unele dintre aceste variabile funcționează, de asemenea, pe linia de comandă, dar arată informații conexe:
- $ 0 arată numele shell-ului pe care îl utilizați (de exemplu, -bash).
- $$ arată ID-ul procesului pentru shell-ul dvs..
- $ PPID arată ID-ul procesului pentru procesul părinte al shell-ului dvs. (pentru mine, acesta este sshd).
Dacă aruncăm toate aceste variabile într-un script doar pentru a vedea rezultatele, am putea face acest lucru:
#! / bin / bash ecou $ 0 ecou $ 1 ecou $ 2 ecou $ # ecou $ * ecou $? ecou $$ ecou $ PPID
Când apelăm acest script, vom vedea ceva de genul:
$ tryme unu doi trei / home / shs / bin / tryme <== script name one <== first argument two <== second argument 3 <== number of arguments one two three <== all arguments 0 <== return code from previous echo command 10410 <== script's process ID 10109 <== parent process's ID
Dacă verificăm ID-ul procesului shell-ului odată ce scriptul este executat, putem vedea că acesta se potrivește cu PPID afișat în script:
$ ecou $$ 10109 <== shell's process ID
Desigur, avem mai multe șanse să folosim aceste variabile în moduri mult mai utile decât pur și simplu afișarea valorilor lor. Să verificăm câteva modalități prin care am putea face acest lucru.
Verificând pentru a vedea dacă au fost furnizate argumente:
dacă [$ # == 0]; apoi ecuați „$ 0 fișier” ieșire 1 fi
Se verifică dacă se execută un anumit proces:
ps -ef | grep apache2> / dev / null dacă [$? ! = 0]; atunci ecoul Apache nu rulează exit fi
Verificând dacă există un fișier înainte de a încerca să îl accesezi:
dacă [$ # -lt 2]; apoi ecuați „Utilizare: $ 0 linii nume de fișier” ieșiți 1 fi dacă [! -f $ 2]; apoi ecuați „Eroare: Fișierul $ 2 nu a fost găsit”, ieșiți din cap 2 - 1 $ 2 fi
Și în acest mic script, verificăm dacă au fost furnizate numărul corect de argumente, dacă primul argument este numeric și dacă al doilea argument este un fișier existent.
#! / bin / bash dacă [$ # -lt 2]; apoi ecuați „Utilizare: nume de fișiere $ 0 linii” ieșiți 1 fi dacă [[$ 1! = [0-9] *]]; apoi ecuați „Eroare: $ 1 nu este numerică”, ieșiți 2 fi dacă [! -f $ 2]; apoi ecuați „Eroare: fișier $ 2 nu a fost găsit” ieșiți din altul în ecoul capului de fișier - $ 1 $ 2 fi
Redenumirea variabilelor
Atunci când scrieți un script complicat, este adesea util să atribuiți nume argumentelor scriptului, mai degrabă decât să le continuați să le referiți la $ 1, $ 2 și așa mai departe. Până la cea de-a 35-a linie, cineva care îți citea scriptul ar fi putut uita ce reprezintă 2 USD. Va fi mult mai ușor pentru acea persoană dacă atribuiți o valoare importantă a parametrului numelui $ fișierului sau numerelor $.
#! / bin / bash dacă [$ # -lt 2]; apoi ecuați „Utilizare: $ 0 linii nume de fișier” ieșiți 1 alte numlines = $ 1 nume de fișier = $ 2 fi dacă [[$ numlines! = [0-9] *]]; apoi ecuați „Eroare: $ numlines nu este numerică” ieșiți 2 fi dacă [! -f $ nume de fișier]; apoi ecuați „Eroare: fișierul nume de fișier $ nu a fost găsit” ieșiți din alt 3 ecou din capul fișierului - $ numlines $ fișier nume fi
Desigur, acest script de exemplu nu face altceva decât să ruleze comanda head pentru a afișa cele mai bune linii X dintr-un fișier, dar este menit să arate modul în care parametrii interni pot fi folosiți în scripturi pentru a vă asigura că scriptul rulează bine sau eșuează cu cel puțin o oarecare claritate.
[Urmărește Sandra Henry-Stocker Sfaturi Linux în două minute pentru a afla cum să stăpânești o serie de comenzi Linux] Alăturați-vă comunităților Network World pe Facebook și LinkedIn pentru a comenta subiecte care sunt de vârf.