M. Garrels. Bash Guide. Varijable. Kako postaviti i onemogućiti lokalne, korisničke i sistemske varijable okruženja u Linuxu Kako pronaći gdje je napisana varijabla ljuske

Varijabilni tipovi

Kao što možete vidjeti iz gornjih primjera, shell varijable se obično pišu velikim slovima. Bash pohranjuje liste varijabli dva tipa:

Globalne varijable

Globalne varijable ili varijable okruženja dostupne su u svim ljuskama. Da biste prikazali varijable okruženja, možete koristiti naredbe env ili printenv. Ove komande su obezbeđene kao deo paketa sh-utils.

Ispod je tipičan izlaz:

Franky ~> printenv CC=gcc CDPATH=.:~:/usr/local:/usr:/ CFLAGS=-O2 -fomit-frame-pointer COLORTERM=gnome-terminal CXXFLAGS=-O2 -fomit-frame-pointer DISPLAY=: 0 DOMAIN=hq.garrels.be e= TOR=vi FCEDIT=vi FIGNORE=.o:~ G_BROKEN_FILENAMES=1 GDK_USE_XFT=1 GDMSESSION=Podrazumevano GNOME_DESKTOP_SESSION_ID=Default GTK_RC_FILES=/etc/gtkrcrank: -1.2-gnome2 GWMCOLOR=tamnozelena GWMTERM=xterm HISTFILESIZE=5000 history_control=ignoredups HISTSIZE=2000 HOME=/nethome/franky HOSTNAME=octarine.hq.garrels.be INPUTRC=/etc=inputrank/jRCAVAR/I j2sdk1.4.0 LANG=en_US LDFLAGS=-s LD_LIBRARY_PATH=/usr/lib/mozilla:/usr/lib/mozilla/plugins LESSCHARSET=latin1 LESS=-edfMQ LESSOPEN=|/usr/bin %s LEX=.flex LOCAL_MACHINE=octarine LOGNAME=franky LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd= 40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*. com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz= 01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01; 31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31: *.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*. tif=01;35: MACHINES=octarine MAILCHECK=60 MAIL=/var/mail/franky MANPATH=/usr/man:/usr/share/man/:/usr/local/man:/usr/X11R6/man MEAN_MACHINES= octarine MOZ_DIST_BIN=/usr/lib/mozilla MOZILLA_FIVE_HOME=/usr/lib/mozilla MOZ_PROGRAM=/usr/lib/mozilla/mozilla-bin MTOOLS_FAT_COMPATIBILITY=1 MYMALLOC=0 NNPLUGNTSIN_VER=news/mozilla-bin 4plugin/: / usr/lib/netscape/plugins OLDPWD=/nethome/franky OS=Linux PAGER=manje PATH=/nethome/franky/bin.Linux:/nethome/franky/bin:/usr/local/bin:/usr/local/ sbin :/usr/X11R6/bin:/usr/bin:/usr/sbin:/bin:/sbin:. PS1=\[\033franky je u \w\[\033 PS2=Više unosa> PWD=/nethome/franky SESSION_MANAGER=local/octarine.hq.garrels.be:/tmp/.ICE-unix/22106 SHELL=/bin /bash SHELL_LOGIN=--login SHLVL=2 SSH_AGENT_PID=22161 SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass SSH_AUTH_SOCK=/tmp/ssh-XXmhQ4fC/agent.22161 franky USER=franky _=/usr/bin/printenv VISUAL=vi WINDOWID=20971661 XAPPLRESDIR=/nethome/franky/app-defaults XAUTHORITY=/nethome/franky/.Xauthority XENVIRONMENT=/nethome/franky/.XLEFAUSEARPA /X11R6/lib/X11/%L/%T/%N%C%S:/usr/X11R6/lib/X11/%l/%T/%N%C%S:/usr/X11R6/lib/X11 /%T/%N%C%S:/usr/X11R6/lib/X11/%L/%T/%N%S:/usr/X11R6/lib/X11/%l/%T/%N%S :/usr/X11R6/lib/X11/%T/%N%S XKEYSYMDB=/usr/X11R6/lib/X11/XKeysymDB XMODIFIERS=@im=none XTERMID= XWINHOME=/usr/X11R6 X=X11R6 - YACC y

Lokalne varijable

Lokalne varijable su dostupne samo u trenutnoj komandnoj ljusci. Ako je ugrađena komanda set ako se koristi bez ikakvih parametara, vratit će listu svih varijabli (uključujući varijable vremena izvršavanja) i funkcija. Koristimo formatiranje i proizvedemo sortirani rezultat koji uzima u obzir lokalnost varijabli.

Ispod je diff datoteka kreirana poređenjem rezultata naredbi printenv I set, nakon uklanjanja sa liste funkcija koje se takođe prikazuju naredbom set:

Franky ~> diff set.sorted printenv.sorted | grep "<" | awk "{ print $2 }" BASE=/nethome/franky/.Shell/hq.garrels.be/octarine.aliases BASH=/bin/bash BASH_VERSINFO=(="2" BASH_VERSION="2.05b.0(1)-release" COLUMNS=80 DIRSTACK=() DO_FORTUNE= EUID=504 GROUPS=() HERE=/home/franky HISTFILE=/nethome/franky/.bash_history HOSTTYPE=i686 IFS=$" LINES=24 MACHTYPE=i686-pc-linux-gnu OPTERR=1 OPTIND=1 OSTYPE=linux-gnu PIPESTATUS=(="0") PPID=10099 PS4="+ PWD_REAL="pwd SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor THERE=/home/franky UID=504

Podjela varijabli po njihovom sadržaju

Osim što dijelimo varijable na lokalne i globalne, možemo ih podijeliti i u kategorije na osnovu sadržaja koji je pohranjen u varijabli. S tim u vezi, varijable se dijele na četiri tipa:

  • String varijable
  • Cjelobrojne varijable
  • Varijable - konstante
  • Varijable - nizovi

O ovim tipovima varijabli ćemo razgovarati u 10. poglavlju. Sada ćemo koristiti cjelobrojne i nizove vrijednosti u našim varijablama.

Kreiranje varijabli

U varijablama se razlikuju velika i mala slova i po defaultu se koriste velika slova. Ponekad je uobičajeno koristiti mala slova za pisanje lokalnih varijabli. Međutim, možete koristiti bilo koje znakove za nazive varijabli, pa čak i miješati velika i mala slova. Također možete koristiti brojeve u nazivima varijabli, ali imena koja počinju brojevima nisu dozvoljena:

Prompt> export 1number=1 bash: export: `1number=1": nije važeći identifikator

Da biste postavili varijablu u komandnoj ljusci, koristite sljedeću naredbu

VARNAME="vrijednost"

Nemojte umetati razmake oko znaka jednakosti; to će uzrokovati greške. Kada dodjeljujete vrijednosti varijablama, dobra je navika staviti sadržaj niza u navodnike; ovo smanjuje mogućnost da ćete pogriješiti.

Neki primjeri korištenja velikih i malih slova, brojeva i razmaka (poruka o naredbi nije pronađena ukazuje na problem - cca.):

Franky ~> MYVAR1="2" franky ~> echo $MYVAR1 2 franky ~> first_name="Franky" franky ~> echo $first_name Franky franky ~> full_name="Franky M. Singh" franky ~> echo $full_name Franky M. Singh franky ~> MYVAR-2="2" bash: MYVAR-2=2: komanda nije pronađena franky ~> MYVAR1 ="2" bash: MYVAR1: komanda nije pronađena franky ~> MYVAR1= "2" bash: 2: komanda nije pronađeno franky ~> poništeno MYVAR1 first_name full_name franky ~> echo $MYVAR1 $first_name $full_name<--no output-->franky ~>

Izvoz varijabli

Varijabla kreirana kao što je prikazano u gornjem primjeru dostupna je samo u trenutnoj komandnoj ljusci. Ovo je lokalna varijabla: podređeni procesi trenutne ljuske neće biti svjesni ove varijable. Da bismo prenijeli varijable u podljusku, potrebno nam je izvoz koristeći ugrađenu komandu izvoz. Varijable koje se izvoze nazivaju se varijable okruženja. Dodjela vrijednosti i izvoz se obično obavlja u jednom koraku:

Izvezi VARNAME="vrijednost"

Podljuska može promijeniti varijable koje su naslijeđene od roditeljskog procesa, ali promjene koje je napravio podređeni proces ne utiču na roditeljski proces. Ovo je demonstrirano u sljedećem primjeru:

Franky ~> full_name="Franky M. Singh" franky ~> bash franky ~> echo $full_name franky ~> exit franky ~> export full_name franky ~> bash franky ~> echo $full_name Franky M. Singh franky ~> export full_name= "Charles the Great" franky ~> echo $full_name Charles the Great franky ~> exit franky ~> echo $full_name Franky M. Singh franky ~>

Prvi put kada podljuska pokuša pročitati vrijednost full_name , vrijednost nije postavljena (naredba echo pokazuje prazan red). Nakon što se napusti podljuska, varijabla full_name se izvozi u roditeljsku ljusku - varijabla se može izvesti nakon što joj se dodijeli vrijednost. Zatim se pokreće nova podljuska koja prikazuje varijablu izvezenu iz roditeljske ljuske. Varijabla je modificirana i druga vrijednost će biti pohranjena u njoj, ali u nadređenoj ljusci vrijednost ove varijable ostaje ista.

Rezervirane varijable

Bourne Reserved Shell Variables

Bash koristi određene varijable ljuske baš kao i Bourneova ljuska. U nekim slučajevima, Bash promenljivoj dodeljuje podrazumevanu vrednost. Tabela ispod pokazuje Kratki opis ove jednostavne varijable ljuske:

Tabela 3.1. Bourne Reserved Shell Variables

Ime varijable Definicija

Lista direktorija, razdvojenih dvotočkama, koji se koriste prilikom traženja putanje pomoću ugrađene naredbe CD.

Početni imenik trenutni korisnik; koristi se po defaultu u ugrađenoj komandi CD. Vrijednost ove varijable se također koristi umjesto znaka tilde.

Spisak znakova koji se koriste za razdvajanje polja; koristi se kada ljuska, nakon izvođenja svih zamjena, podijeli rezultat na pojedinačne riječi.

Ako je ovaj parametar postavljen na ime datoteke, a MAILPATH nije postavljen, Bash će obavijestiti korisnika da je mail primljen u navedenoj datoteci.

Lista naziva datoteka razdvojenih dvotočkama koje komandna ljuska povremeno provjerava da li ima nove pošte.

Vrijednost posljednjeg argumenta u parametru koju obrađuje ugrađena naredba getopts.

Indeks posljednjeg argumenta parametra koji obrađuje ugrađena naredba getopts.

Lista direktorija odvojenih dvotočkama u kojima ljuska traži komande.

Primarna linija za prompt. Zadana vrijednost je ""\s-\v\$ "".

Sekundarna linija za prompt. Zadana vrijednost je ""> "".

Bash rezervisane varijable

Vrijednosti ovih varijabli su postavljene ili korištene u Bashu, ali se općenito ne tretiraju kao posebne u drugim ljuskama.

Tabela 3.2. Bash rezervisane varijable

Ime varijable Definicija

Ova varijabla kontrolira kako ljuska komunicira s korisnikom i izvršava zadatke.

Puna putanja koja se koristi za pokretanje trenutne Bash instance.

Ako je ova varijabla postavljena u vrijeme kada se Bash poziva da izvrši skriptu, njena vrijednost se koristi kao ime datoteke za pokretanje koja se mora pročitati prije nego što se skripta izvrši.

Broj verzije trenutne instance Bash-a.

Varijabla je niz samo za čitanje čiji elementi niza pohranjuju informacije o verziji ovog slučaja Bash.

Prilikom štampanja odabranih lista koristi se ugrađena komanda izaberite za određivanje širine terminala. Automatski se postavlja prilikom prijema signala SIGWINCH.

Pokazivač u $(COMP_WORDS) na riječ koja pohranjuje trenutnu poziciju kursora.

Trenutna komandna linija.

Pokazivač na trenutnu poziciju kursora u odnosu na početak trenutne komande.

Varijabla je niz koji se sastoji od pojedinačnih riječi koje se koriste u trenutnoj komandnoj liniji.

Varijabla je niz iz kojeg Bash čita moguće opcije dovršavanja stringova generirana od strane funkcije ljuske koju poziva usluga dizajnirana za programiranje dovršetaka

Varijabla je niz koji pohranjuje trenutno stanje steka direktorija.

Numerički efektivni ID korisnika ID trenutnog korisnika.

Zadani uređivač koji se koristi u ugrađenoj komandi fc specificiran je parametar -e

Lista sufiksa razdvojenih dvotočkama koje treba zanemariti prilikom izvođenja automatskog dovršavanja naziva datoteke.

Naziv funkcije ljuske koja je trenutno pokrenuta.

Lista uzoraka razdvojenih dvotočkama koji definiraju skup imena datoteka koje treba zanemariti prilikom zamjene imena datoteka.

Varijabla je niz koji sadrži listu grupa kojima pripada trenutni korisnik.

Do tri znaka koji kontroliraju zamjenu povijesti naredbi, brzu zamjenu i dijeljenje dovršenih zamjena u tokene.

Broj trenutne komande u istoriji komandi ili njen indeks na listi istorije komandi.

Određuje hoće li naredba biti dodana u datoteku historije naredbi.

Ime datoteke u kojoj je pohranjena historija naredbi. Zadana vrijednost: ~/.bash_history.

Podrazumevani maksimalni broj linija sadržanih u datoteci istorije komandi je 500.

Lista obrazaca razdvojenih dvotočkom koji određuju da li naredbu treba sačuvati na listama istorije komandi.

Podrazumevani maksimalni broj komandi koje se mogu pohraniti u listu istorije komandi je 500.

Sadrži ime datoteke u istom formatu kao datoteka /etc/hosts, koja se može pročitati kada komandna ljuska treba da dovrši ime hosta.

Trenutni naziv hosta.

Niz koji opisuje mašinu na kojoj Bash radi.

Kontrolira šta ljuska radi kada primi znak kao završni znak ulaznog toka EOF(simbol kraja datoteke).

Naziv datoteke za inicijalizaciju programa Readline koja zamjenjuje zadanu datoteku /etc/inputrc.

Koristi se za definiranje kategorije lokalizacije za sve kategorije koje nisu eksplicitno specificirane varijablama čija imena počinju znakovima LC_.

Ova varijabla nadjačava vrijednost varijable LANG i svih ostalih varijabli koje počinju sa LC_ znakovima koji specificiraju kategoriju lokalizacije.

Ova varijabla specificira redoslijed sortiranja koji se koristi prilikom sortiranja imena datoteka usklađenih s uzorkom i određuje interpretaciju raspona, klasa podudaranja i pravila za poređenje znakova za zamjenu imena datoteke i podudaranje uzorka.

Ova varijabla određuje kako se znakovi tumače i pripadaju li određenoj klasi za proširenje naziva datoteke i podudaranje uzorka.

Ova varijabla specificira kategoriju lokalizacije koja se koristi za obradu nizova dvostruki navodnici, kojem prethodi simbol $.

Ova varijabla specificira kategoriju lokalizacije za format broja.

Broj reda u skripti ili funkciji ljuske koja se trenutno izvršava.

Koristi se ugrađenom komandom izaberite da odredite dužinu kolone u kojoj se prikazuju odabrane liste.

Niz koji u potpunosti opisuje tip sistema na kojem Bash radi, koristeći standardni GNU CPU-COMPANY-SYSTEM format.

Određuje, u sekundama, koliko često ljuska treba da provjerava poštu u datotekama navedenim u varijablama MAILPATH ili MAIL.

Prethodni radni direktorij je postavljen pomoću ugrađene naredbe CD.

Ako je postavljeno na 1, Bash prikazuje poruke o grešci koje generiše ugrađena naredba getopts.

String opisivanje operativni sistem, koji pokreće Bash.

Varijabla je niz koji sadrži listu vrijednosti izlaznog stanja procesa u posljednjem cjevovodu (koji se može sastojati od jedne naredbe).

Ako se ova varijabla doda okruženju kada se bash pokrene, ljuska prelazi u POSIX mod.

Ako je ova varijabla postavljena, vrijednost se tumači kao naredba koja se izvršava prije izdavanja svake primarne linije prompt-a (PS1).

Vrijednost ove varijable se koristi za naredbu izaberite kao promptni string. Zadano - ""#? ""

Vrijednost stringa prompta koji se izdaje prije komandne linije kada je opcija -x postavljena da omogući odjek komandna linija; default je ""+ "".

Trenutni radni direktorij postavljen ugrađenom naredbom CD.

Svaki put kada se pristupi ovom parametru, generira se nasumični cijeli broj u rasponu od 0 do 32767. Vrijednost ove varijable se koristi u generatorima slučajnih brojeva.

Zadana varijabla u ugrađenoj komandi čitaj.

Ova varijabla označava broj sekundi koji su prošli od pokretanja komandne ljuske.

Lista parametara postavljenih u komandnoj ljusci; odvojeno dvotočkama.

Povećava se za jedan svaki put kada se pokrene nova instanca Bash-a.

Vrijednost ovog parametra se koristi kao niz koji specificira format za izdavanje informacija o vremenu izvođenja za cjevovode kojima prethodi rezervirana riječ vrijeme.

Ako je varijabla TMOUT postavljena na vrijednost veću od nule, tada se u ugrađenoj naredbi tretira kao default timeout čitaj. Kada se komandna ljuska pokrene u interaktivnom načinu, ova vrijednost se tumači kao broj sekundi koje će shell čekati na unos nakon izdavanja početne linije prompta. Ako se ne primi nikakav unos, Bash izlazi nakon ovog vremena.

Numerička vrijednost, stvarni korisnički ID za trenutnog korisnika.

Pogledajte Man stranice ili dokumentaciju Bash za više informacija. Neke varijable su samo za čitanje, neke se automatski postavljaju, a neke postaju besmislene kada se podese na nešto drugo osim njihove zadane vrijednosti.

Posebni parametri

Komandna ljuska tretira neke parametre na poseban način. Ovi parametri se mogu koristiti samo za dobivanje vrijednosti od njih; ne mogu im se dodijeliti vrijednosti.

Tabela 3.3. Bash posebne varijable

Simbol Definicija

Vraća pozicione parametre počevši od prvog. Kada je parametar naveden u dvostrukim navodnicima, zamjenjuje se jednom riječju koja sadrži vrijednosti svakog parametra, odvojene prvim znakom posebne varijable IFS.

Vraća pozicione parametre počevši od prvog. Kada je parametar naveden u dvostrukim navodnicima, svaki parametar se vraća kao posebna riječ.

Vraća broj pozicionih parametara navedenih kao decimalna vrijednost.

Vraća povratni kod posljednjeg cjevovoda izvršenog u načinu rada u prednjem planu.

Parametar crtice vraća zastavice trenutnog parametra onako kako su bile postavljene kada je pozvana ugrađena naredba set, ili kako ih je postavila sama ljuska (na primjer, -i).

Vraća ID procesa ljuske.

Vraća ID procesa zadnje naredbe izvršene u pozadini (asinhronom) načinu rada.

Vraća ime ljuske ili skripte.

Vrijednost parametra "podvlaka" se postavlja kada se pokrene komandna ljuska i sadrži puno ime ljuska ili skripta koja se izvršava onako kako je proslijeđena na listi argumenata. Vrijednost će tada biti zamijenjena posljednjim argumentom prethodne naredbe. Ovaj parametar također specificira punu stazu do svake naredbe koja se izvršava i stavlja u okruženje koje je eksportovano u tu naredbu. Kada je pošta označena, ovaj parametar sadrži naziv datoteke pošte.

Pozicijski parametri su riječi koje slijede iza imena shell skripte. Oni su pohranjeni u varijablama $1, $2, $3 i tako dalje. Promenljive se dodaju internom nizu po potrebi. Varijabla $# specificira ukupan broj parametara, kao što je prikazano u sljedećoj jednostavnoj skripti:

# positional.sh # Ova skripta čita 3 poziciona parametra i ispisuje ih. POSPAR1="$1" POSPAR2="$2" POSPAR3="$3" echo "$1 je prvi pozicioni parametar, \$1." echo "$2 je drugi pozicijski parametar, \$2." echo "$3 je treći pozicijski parametar, \$3." echo echo "Ukupan broj pozicionih parametara je $#."

Prilikom pokretanja skripte, možete navesti bilo koji broj argumenata:

Franky ~> positional.sh jedan dva tri četiri pet jedan je prvi pozicioni parametar, $1. dva je drugi pozicioni parametar, $2. tri je treći pozicioni parametar, $3. Ukupan broj pozicionih parametara je 5. franky ~> positional.sh jedan dva jedan je prvi pozicioni parametar, $1. dva je drugi pozicioni parametar, $2. je treći pozicioni parametar, $3. Ukupan broj pozicionih parametara je 2.

Za više informacija o korištenju ovih parametara, pogledajte Poglavlje 7, Uvjetne izjave, i odjeljak o ugrađenoj komandi shift.

Neki primjeri drugih posebnih parametara:

Franky ~> grep dictionary /usr/share/dict/words dictionary franky ~> echo $_ /usr/share/dict/words franky ~> echo $$ 10662 franky ~> mozilla & 11064 franky ~> echo $! 11064 franky ~> echo $0 bash franky ~> echo $? 0 franky ~> ls ne postoji ls: donotexist: Ne postoji takav fajl ili direktorijum franky ~> echo $? 1 franky ~>

Korisnik franky počinje unosom naredbe grep, koji dodjeljuje vrijednost varijabli _. ID procesa ove ljuske je 10662. Ako se izvršenje nekog posla prenese na pozadinski način rada, u promjenljivoj! postojat će identifikator procesa pozadinski posao. Radna komandna ljuska je bash. Ako je napravljena greška, u varijabli? bit će povratni kod različit od 0 (nula).

Proširivanje opsega primjene skripti koje imaju varijable

Osim što vašu skriptu čine čitljivijom, varijable vam također mogu pomoći da brzo koristite skriptu u drugim kontekstima ili u druge svrhe. Razmotrite sljedeći primjer - vrlo jednostavnu skriptu koja radi na udaljenom serveru rezervna kopija kućni imenik korisnika franky:

#!/bin/bash # Ova skripta pravi rezervnu kopiju mog matičnog direktorijuma. cd /home # Ovo kreira arhivu tar cf /var/tmp/home_franky.tar franky > /dev/null 2>&1 # Prvo uklonite stari bzip2 fajl. Greške preusmjeravanja jer ovo generiše neke ako arhiva # ne postoji. Zatim kreirajte novu komprimovanu datoteku. rm /var/tmp/home_franky.tar.bz2 2> /dev/null bzip2 /var/tmp/home_franky.tar # Kopirajte fajl na drugi host - imamo ssh ključeve da ovo funkcioniše bez intervencije. scp /var/tmp/home_franky.tar.bz2 bordeaux:/opt/backup/franky > /dev/null 2>&1 # Kreirajte vremensku oznaku u datoteci dnevnika. datum >> /home/franky/log/home_backup.log echo backup je uspio >> /home/franky/log/home_backup.log

Prije svega, veća je vjerovatnoća da ćete pogriješiti ako ručno navedete datoteke i direktorije svaki put kada vam zatrebaju. Drugo, pretpostavimo korisnika frankyželi proslijediti ovu skriptu korisniku Carol, zatim prije Carol moći će koristiti skriptu za Rezervna kopija njegov početni direktorij, morat će poprilično urediti. Ista stvar će se dogoditi ako korisnik frankyće htjeti koristiti ovu skriptu za izradu sigurnosnih kopija drugih direktorija. Da proširite opseg, koristite varijable za sve datoteke, direktorije, korisnička imena, imena servera itd. Tada trebate samo jednom promijeniti vrijednost i ne morate prolaziti kroz cijelu skriptu da biste pronašli sva mjesta na kojima se javlja određeni parametar. primjer:

#!/bin/bash # Ova skripta pravi rezervnu kopiju mog matičnog direktorijuma. # Promijenite vrijednosti varijabli da bi skripta radila za vas: BACKUPDIR=/home BACKUPFILES=franky TARFILE=/var/tmp/home_franky.tar BZIPFILE=/var/tmp/home_franky.tar.bz2 SERVER=bordeaux REMOTEDIR =/ opt/backup/franky LOGFILE=/home/franky/log/home_backup.log cd $BACKUPDIR # Ovo kreira arhivski tar cf $TARFILE $BACKUPFILES > /dev/null 2>&1 # Prvo uklonite stari bzip2 fajl. Greške preusmjeravanja jer ovo generiše neke ako arhiva # ne postoji. Zatim kreirajte novu komprimovanu datoteku. rm $BZIPFILE 2> /dev/null bzip2 $TARFILE # Kopirajte datoteku na drugi host - imamo ssh ključeve da ovo funkcionira bez intervencije. scp $BZIPFILE $SERVER:$REMOTEDIR > /dev/null 2>&1 # Kreirajte vremensku oznaku u datoteci dnevnika. datum >> $LOGFILE echo sigurnosna kopija je uspjela >> $LOGFILE

Dok radi sa serverom, ljuska kompajlira veliku količinu informacija koje određuju njegovo ponašanje i pristup resursima. Neke od ovih opcija nalaze se u postavkama ljuske, druge se određuju korisničkim unosom.

Jedan od načina da ljuska prati ove informacije je kroz okruženje. Okruženje je područje koje sadrži varijable koje definiraju sistem koje ljuska gradi svaki put kada se sesija pokrene.

Ovaj vodič objašnjava kako komunicirati sa okruženjem i čitati ili postavljati varijable okruženja i ljuske interaktivno i koristeći konfiguracijske datoteke. Sve radnje se izvode na Ubuntu 12.04 VPS, ali bilo koje moderne Linux distribucija trebalo bi da radi na isti način.

Kako funkcionišu okruženje i njegove varijable

Svaki put kada se sesija ljuske aktivira, pokreće se proces prikupljanja i kompajliranja informacija koje bi trebale biti dostupne ljusci i njenim podređenim procesima. Shell dobija ove podatke iz mnogo različitih datoteka i postavki na sistemu.

Općenito, okruženje pruža mogućnost prijenosa koja prikuplja i postavlja potrebna podešavanja za shell proces, koji ih zauzvrat prosljeđuje svojim podređenim procesima.

Okruženje ima oblik niza koji sadrži parove ključ/vrijednost. Više vrijednosti se obično odvajaju dvotočkom (:). Svaki par općenito izgleda otprilike ovako:

KEY=vrijednost1:vrijednost2:...

Ako vrijednost sadrži razmake, trebate koristiti dvostruke navodnike:

KEY="vrijednost s razmacima"

U ovom slučaju, ključ znači varijable jedne od dvije postojeće vrste: varijable okruženja ili ljuske.

Varijable okruženja su varijable koje su definirane za trenutnu ljusku i naslijeđuju ih sve podređene ljuske ili procesi. Varijable okruženja se koriste za prosljeđivanje informacija procesima pokrenutim iz ljuske.

Shell varijable su varijable koje se nalaze isključivo u ljusci u kojoj su postavljene ili definirane. Često se koriste za praćenje trenutnih podataka (na primjer, trenutni radni direktorij).

Obično se takve varijable označavaju velikim slovima. Ovo pomaže korisnicima da razlikuju varijable okruženja u drugim kontekstima.

Ispis ljuske i varijabli okruženja

Svaka sesija prati vlastite ljuske i varijable okruženja. Postoji nekoliko načina da ih izbacite.

Da vidite listu svih varijabli okruženja, koristite naredbe env ili printenv. Podrazumevano će dati potpuno isti rezultat:

printenv
SHELL=/bin/bash
TERM=xterm
USER=demoser
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd= 40;33;01:or=40;31;01:su=37;41:sg=30;43:ca:...
MAIL=/var/mail/demoser
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
PWD=/home/demoser
LANG=en_US.UTF-8
SHLVL=1
HOME=/home/demoser
LOGNAME=demoser
LESSOPEN=| /usr/bin/lesspipe %s
LESSCLOSE=/usr/bin/lesspipe %s %s
_=/usr/bin/printenv

Ovo je tipičan primjer izlaza printenv i env naredbi. Ove naredbe se razlikuju samo u nekoliko pojedinačnih funkcija. Na primjer, printenv može tražiti vrijednosti pojedinačnih varijabli:

printenv SHELL
/bin/bash

Naredba env vam omogućava da promijenite okruženje u kojem se pokreću programi tako što ćete naredbi proslijediti skup definicija varijabli, otprilike ovako:

env VAR1="blahbla" command_to_run command_options

Kao što je gore navedeno, podređeni procesi obično nasljeđuju varijable okruženja roditeljskog procesa, što omogućava promjenu vrijednosti ili uvođenje dodatnih varijabli za podređene procese.

Kao što možete vidjeti u izlazu naredbe printenv, mnoge varijable okruženja se kreiraju pomoću sistemske datoteke i procesi bez intervencije korisnika.

Ali kako vidite varijable ljuske?

Da biste to učinili, koristite naredbu set. Kada se unese bez dodatnih parametara, set navodi sve varijable ljuske, varijable okruženja, lokalne varijable i funkcije ljuske:

set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
. . .

Po pravilu, ova lista je prilično duga. Da biste ga prikazali u pogodnijem formatu, otvorite ga pomoću programa za pejdžer:

Ova lista sadrži ogroman broj Dodatne informacije, koji je u ovog trenutka nije potrebno (na primjer, neke bash funkcije).

Da biste "očistili" izlaz, morate pokrenuti naredbu set u POSIX modu, koji zaobilazi funkcije ljuske. Ovo treba učiniti u podljusci kako se ne bi promijenilo trenutno okruženje:

(set -o posix; set)

Ova akcija će prikazati sve varijable okruženja i ljuske.

Također možete uporediti ovaj izlaz sa izlazom naredbi env/printenv i pokušati navesti samo varijable ljuske, ali takva lista neće biti idealna jer je izlaz ovih naredbi drugačiji:

com -23<(set -o posix; set | sort) <(env | sort)

Lista će vjerovatno sadržavati više varijabli okruženja jer naredba set ispisuje vrijednosti u navodnicima, ali naredbe printenv i env ne.

Međutim, ovo je odličan način za pregled varijabli okruženja i ljuske postavljenih u datoj sesiji.

Takve varijable se koriste u razne svrhe. Oni pružaju alternativni način za postavljanje trajnih vrijednosti za sesiju između procesa, eliminirajući potrebu za unošenjem promjena u datoteku.

Osnovno okruženje i varijable ljuske

Neke posebno korisne varijable okruženja i ljuske se koriste vrlo često.

Ispod je lista glavnih varijabli okruženja:

  • SHELL: Opisuje ljusku koja interpretira unesene komande. U većini slučajeva bash je instaliran prema zadanim postavkama, ali ova vrijednost se može promijeniti ako je potrebno.
  • TERM: Određuje tip terminala koji se emulira kada se ljuska pokrene. Ovisno o operativnim zahtjevima, mogu se emulirati različiti hardverski terminali. Obično ne morate da brinete o ovome.
  • USER: trenutni korisnik.
  • P.W.D.: trenutni radni direktorij.
  • OLDPWD: prethodni radni direktorij. Shell ga pohranjuje u slučaju da se pokrene naredba cd -.
  • LS_BOJE: Definira kodove boja koji se koriste za bojenje izlaza naredbe ls. Ovaj izlaz pomaže korisniku da brže pročita rezultat naredbe (na primjer, brzo razlikuje tipove datoteka).
  • MAIL: Put do trenutnog poštanskog sandučeta korisnika.
  • PUT: Lista direktorija kojima sistem pristupa prilikom izvršavanja naredbi. Kada korisnik pokrene naredbu, sistem provjerava ove direktorije navedenim redoslijedom za izvršnu datoteku.
  • LANG: Trenutne postavke jezika i lokalizacije, uključujući kodiranje znakova.
  • DOM: Početni direktorij trenutnog korisnika.
  • _ : Posljednja naredba izvršena.

Nakon pregleda liste varijabli okruženja, ispitajte listu varijabli ljuske:

  • BASHOPTS: Lista opcija koje se koriste prilikom izvršavanja bash-a. Ovo se može koristiti za provjeru da li okruženje radi kako se očekuje.
  • BASH_VERZIJA: Pokrenuta verzija bash-a u ljudskom čitljivom obliku.
  • BASH_VERSINFO: Mašinski čitljiva verzija basha.
  • COLUMNS: Određuje širinu izlaza u kolonama.
  • DIRSTACK: Gomila direktorija dostupnih naredbama pushd i popd.
  • HISTFILESIZE: Maksimalan broj linija sadržanih u datoteci istorije komandi.
  • HISTSIZE: Broj komandi koje treba zapamtiti na listi istorije.
  • HOSTNAME: Trenutno ime hosta.
  • IFS: Interni separator polja za unos na komandnoj liniji. Podrazumevano je razmak.
  • PS1: Definira početnu liniju prompt-a - tip komandne linije pri pokretanju sesije ljuske. Varijabla PS2 postavlja sekundarnu liniju prompta ako naredba obuhvata više redova.
  • SHELLOPTS: Opcije školjke koje se mogu postaviti pomoću set.
  • UID: Jedinstveni identifikator za trenutnog korisnika.

Postavljanje varijabli ljuske i okruženja

Ispod je nekoliko primjera koji pokazuju razliku između ljuske i varijabli okruženja i objašnjavaju sintaksu za postavljanje ovih varijabli.

Kreiranje shell varijabli

Prvo morate postaviti varijable ljuske za trenutnu sesiju. Ovo se radi vrlo jednostavno, sve što treba da uradite je da navedete ime i vrednost. Kao što je već spomenuto, velika slova se koriste za pisanje imena takvih varijabli.

TEST_VAR="Zdravo svijete!"

Ovaj primjer koristi navodnike jer vrijednost sadrži razmake. Štaviše, ovdje morate koristiti jednostruke navodnike jer je uzvičnik poseban znak u bash shell-u koji pristupa historiji naredbi osim ako nije zaklonjen ili zatvoren u jednostruke navodnike.

Dakle, rezultirajuća varijabla ljuske je važeća u trenutnoj sesiji, ali se ne prosljeđuje njenim podređenim procesima.

Da biste to potvrdili, koristite naredbu grep na rezultatu naredbe set:

set | grep TEST_VAR
TEST_VAR="Zdravo svijete!"

Također možete osigurati da ova varijabla nije varijabla okruženja tako što ćete pokrenuti grep na rezultat printenv naredbe:

printenv | grep TEST_VAR

Ova akcija neće dati nikakav rezultat.

Ovo se može koristiti za izlaganje vrijednosti bilo koje ljuske ili varijable okruženja.

echo $TEST_VAR
Zdravo svijete!

Kao što vidite, da biste pristupili vrijednosti varijable, morate koristiti simbol $.

Opet, rezultirajuća varijabla ne bi trebala biti proslijeđena nijednom podređenom procesu. Da biste ovo testirali, unutar vaše trenutne ljuske, implementirajte novu bash shell:

bash
echo $TEST_VAR

Ako proširite podređenu ljusku i pokušate otvoriti sadržaj varijable, ništa se neće ispisati. To znači da sve radi kako treba.

Da se vratite na svoju originalnu ljusku, otkucajte exit:

Kreiranje varijabli okruženja

Sada pokušajte da pretvorite varijablu ljuske u varijablu okruženja. Ovo se radi izvozom varijable. Komanda koja izvodi izvoz je imenovana u skladu s tim.

Ova naredba pretvara varijablu ljuske u varijablu okruženja. Da biste provjerili da li je sve urađeno kako treba, možete ponovo pogledati listu varijabli okruženja:

printenv | grep TEST_VAR
TEST_VAR=Zdravo svijete!

Sada je ova varijabla prikazana na ovoj listi. Također možete ponovo proširiti podređenu ljusku:

bash
echo $TEST_VAR
Zdravo svijete!

Odlično! Podređena ljuska je primila varijablu iz originalne ljuske. Pokušajte izvesti još jednu varijablu prije nego što napustite podređenu ljusku.

export NEW_VAR="Testiranje izvoza"

Provjerite je li varijabla izvezena:

printenv | grep NEW_VAR
NEW_VAR=Testiranje izvoza

Sada se vratite na svoju originalnu školjku:

Provjerite da li se ova varijabla može otvoriti:

Rezultat se ne vraća

To se događa zato što se varijable okruženja prosljeđuju samo podređenim procesima. Ne postoji ugrađen način za postavljanje varijabli okruženja roditeljske ljuske. U većini slučajeva, ovo sprečava programe da ometaju operativno okruženje iz kojeg su pokrenuti.

Varijabla NEW_VAR je postavljena kao varijabla okruženja dječje ljuske. Ova varijabla je važeća za ovu ljusku i njene podređene ljuske i procese. Nakon što se korisnik vratio na originalnu ljusku, ovo okruženje je uništeno.

Premještanje i resetiranje varijabli

Varijabla TEST_VAR je i dalje varijabla okruženja. Da biste ga ponovo učinili promjenljivom ljuske, otkucajte:

izvoz -n TEST_VAR

Sada ova varijabla više nije varijabla okruženja:

printenv | grep TEST_VAR

Ovo je opet varijabla ljuske:

set | grep TEST_VAR
TEST_VAR="Zdravo svijete!"

Za potpuno resetiranje varijable, bilo da se radi o varijabli okruženja ili ljuske, koristite naredbu unset:

Uvjerite se da takva varijabla više ne postoji:

Nijedan rezultat nije ispisan jer je varijabla resetirana.

Automatsko postavljanje varijabli okruženja

Kao što je već spomenuto, mnogi programi koriste varijable okruženja da bi odredili kako bi trebali raditi. Postavljanje potrebnih varijabli svaki put kada se kreira nova ljuska je prilično nezgodno. Osim toga, mnoge varijable se postavljaju odmah po prijavi. Kako automatski postaviti varijable?

Ovo je malo komplikovanije nego što se na prvi pogled čini, pošto bash shell čita mnogo konfiguracionih fajlova.

Vrste shell sesija

Bash shell čita različite konfiguracijske datoteke ovisno o tome kako je sesija započela. Prve dvije vrste sesija koje definiraju ljusku su start i child.

Starter ili početna školjka(login shell) je shell sesija koja se otvara nakon autorizacije korisnika. Ako se korisnik prijavi na terminal ili se autentifikuje pomoću SSH-a, otvorit će se ljuska za pokretanje.

Ako se nova sesija pokrene iz ovlaštene (početne) sesije (kao u prethodnim primjerima pokrenuta je nova bash shell), ova sesija će biti podružnica (ne-Ulogovati se ljuska). Da biste otvorili ovu sesiju, ne morate proći proceduru autorizacije.

Također, shell sesije mogu biti interaktivne ili neinteraktivne.

Interaktivna sesija shell (interaktivna ljuska) je sesija vezana za terminal. Neinteraktivna ljuska sesija je sesija koja nije pridružena terminalu.

Dakle, ljuske sesije su klasifikovane prema sljedećim aspektima: početak-dijete, interaktivno-neinteraktivno.

Normalna sesija otvorena pomoću SSH-a je obično interaktivna početna sesija. Skripta koja se pokreće preko komandne linije obično se izvodi u neinteraktivnoj podređenoj sesiji. Terminalna sesija je drugačija kombinacija ova dva svojstva.

Klasifikujući sesiju kao početnu sesiju ili podređenu sesiju, sistem razume koje datoteke treba pročitati da bi se inicijalizovala sesija ljuske.

Dakle, prvo sesija pokretanja dobija konfiguracije iz /etc/profile datoteke. Zatim traži konfiguracijsku datoteku ljuske za pokretanje u korisničkom početnom direktoriju kako bi dobio korisnički definirane konfiguracije.

Ova sesija čita datoteke ~/.bash_profile, ~/.bash_login i ~/.profile i ne čita druge datoteke.

Podređena sesija zauzvrat čita /etc/baash.bashrc, a zatim i korisnikov ~/.bash.rc fajl za implementaciju okruženja.

Neinteraktivne ljuske čitaju varijablu okruženja BASH_ENV i navedenu datoteku da kreiraju novo okruženje.

Kako postaviti varijable okruženja

Kao što vidite, konfiguracije su razbacane po različitim datotekama.

Ovo čini sistem vrlo fleksibilnim, što je korisno u određenim situacijama kada trebate postaviti različite parametre za startnu i podređenu ljusku. Međutim, ove školjke uglavnom koriste iste postavke.

Srećom, većina Linux distribucija ukazuje na konfiguracijski fajl podređene ljuske kao izvor konfiguracija ljuske za pokretanje. To znači da možete definirati varijable okruženja za obje sesije u konfiguracijskim datotekama podređene ljuske.

Obično obje ljuske koriste korisnički definirane varijable okruženja. To znači da možete postaviti ove varijable u ~/.bashrc datoteci.

Otvorite ovaj fajl:

Najvjerovatnije već sadrži neke podatke. Većina ovdje postavljenih vrijednosti su bash opcije i nemaju nikakve veze sa varijablama okruženja. Varijable u ovoj datoteci su postavljene na potpuno isti način kao u komandnoj liniji:

izvoz VARNAME=vrijednost

Nakon unosa svih potrebnih varijabli, zatvorite datoteku. Sljedeći put kada započnete sesiju ljuske, ovdje postavljene varijable će biti pročitane i proslijeđene okruženju ljuske. Da kažete trenutnoj sesiji da pročita datu datoteku, unesite:

izvor ~/.bashrc

Da postavite varijable za cijeli sistem, dodajte ih u /etc/profile, /etc/bash.bashrc ili /etc/environment.

Rezultati

Promenljive ljuske i okruženja su uvek prisutne u svim sesijama ljuske, tako da je poznavanje rada sa njima posebno korisno. Mogu se koristiti za prosljeđivanje konfiguracija roditeljskog procesa podređenim procesima, kao i za konfiguriranje postavki izvan datoteka.

Ovo pruža niz prednosti u određenim situacijama. Na primjer, neki mehanizmi implementacije se oslanjaju na varijable okruženja za konfiguriranje informacija o autentifikaciji. Ovo je zgodno jer tako važni podaci neće biti pohranjeni ni u jednoj datoteci, što znači da će biti pouzdano zaštićeni od autsajdera.

Postoje mnoge druge uobičajene situacije u kojima ćete možda morati pročitati varijable ili promijeniti sistemsko okruženje. Alati i tehnike opisani u ovom vodiču pružaju odličnu osnovu za razvoj vaših vještina u radu s varijablama i njihovom pravilnom korištenju.

Tagovi: ,

Varijable okruženja u Linuxu su posebne varijable definirane od strane ljuske i koje programi koriste u vrijeme izvođenja. Mogu ih definirati sistem i korisnik. Sistemske varijable okruženja Linux definira sistem i koriste ih programi na nivou sistema.

Na primjer, naredba PWD koristi sistemsku varijablu da zadrži prethodni radni direktorij. Varijable korisničkog okruženja postavlja korisnik, za trenutnu ljusku, bilo privremeno ili trajno. Cijeli koncept dodavanja i uklanjanja varijabli ljuske vrti se oko više datoteka, naredbi i različitih školjki.

U širem smislu, varijabla okruženja može biti tri tipa:

1. Lokalne varijable okruženja

Ove varijable su definirane samo za trenutnu sesiju. Oni će biti trajno izbrisani nakon završetka sesije, bilo da se radi o daljinskom pristupu ili emulatoru terminala. Oni se ne pohranjuju ni u jednom fajlu, već se kreiraju i brišu pomoću posebnih naredbi.

2. Prilagođene varijable ljuske

Ove varijable ljuske u Linuxu su definirane za određenog korisnika i učitavaju se svaki put kada se korisnik prijavi koristeći lokalni terminal ili se poveže na daljinu. Takve varijable se obično pohranjuju u konfiguracijskim datotekama: .bashrc, .bash_profile, .bash_login, .profile ili druge datoteke koje se nalaze u korisničkom direktoriju.

3. Varijable sistemskog okruženja

Ove varijable su dostupne u cijelom sistemu, za sve korisnike. Oni se učitavaju pri pokretanju sistema iz konfiguracionih datoteka sistema: /etc/environment, /etc/profile, /etc/profile.d/ /etc/bash.bashrc.

Konfiguracijske datoteke varijabli Linux okruženja

Ovdje ćemo brzo pogledati različite gore navedene konfiguracijske datoteke koje se koriste za konfiguriranje varijabli okruženja za cijeli sistem ili određenog korisnika.

.bashrc

Ovo je varijabilna datoteka specifična za korisnika. Učitava se svaki put kada korisnik kreira terminalsku sesiju, odnosno, drugim riječima, otvara novi terminal. Sve varijable okruženja kreirane u ovoj datoteci stupaju na snagu svaki put kada se pokrene nova sesija terminala.

.bash_profile

Ove varijable stupaju na snagu svaki put kada se korisnik poveže na daljinu preko SSH-a. Ako ovaj fajl nedostaje, sistem će tražiti .bash_login ili .profile.

/etc/environment

Ova datoteka je za kreiranje, uređivanje i brisanje bilo koje varijable okruženja na nivou sistema. Varijable okruženja kreirane u ovoj datoteci dostupne su za cijeli sistem, za svakog korisnika, pa čak i kada se povezujete na daljinu.

/etc/bash.bashrc

Sistem bashrc. Ova datoteka se izvršava za svakog korisnika, svaki put kada kreira novu terminalsku sesiju. Ovo radi samo za lokalne korisnike; kada su povezani putem interneta, takve varijable neće biti vidljive.

/etc/profile

Profil sistemske datoteke. Sve varijable iz ove datoteke dostupne su svakom korisniku na sistemu samo ako je prijavljen sa daljine. Ali oni neće biti dostupni prilikom kreiranja lokalne terminalske sesije, odnosno ako jednostavno otvorite terminal.

Sve varijable Linux okruženja kreirane pomoću ovih datoteka mogu se ukloniti jednostavnim brisanjem odatle. Tek nakon svake promjene, morate se ili odjaviti i ponovo prijaviti, ili pokrenuti ovu naredbu:

naziv izvorne datoteke

Dodavanje varijabli korisničkog i sistemskog okruženja u Linuxu

Sada kada znate malo teorije, idemo na praksu. Lokalne varijable okruženja u Linuxu mogu se kreirati pomoću sljedećih naredbi:

var=vrijednost
$ izvoz var=vrijednost

Ove varijable će biti dostupne samo za trenutnu terminalsku sesiju.

Postoji nekoliko naredbi koje možete koristiti za uklanjanje varijabli okruženja:

1. Korištenje env

Podrazumevano, možete koristiti env da vidite sve postavljene varijable okruženja. Ali sa opcijom -i, omogućava vam da privremeno uklonite sve varijable ljuske i izvršite naredbu bez varijabli.

env –i komanda

Var je bilo koja varijabla koju želite proslijediti ovoj naredbi.

Ova naredba će pokrenuti ljusku bez ikakvih varijabli okruženja:

Nakon pokretanja takvog okruženja, varijable neće biti dostupne, ali nakon izlaska sve će se vratiti na svoje mjesto.

2. Korištenje unset

Ovo je još jedan način uklanjanja varijabli Linux okruženja. Unset uklanja varijablu po imenu do kraja trenutne sesije:

poništiti ime_varijable

3. Postavite vrijednost varijable na ""

Ovo je najlakši način za uklanjanje varijabli okruženja u Linuxu; postavljanjem varijable na praznu, uklanjate je za ostatak trenutne sesije.

Napomena: Koristeći ove metode možete promijeniti vrijednosti sistemskih ili korisničkih varijabli, ali one će biti relevantne samo za trenutnu sesiju.

Kreiranje varijabli korisničkog i sistemskog okruženja

U ovom odeljku ćemo pogledati kako postaviti i izbrisati sistemske i korisničke varijable ne samo za trenutnu sesiju, već i tako da se efekat nastavi nakon ponovnog pokretanja.

1. Postavite i uklonite lokalne varijable u Linuxu

Kreirajmo lokalnu varijablu VAR i postavimo je na bilo koju vrijednost, zatim je poništimo i provjerimo je li obrisana:

VAR1="Izgubljeni"
$ echo $VAR1
$unset VAR1
$ echo $VAR1

Drugi način za kreiranje varijable je naredba za izvoz. Uklonimo ga dodjeljivanjem prazne vrijednosti:

izvoz VAR="Izgubljeni"
$ echo $VAR
$VAR=
$ echo $VAR

Sada kreirajmo varijablu VAR2 i damo joj vrijednost. A zatim privremeno uklonite sve lokalne varijable pokretanjem env -i. Pokrenut će ljusku bez ikakvih varijabli. Nakon ulaska u izlaz, sve varijable će biti vraćene.

VAR2="Izgubljeni"
$ echo $VAR2
$ env -i bash
$ echo $VAR2

Postavljanje i uklanjanje korisničkih varijabli

Uredite .bashrc datoteku u svom matičnom direktoriju dodavanjem naredbe za izvoz za izvoz željene varijable. Zatim pokrenite naredbu izvora da biste primijenili promjene. Kreirajmo, na primjer, varijablu CD:

Dodajte ovaj red (o, zatim zalijepite, zatim Esc i :wq):

export CD="Ovo je izgubljen dom"

Sada ostaje ažurirati konfiguraciju:

source.bashrc
$echo $CD

Da biste uklonili ovu varijablu, jednostavno je uklonite iz .bashrc.

Sada dodajmo varijablu okruženja koristeći .bash_profile. Ova varijabla, kao što već znate, bit će dostupna samo za vrijeme udaljene prijave:

vi .bash_profile

Dodajte liniju:

export VAR2="Ovo je izgubljena kuća"

I pokrenite ove naredbe da primijenite promjene i provjerite da li je varijabla dodana:

source.bash_profile
$ echo $VAR2

Varijabla nije dostupna jer ste kreirali lokalnu terminalsku sesiju, sada se povežite preko ssh-a:

ssh korisnik@localhost
$ echo $VAR2

Ovu varijablu okruženja možete izbrisati na isti način kao u prethodnom slučaju tako što ćete je izbrisati iz datoteke.

komentar: Ove varijable su uvijek dostupne, ali ne za sve korisnike.

Postavljanje i uklanjanje varijabli sistemskog okruženja

Kreirajmo varijablu dostupnu svim korisnicima u svim terminalskim sesijama osim udaljenih tako što ćemo je dodati u /etc/bash.profile:

vi /etc/bash.profile

export VAR="Ovo je sistemska varijabla"

Zatim ažuriramo:

izvor /etc/bash.bashrc

Sada je ova varijabla dostupna svim korisnicima, na svim terminalima:

echo $VAR
$sudo su
$ echo $VAR
$su -
$ echo $VAR

Ako želite da varijablu okruženja učinite dostupnom svim korisnicima koji se daljinski povezuju na ovu mašinu, uredite datoteku /etc/profile:

export VAR1="Ovo je sistemska varijabla samo za udaljene sesije"

Ažurirajte konfiguraciju i provjerite dostupnost varijable, bit će dostupna samo na daljinu:

izvor /etc/profile
$ echo $VAR1

Ako trebate dodati varijablu okruženja u Linuxu tako da je dostupna i daljinski i za lokalne sesije, izvezite je u /etc/environment:

vi /etc/environment

izvoz VAR12="Dostupan sam svuda"

Provjeravamo:

izvor /etc/environment
$ echo $VAR12
$sudo su
$ echo $VAR12
$ izlaz
$ssh localhost
$ echo $VAR12

2.2. Varijable okruženja

Operativni sistem podržava posebnu vrstu resursa tzv Varijable okruženja (varijable okruženja). Ove varijable su par IME - VRIJEDNOST . Ime može početi slovom i sastojati se od slova, brojeva i donjih crta.

Da biste zamijenili vrijednost varijable u komandnoj liniji, prethodite imenu varijable znakom $:

$ echo $USER gost

Ako varijabla nije postavljena, vraća se prazan niz.

Da biste postavili vrijednost varijable, koristite operator dodjeljivanja (u slučaju ljuski sličnih Bourneu):

$TEST=test

ili ugrađeni operator skupa (u slučaju C-ovih):

$ set TEST=test

Naredba set, bez argumenata, navodi vrijednosti svih varijabli postavljenih u okruženju:

$ set COLUMNS=197 CVS_RSH=ssh DIRSTACK=() EUID=1000 GROUPS=() G_BROKEN_FILENAMES=1 HISTFILE=/home/guest/.bash_history HISTFILESIZE=1000 HISTSIZE=1000 HOME=/home/mygost HOME=/home/mygost =$" \t\n" INPUTRC=/etc/inputrc KDEDIR=/usr KDEDIRS=/home/guest/.local/ KDE_IS_PRELINKED=1 KDE_NO_IPV6=1 LANG=ru_RU.UTF-8 LESSOPEN="|/usr/bin/ lespipe.sh %s" LINES=65 LOGNAME=gost ....

Varijable mogu biti lokalne za dati proces ili globalne za sesiju. Možete postaviti lokalne vrijednosti za varijable tako što ćete ih prethoditi pozivanjem naredbi:

$ TEST=test1 sh -c "echo $TEST" test1

Možete procijeniti sadržaj skupa varijabli za sesiju pozivanjem ugrađene komande interpretatora env u slučaju Bourneovih tumača (sh, ksh, bash, zsh, pdksh...), i printenv u slučaju C-Shell kloniranih interpretatora (csh, tcsh..):

$ env HOSTNAME=myhost TERM=xterm SHELL=/bin/bash HISTSIZE=1000 KDE_NO_IPV6=1 SSH_CLIENT=172.16.0.9 50487 22 QTDIR=/usr/lib/qt-3.3 QTINC=/ust-3lib3//ust-3. =/dev/pts/6 USER=guest MOZILLA_CERTIFICATE_FOLDER=/home/guest/.evolution/ KDEDIR=/usr MAIL=/var/spool/mail/guest PATH=/usr/games:/usr/local/bin:/bin :/usr/bin:/home/guest/bin INPUTRC=/etc/inputrc PWD=/home/guest KDE_IS_PRELINKED=1 LANG=ru_RU.UTF-8 KDEDIRS=/home/guest/.local/ SSH_ASKPASS=/usr/libexec /openssh/gnome-ssh-askpass SHLVL=1 HOME=/home/guest LOGNAME=gost QTLIB=/usr/lib/qt-3.3/lib CVS_RSH=ssh SSH_CONNECTION=172.16.0.9 50487 172.16.0.9 50487 172.16.0.9 50487 172.16.0.9 /bin/lesspipe.sh %s G_BROKEN_FILENAMES=1 _=/bin/env

Setovi komandi Shell mogu se kompajlirati u komandne datoteke koje se zovu skripte, gdje prvi red u posebnom tipu komentara specificira interpreter komandi za izvršavanje ovog skupa. Na primjer, napravimo datoteku u uređivaču teksta pod nazivom test sa sljedećim sadržajem:

#!/bin/sh echo TEST varijabla: echo $TEST

Ovaj program će ispisati na standardni izlaz tekstualnu poruku "TEST varijabla: " i vrijednost TEST varijable, ako je navedena. Možete ga pokrenuti iz komandne linije tako što ćete ga proslijediti kao parametar interpretatoru komandi:

$sh test TEST varijabla:

Možete napraviti globalnu varijablu koristeći naredbu export (Bourne) ili setenv (C-SHell):

$ export TEST=test1 $ sh test TEST varijabla: test1

Možete postaviti lokalne vrijednosti varijabli za izvršavanje datog programa tako što ćete ih prethoditi pozivanjem naredbi:

$ TEST=test2 sh test TEST varijabla: test2

Uklanjanje varijabli okruženja se vrši pomoću naredbe unset.

Koncept parametra u ljusci bash slično konceptu varijable u konvencionalnim programskim jezicima. Naziv parametra (ili identifikator) može biti riječ koja se sastoji od abecednih znakova, brojeva i donjih crta (samo prvi znak riječi ne može biti broj), broja ili jednog od sljedećih posebnih znakova: * , @ , # , ? , - (crtica), $ , ! , 0 , _ (podvlačenje).

Za parametar se kaže da je postavljen ili postavljen ako mu je dodijeljena vrijednost. Vrijednost također može biti prazan niz. Za prikaz vrijednosti parametra koristite simbol $ ispred njegovog imena. Da, tim

$ echo ime

će prikazati riječ na ekranu ime, i tim

$echo $name

će vratiti vrijednost varijable imena (ako je postavljena, naravno).

5.6.1 Raznolikosti parametara

Parametri su podijeljeni u tri klase: pozicioni parametri, posebni parametri(čiji su nazivi upravo navedeni specijalni znakovi) i shell varijable.

Imena (identifikatori) pozicioni parametri sastoji se od jedne ili više cifara (ne jedne nule). Vrijednosti pozicijskih parametara su argumenti koji su dati kada je shell pokrenut (prvi argument je vrijednost pozicijskog parametra 1, itd.). Možete promijeniti vrijednost pozicijskog parametra koristeći ugrađenu naredbu set. Vrijednosti ovih parametara se također mijenjaju dok ljuska izvršava jednu od funkcija (o tome će biti riječi u nastavku, u odjeljak 5.8).

Posebni parametri su obrasci, čija se zamjena (zamjena) vrši na sljedeći način.

Tabela 5.2. Posebni parametri.

Parametar

Pravila zamjene

Zamijenjeno pozicionim parametrima, počevši od prvog. Ako se zamjena izvrši unutar dvostrukih navodnika, tada se ovaj parametar zamjenjuje jednom riječju sastavljenom od svih pozicionih parametara razdvojenih prvim znakom posebne IFS varijable (o kojoj se govori u nastavku). To jest, ``$*"" je ekvivalentno ``$1c$2c...", gdje je c prvi znak u vrijednosti IFS varijable. Ako je IFS postavljen na prazan ili nema postavljenu vrijednost, parametri se odvajaju razmacima

Zamijenjeno pozicionim parametrima, počevši od prvog. Ako se zamjena izvrši unutar dvostrukih navodnika, tada se svaki parametar zamjenjuje zasebnom riječju. Dakle, `` $@"" je ekvivalentno ""$1"" ""$2"" ... Ako nema pozicionih parametara, onda se nikakva vrijednost ne dodeljuje (parametar @ se jednostavno uklanja)

Zamijenjeno decimalnom vrijednošću broja pozicionih parametara

Zamijenjeno izlaznim statusom posljednjeg pokrenutog programskog kanala u prvom planu

(crtica)

Zamijenjeno trenutnim skupom vrijednosti zastavica postavljenim pomoću ugrađene naredbe set ili prilikom pokretanja same ljuske

Zamijenjeno identifikatorom procesa (P ID) ljuske

Zamijenjeno identifikatorom procesa (P ID) posljednje izvršene pozadinske (asinhrono izvršene) komande

Zamijenjeno imenom ljuske ili skripte za pokretanje. Ako bash pokreće se za izvršavanje batch datoteke, $0 je ime datoteke. Inače je ova vrijednost jednaka punoj putanji do ljuske

(podvući)

Zamijenjeno posljednjim argumentom prethodne naredbe koja je izvršena (ako je ovo parametar ili varijabla, tada se njegova vrijednost zamjenjuje)

Posebni parametri navedeni u gornjoj tabeli razlikuju se po tome što se na njih može samo referencirati; Ne možete im dodijeliti vrijednosti.

Varijabilna sa gledišta školjke, to je parametar označen imenom. Vrijednosti se dodjeljuju varijablama pomoću sljedećeg operatora:

$name=vrijednost

Gdje ime je ime varijable, i vrijednost— vrijednost koja mu je dodijeljena (može biti prazan niz). Ime varijable može se sastojati samo od brojeva i slova i ne može početi brojem. Vrijednost može biti bilo koji tekst. Ako vrijednost sadrži posebne znakove, mora se staviti u navodnike. Naravno, dodijeljena vrijednost ne sadrži ove navodnike. Ako je varijabla postavljena, može se ukloniti korištenjem ugrađene naredbe ljuske unset.

Skup svih postavljenih varijabli ljuske sa njihovim dodijeljenim vrijednostima naziva se okruženje ili okruženje ljuske. Možete ga pogledati pomoću naredbe set bez parametara (samo možda biste trebali organizirati cjevovod "set | manje"). Izlaz ove naredbe navodi sve varijable okruženja po abecednom redu. Da biste vidjeli vrijednost jedne određene varijable, možete umjesto naredbe set(u izlazu kojeg još uvijek možete pretraživati ​​i tražiti željenu varijablu) možete koristiti naredbu

$echo $name

(međutim, u ovom slučaju morate znati naziv varijable koja vas zanima).

Među varijablama koje ćete vidjeti u izlazu naredbe su set, postoje neke vrlo zanimljive varijable. Na primjer, obratite pažnju na RANDOM varijablu. Ako naredbu pokrenete nekoliko puta za redom

$ echo $RANDOM

svaki put ćete dobiti novu vrijednost. Činjenica je da ova varijabla vraća nasumični cijeli broj iz intervala 0 - 32,768.

5.6.2 Shell upiti

Jedna od veoma važnih varijabli ima ime PS1. Ova varijabla specificira tip pozivnice bash Izlazi kada se čeka na sljedeću naredbu koju korisnik unese. Podrazumevano, ova varijabla je postavljena na "\s-\v\$ ". Zapravo u bash Postoje četiri pozivnice koje se koriste u različitim situacijama. Varijabilna PS1 specificira tip prompta koji se izdaje kada ljuska čeka da se unese naredba. Sekundarni prompt specificiran promjenljivom PS2, pojavljuje se kada ljuska čeka da korisnik unese još neke podatke potrebne za nastavak izvršavanja naredbe ili programa. Zadana varijabla PS2 ima značenje " >" . Možda ste već vidjeli ovu prompt kada ste pokrenuli naredbu mačka za unos podataka sa tastature u datoteku. Drugi primjer je komanda ftp, nakon pokretanja kojeg poziv također poprima ovaj oblik.

Prompt za promjenjivu PS3, koji se koristi u komandi izaberite. Prompt za promjenjivu PS4, ispisuje se prije svake naredbe u tom trenutku bash prati tok izvršenja. Zadana vrijednost je " + ".

Ako želite, možete promijeniti vrstu varijabli PS1 I PS2. U ovom slučaju možete koristiti bilo koje simbole unesene sa tastature, kao i određeni broj specijalnih znakova, koji se prilikom generisanja prompt stringa dekodiraju u skladu sa tabelom. 5.3 (navodimo samo neke od njih, na primjer; za potpunu listu pogledajte man stranicu za uslužni program bash) .

Tabela 5.3. Posebni znakovi za generiranje pozivnice

Simbol

Njegovo značenje

Bip (ASCII kod 07)

Datum u formatu "Dan, mjesec, dan", na primjer, srijeda, oktobar, 17.

Ime hosta do prve tačke

Puno ime hosta

Trenutno vrijeme u 24-satnom formatu: HH:MM:SS (sati:minute:sekunde)

Trenutno vrijeme u 12-satnom formatu: HH:MM:SS

Trenutno vrijeme u 12-satnom formatu am/pm

Ime korisnika koji je pokrenuo shell

Puni naziv trenutnog radnog direktorija (počevši od root-a)

Trenutni radni direktorij (nije navedena staza)

Simbol # ako ljuska radi kao superkorisnik i simbol $ , ako je ljusku pokrenuo normalan korisnik.

\nnn

Znak koji ima oktalni kod nnn

Novi red (svod reda)

Ime ljuske

Trenutni broj tima

Obrnuta kosa crta

Početak niza znakova koji se ne ispisuju (ovaj znak se može koristiti za uključivanje niza terminalnih kontrolnih znakova u tekst opisa alata)

Kraj niza znakova koji se ne mogu ispisati

Serijski broj ove komande u istoriji komandi

Trenutni broj komande (serijski broj komande koja se izvršava u trenutnoj sesiji) može se razlikovati od broja ove komande u listi istorije komandi, pošto potonja uključuje komande koje su sačuvane u datoteci istorije komandi.

Jednom kada ljuska pročita vrijednost varijable koja definira nagoveštaj, mogu se izvršiti zamjene u skladu s pravilima za proširenje parametara, zamjene u nazivima naredbi i aritmetičkim izrazima, te podjelu riječi. Ova pravila će biti razmotrena u nastavku, u odjeljku. 5.7.

Na primjer, nakon izvršenja naredbe (pošto u nizu postoji razmak, navodnici su obavezni)

# PS1="[\u@\h \W]\$"

standardna prompt će prikazati uglastu zagradu, korisničko ime, simbol @ , ime računara, razmak, ime trenutnog direktorijuma (bez putanje), uglata zagrada i simbol $ (ako jednostavan korisnik radi u ljusci) ili # (ako ljuska radi kao root).

5.6.3 Varijabla PUT

Još jedna vrlo važna varijabla ima ime PUT. On specificira listu staza do direktorija u kojima bash traži datoteke (posebno datoteke sa komandama) u slučajevima kada puna putanja do datoteke nije navedena u komandnoj liniji. Pojedinačni direktoriji na ovoj listi su odvojeni dvotočkama. Zadana varijabla PUT uključuje direktorije /usr/local/bin, /bin, /usr/bin, /usr/X11R6/bin, tj. izgleda ovako:

/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:

Da biste dodali direktorij na ovu listu, morate pokrenuti sljedeću naredbu:

# PATH=$PATH:nova_putanja.

Kada vrši pretragu, ljuska pretražuje direktorijume redosledom kojim su navedeni u varijabli PATH.

Imajte na umu da možete uključiti trenutni direktorij u ovu listu dodavanjem tačke u varijablu PATH. Međutim, ovo se ne preporučuje iz sigurnosnih razloga: napadač može staviti naredbu u javni direktorij čije ime odgovara jednoj od naredbi koje često izvršava superkorisnik, ali izvodi potpuno različite radnje (posebno ako je trenutni direktorij na početku direktorija). lista puteva za pretragu).

5.6.4 Varijabla IFS

Ova varijabla specificira interni separator polja koji se koristi u operaciji dijeljenja riječi konverzija komandne linije koje izvodi ljuska prije pokretanja komandne linije za izvršenje. Zadana vrijednost ove varijable je "<Пробел><Символ_ новой_ строки>".

5.6.5 Trenutni i kućni imenici

Ime trenutnog direktorija je pohranjeno u varijablu okruženja (nazvanoj PWD), a vrijednost ove varijable se mijenja svaki put kada se program pokrene CD(kao i kada promijenite trenutni direktorij na bilo koji drugi način, na primjer, preko Midnight Commandera).

Slično tome, puno ime (i putanja) matičnog direktorija korisnika koji je pokrenuo proces pohranjuje se u varijablu HOME.

5.6.6 Tim izvoz

Kada ljuska pokrene program ili naredbu, ona im prosljeđuje neke varijable okruženja. Da bi varijabla okruženja bila proslijeđena procesu koji je pokrenut iz ljuske, mora se postaviti pomoću posebne naredbe izvoz, tj. umjesto toga

$name=vrijednost

treba to zapisati

$export ime=vrijednost

U ovom slučaju, svi programi pokrenuti iz shell-a (uključujući sekundarne instance same ljuske) imat će pristup ovako definiranim varijablama, tj. svoje vrijednosti mogu zvati imenom.

V. Kostromin (kos i rus-linux dot net) - 5.6. Parametri i varijable. Shell okruženje