M. Garrels. Vodič za bash. Varijable. Kako postaviti i onemogućiti lokalne, korisničke i sistemske varijable okruženja u Linuxu Kako pronaći gdje je zapisana varijabla ljuske

Vrste varijabli

Kao što možete vidjeti iz gornjih primjera, varijable ljuske obično se pišu velikim slovima. Bash pohranjuje popise varijabli dvije vrste:

Globalne varijable

Globalne varijable ili varijable okruženja dostupne su u svim školjkama. Za prikaz varijabli okoline možete koristiti naredbe okruženje ili printenv. Ove naredbe su dio paketa sh-usluge.

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=Zadano GNOME_DESKTOP_SESSION_ID=Zadano GTK_RC_FILES=/etc/gtk/gtkrc:/nethome/franky/.gtkrc -1.2-gnome2 GWMCOLOR=tamnozelena GWMTERM=xterm HISTFILESIZE=5000 history_control=ignoredups HISTSIZE=2000 HOME=/nethome/franky HOSTNAME=octarine.hq.garrels.be INPUTRC=/etc/inputrc IRCNAME=franky JAVA_HOME=/usr/java/ 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/lesspipe.sh %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= oktarine 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 NNTPPORT=119 NNTPSERVER=vijesti NPX_PLUGIN_PATH=/plugin/ns 4 dodatak/: / usr/lib/netscape/plugins OLDPWD=/nethome/franky OS=Linux PAGER=less 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=More input> PWD=/nethome/franky SESSION_MANAGER=local/octarine.hq.garrels.be:/tmp/.ICE-unix/22106 SHELL=/bin /bash SHELL_LOGIN=--prijava SHLVL=2 SSH_AGENT_PID=22161 SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass SSH_AUTH_SOCK=/tmp/ssh-XXmhQ4fC/agent.22106 START_WM=twm TERM=xterm TYPE=tip USERNAME= franky USER=franky _=/usr/bin/printenv VISUAL=vi WINDOWID=20971661 XAPPLRESDIR=/nethome/franky/app-defaults XAUTHORITY=/nethome/franky/.Xauthority XENVIRONMENT=/nethome/franky/.Xdefaults XFILESEARCHPATH=/usr /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=ništa XTERMID= XWINHOME=/usr/X11R6 X=X11R6 YACC=bison - g

Lokalne varijable

Lokalne varijable dostupne su samo u trenutnoj naredbenoj ljusci. Ako ugrađena naredba postaviti koristi se bez ikakvih parametara, vratit će popis svih varijabli (uključujući varijable vremena izvođenja) i funkcija. Upotrijebimo formatiranje i napravimo sortirani rezultat koji uzima u obzir lokalitet varijabli.

Ispod je diff datoteka stvorena usporedbom rezultata naredbi printenv I postaviti, nakon uklanjanja s popisa funkcija koje se također prikazuju naredbom postaviti:

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

Dijeljenje varijabli prema njihovom sadržaju

Osim što varijable dijelimo na lokalne i globalne, možemo ih podijeliti i u kategorije na temelju sadržaja koji je pohranjen u varijabli. S tim u vezi, varijable su podijeljene u četiri vrste:

  • String varijable
  • Cjelobrojne varijable
  • Varijable – konstante
  • Varijable – nizovi

O ovim vrstama varijabli raspravljat ćemo u 10. poglavlju. Sada ćemo koristiti vrijednosti cijelog broja i niza u našim varijablama.

Stvaranje varijabli

U varijablama se razlikuju velika i mala slova, a prema zadanim postavkama koriste se 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 imenima varijabli, ali imena koja počinju brojevima nisu dopuštena:

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

Za postavljanje varijable u naredbenu ljusku upotrijebite sljedeću naredbu

VARNAME="vrijednost"

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

Neki primjeri korištenja velikih i malih slova, brojeva i razmaka (poruka naredbe nije pronađena označava da postoji 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: naredba nije pronađena franky ~> MYVAR1 ="2" bash: MYVAR1: naredba nije pronađena franky ~> MYVAR1= "2" bash: 2: naredba nije pronađeno franky ~> poništi MYVAR1 first_name full_name franky ~> echo $MYVAR1 $first_name $full_name<--no output-->Franky ~>

Izvoz varijabli

Varijabla stvorena kao što je prikazano u gornjem primjeru dostupna je samo u trenutnoj naredbenoj ljusci. Ovo je lokalna varijabla: podređeni procesi trenutne ljuske neće biti svjesni ove varijable. Kako bismo proslijedili varijable podljusci, trebamo izvoz pomoću ugrađene naredbe izvoz. Varijable koje se izvoze nazivaju se varijablama okruženja. Dodjeljivanje vrijednosti i izvoz obično se obavlja u jednom koraku:

Izvezi VARNAME="vrijednost"

Podljuska može promijeniti varijable koje su naslijeđene od nadređenog procesa, ali promjene koje napravi podređeni proces ne utječu na nadređeni proces. To je prikazano 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 jeka pokazuje prazan red). Nakon što se izađe iz podljuske, varijabla full_name se izvozi u nadređenu ljusku - varijabla se može izvesti nakon što joj se dodijeli vrijednost. Zatim se pokreće nova podljuska koja prikazuje varijablu izvezenu iz nadređene ljuske. Varijabla je modificirana i druga vrijednost će biti pohranjena u njoj, ali u nadređenoj ljusci vrijednost ove varijable ostaje ista.

Rezervirane varijable

Bourneove rezervirane varijable ljuske

Bash koristi određene varijable ljuske baš kao Bourneova ljuska. U nekim slučajevima Bash varijabli dodjeljuje zadanu vrijednost. Donja tablica pokazuje Kratki opis ove jednostavne varijable ljuske:

Tablica 3.1. Bourneove rezervirane varijable ljuske

Naziv varijable Definicija

Popis direktorija, odvojenih dvotočkama, korištenih prilikom traženja staze pomoću ugrađene naredbe CD.

Početni imenik trenutni korisnik; koristi se prema zadanim postavkama u ugrađenoj naredbi CD. Vrijednost ove varijable također se koristi umjesto znaka tilde.

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

Ako je ovaj parametar postavljen na naziv datoteke, a MAILPATH nije postavljen, Bash će obavijestiti korisnika da je pošta primljena u navedenoj datoteci.

Popis naziva datoteka odvojen dvotočkom za koje naredbena ljuska povremeno provjerava ima li nove pošte.

Vrijednost zadnjeg argumenta u parametru koji obrađuje ugrađena naredba getopts.

Indeks zadnjeg argumenta parametra obrađenog ugrađenom naredbom getopts.

Popis direktorija odvojen dvotočkom u kojima ljuska traži naredbe.

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

Sekundarna brza linija. Zadana vrijednost je ""> "".

Bash rezervirane varijable

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

Tablica 3.2. Bash rezervirane varijable

Naziv varijable Definicija

Ova varijabla kontrolira način na koji ljuska komunicira s korisnikom i izvršava zadatke.

Cijeli put koji se koristi za pokretanje trenutne Bash instance.

Ako je ova varijabla postavljena u trenutku kada se Bash poziva za izvršavanje skripte, njezina se vrijednost koristi kao naziv datoteke za pokretanje koja se mora pročitati prije nego što se skripta izvrši.

Broj verzije trenutne instance Basha.

Varijabla je polje samo za čitanje čiji elementi polja pohranjuju informacije o verziji ovog primjera Bash.

Prilikom ispisa odabranih popisa koristi se ugrađena naredba Izaberi za određivanje širine terminala. Automatski se postavlja kada prima signal SIGWINCH.

Pokazivač u $(COMP_WORDS) na riječ koja pohranjuje trenutni položaj kursora.

Trenutačni naredbeni redak.

Pokazivač na trenutni položaj kursora u odnosu na početak trenutne naredbe.

Varijabla je niz koji se sastoji od pojedinačnih riječi koje se koriste u trenutnom naredbenom retku.

Varijabla je niz iz kojeg Bash čita moguće opcije dovršavanja nizova koje generira funkcija ljuske koju poziva usluga dizajnirana za programiranje dovršavanja

Varijabla je niz koji pohranjuje trenutno stanje stoga direktorija.

Numerički efektivni korisnički ID ID trenutnog korisnika.

Zadani uređivač koji se koristi kada je u ugrađenoj naredbi fc naveden je parametar -e

Popis sufiksa odvojen dvotočkom koje treba zanemariti prilikom izvođenja automatskog dovršavanja naziva datoteke.

Naziv funkcije ljuske koja se trenutno izvodi.

Popis uzoraka odvojen dvotočkom koji definiraju skup naziva datoteka koje treba zanemariti prilikom zamjene naziva datoteka.

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

Do tri znaka koji upravljaju zamjenom povijesti naredbi, brzom zamjenom i dijeljenjem dovršenih zamjena u žetone.

Broj trenutne naredbe u povijesti naredbi ili njezin indeks na popisu povijesti naredbi.

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

Naziv datoteke u kojoj je spremljena povijest naredbi. Zadana vrijednost: ~/.bash_history.

Zadani maksimalni broj redaka sadržanih u datoteci povijesti naredbi je 500.

Popis uzoraka odvojen dvotočkom koji određuju treba li naredbu spremiti na popise povijesti naredbi.

Zadani najveći broj naredbi koje se mogu pohraniti u popis povijesti naredbi je 500.

Sadrži naziv datoteke u istom formatu kao datoteka /etc/hosts, koji se može pročitati kada naredbena ljuska treba dovršiti naziv hosta.

Trenutno ime hosta.

Niz koji opisuje stroj na kojem se izvodi Bash.

Kontrolira što 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 navedene varijablama čija imena počinju znakovima LC_.

Ova varijabla nadjačava vrijednost varijable LANG i svih drugih varijabli koje počinju znakovima LC_ koji određuju kategoriju lokalizacije.

Ova varijabla specificira redoslijed sortiranja koji se koristi prilikom sortiranja naziva datoteka koji se podudaraju s uzorkom i određuje tumačenje raspona, klasa podudaranja i pravila usporedbe znakova za zamjenu naziva 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 uzoraka.

Ova varijabla specificira kategoriju lokalizacije koja se koristi za obradu nizova dvostruki navodnici, ispred kojeg stoji simbol $.

Ova varijabla specificira kategoriju lokalizacije za format broja.

Broj retka u skripti ili funkciji ljuske koja se trenutno izvodi.

Koristi se ugrađenom naredbom Izaberi za određivanje duljine stupca u kojem se prikazuju odabrane liste.

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

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

Prethodni radni imenik postavljen korištenjem ugrađene naredbe CD.

Ako je postavljen na 1, Bash prikazuje poruke o pogrešci koje generira ugrađena naredba getopts.

Opisivanje niza operacijski sustav, koji pokreće Bash.

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

Ako se ova varijabla doda okolini kada se pokrene bash, 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 upita (PS1).

Vrijednost ove varijable koristi se za naredbu Izaberi kao brzi niz. Zadano - ""#? ""

Vrijednost niza upita koji se izdaje prije naredbenog retka kada je opcija -x postavljena da omogući odjek naredbeni redak; zadano je ""+ "".

Trenutni radni direktorij postavljen ugrađenom naredbom CD.

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

Zadana varijabla u ugrađenoj naredbi čitati.

Ova varijabla označava broj sekundi koji je prošao od pokretanja naredbene ljuske.

Popis parametara postavljenih u komandnoj ljusci; odvojene dvotočkama.

Povećava se za jedan svaki put kada se pokrene nova instanca Basha.

Vrijednost ovog parametra koristi se kao niz koji navodi 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 tretira kao zadano vremensko ograničenje u ugrađenoj naredbi čitati. Kada se naredbena ljuska pokrene u interaktivnom načinu rada, ova se vrijednost tumači kao broj sekundi koje će ljuska čekati na unos nakon izdavanja početne linije upita. Ako se ne primi nikakav unos, nakon tog vremena Bash izlazi.

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

Pogledajte Bash man stranice ili dokumentaciju za više informacija. Neke su varijable samo za čitanje, neke se postavljaju automatski, a neke postaju besmislene kada se postave na nešto što nije njihova zadana vrijednost.

Posebni parametri

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

Tablica 3.3. Bash posebne varijable

Simbol Definicija

Vraća položajne 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 IFS varijable.

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

Vraća broj pozicijskih parametara navedenih kao decimalna vrijednost.

Vraća povratni kod zadnjeg cjevovoda koji je izvršen u prvom planu.

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

Vraća ID procesa ljuske.

Vraća ID procesa posljednje naredbe izvršene u pozadinskom (asinkronom) načinu rada.

Vraća naziv ljuske ili skripte.

Vrijednost parametra "podvlaka" postavljena je kada se naredbena ljuska pokrene i sadrži puno ime ljuska ili skripta koja se izvršava onako kako je proslijeđena u popisu argumenata. Vrijednost će tada biti zamijenjena zadnjim argumentom prethodne naredbe. Ovaj parametar također navodi punu stazu do svake naredbe izvršene i postavljene u okruženje koje je eksportirano u tu naredbu. Kada se pošta provjerava, ovaj parametar sadrži naziv datoteke pošte.

Pozicijski parametri su riječi koje slijede iza imena skripte ljuske. Pohranjeni su u varijablama $1, $2, $3 i tako dalje. Varijable se prema potrebi dodaju u interni niz. Varijabla $# navodi ukupan broj parametara, kao što je prikazano u sljedećoj jednostavnoj skripti:

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

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

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

Za više informacija o korištenju ovih parametara pogledajte Poglavlje 7, Uvjetni iskazi i odjeljak o ugrađenoj naredbi shift.

Neki primjeri drugih posebnih parametara:

Franky ~> grep rječnik /usr/share/dict/words rječnik franky ~> echo $_ /usr/share/dict/words franky ~> echo $$ 10662 franky ~> mozilla & 11064 franky ~> echo $! 11064 franky ~> echo $0 bash franky ~> echo $? 0 franky ~> ls doesnotexist ls: doesnotexist: Nema takve datoteke ili direktorija 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 varijabli! postojat će identifikator procesa pozadinski posao. Radna naredbena ljuska je udarac. Ako je napravljena pogreška, u varijabli? postojat će povratni kod različit od 0 (nula).

Proširenje opsega primjene skripti koje imaju varijable

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

#!/bin/bash # Ova skripta pravi sigurnosnu kopiju mog matičnog direktorija. cd /home # Ovo stvara arhivu tar cf /var/tmp/home_franky.tar franky > /dev/null 2>&1 # Prvo uklonite staru bzip2 datoteku. Pogreške preusmjeravanja jer ovo generira neke ako arhiva # ne postoji. Zatim stvorite novu komprimiranu datoteku. rm /var/tmp/home_franky.tar.bz2 2> /dev/null bzip2 /var/tmp/home_franky.tar # Kopirajte datoteku na drugo računalo - imamo ssh ključeve kako bi ovo radilo bez intervencije. scp /var/tmp/home_franky.tar.bz2 bordeaux:/opt/backup/franky > /dev/null 2>&1 # Stvorite vremensku oznaku u datoteci dnevnika. datum >> /home/franky/log/home_backup.log echo sigurnosna kopija uspjela >> /home/franky/log/home_backup.log

Prije svega, veća je vjerojatnost da ćete pogriješiti ako ručno navedete datoteke i direktorije svaki put kada ih trebate. Drugo, pretpostavimo da korisnik frankyželi proslijediti ovu skriptu korisniku Pjesma, zatim prije Pjesma moći će koristiti skriptu za Rezervni primjerak svoj kućni imenik, morat će dosta uređivati. Ista stvar će se dogoditi ako korisnik frankyće htjeti koristiti ovu skriptu za sigurnosno kopiranje drugih direktorija. Za proširenje opsega koristite varijable za sve datoteke, direktorije, korisnička imena, nazive poslužitelja itd. Tada vrijednost trebate promijeniti samo jednom i ne morate prolaziti kroz cijelu skriptu da pronađete sva mjesta na kojima se pojavljuje određeni parametar. Primjer:

#!/bin/bash # Ova skripta pravi sigurnosnu kopiju mog matičnog direktorija. # Promijenite vrijednosti varijabli kako 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 stvara arhivu tar cf $TARFILE $BACKUPFILES > /dev/null 2>&1 # Prvo uklonite staru bzip2 datoteku. Pogreške preusmjeravanja jer ovo generira neke ako arhiva # ne postoji. Zatim stvorite novu komprimiranu datoteku. rm $BZIPFILE 2> /dev/null bzip2 $TARFILE # Kopirajte datoteku na drugo računalo - imamo ssh ključeve kako bi ovo radilo bez intervencije. scp $BZIPFILE $SERVER:$REMOTEDIR > /dev/null 2>&1 # Stvorite vremensku oznaku u datoteci dnevnika. datum >> $LOGFILE sigurnosna kopija eha uspjela >> $LOGFILE

Tijekom rada s poslužiteljem, ljuska kompilira veliku količinu informacija koje određuju njegovo ponašanje i pristup resursima. Neke od ovih opcija nalaze se u postavkama ljuske, druge su određene korisničkim unosom.

Jedan od načina na koji školjka prati te informacije je kroz okolinu. Okolina je područje koje sadrži varijable koje definiraju sustav koje ljuska izgrađuje svaki put kada se sesija pokrene.

Ovaj vodič objašnjava kako komunicirati s okolinom i čitati ili postaviti varijable okoline i ljuske interaktivno i pomoću konfiguracijske datoteke. Sve radnje izvode se na Ubuntu 12.04 VPS, ali bilo kojem modernom Linux distribucija treba raditi na isti način.

Kako funkcionira okruženje i njegove varijable

Svaki put kada se aktivira sesija ljuske, pokreće se proces za prikupljanje i kompajliranje informacija koje bi trebale biti dostupne ljusci i njenim podređenim procesima. Ljuska dobiva te podatke iz mnogo različitih datoteka i postavki na sustavu.

Općenito, okolina pruža mogućnost prijenosa koja prikuplja i postavlja potrebne postavke za proces ljuske, koji ih zauzvrat prosljeđuje svojim podređenim procesima.

Okolina ima oblik niza koji sadrži parove ključ-vrijednost. Višestruke vrijednosti obično su odvojene 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 okoline su varijable koje su definirane za trenutnu ljusku i nasljeđuju ih sve podređene ljuske ili procesi. Varijable okoline koriste se za prijenos informacija procesima pokrenutim iz ljuske.

Varijable ljuske su varijable koje su sadržane isključivo u ljusci u kojoj su postavljene ili definirane. Često se koriste za praćenje trenutnih podataka (na primjer, trenutni radni imenik).

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

Ispis varijabli ljuske i okruženja

Svaka sesija prati vlastitu ljusku i varijable okoline. Postoji nekoliko načina da ih izbacite.

Da biste vidjeli popis svih varijabli okoline, koristite naredbe env ili printenv. Prema zadanim postavkama oni će ispisati točno isti rezultat:

printenv
SHELL=/bin/bash
POJAM=xterm
KORISNIK=demouser
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/demouser
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/igre
PWD=/home/demouser
LANG=en_US.UTF-8
SHLVL=1
HOME=/home/demouser
LOGNAME=demoser
LESSOPEN=| /usr/bin/lesspipe %s
LESSCLOSE=/usr/bin/lesspipe %s %s
_=/usr/bin/printenv

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

printenv LJUSKA
/bin/bash

Naredba env omogućuje promjenu okruženja u kojem se programi izvode prosljeđivanjem skupa definicija varijabli naredbi, otprilike ovako:

env VAR1="blahblah" naredba_za_pokretanje opcija_naredbe

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

Kao što možete vidjeti u izlazu naredbe printenv, mnoge varijable okoline stvorene su pomoću sistemske datoteke i procese bez intervencije korisnika.

Ali kako vidite varijable ljuske?

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

postaviti
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=()
. . .

U pravilu je ovaj popis prilično dugačak. Da biste ga prikazali u prikladnijem obliku, otvorite ga pomoću programa za dojavljivanje:

Ovaj popis sadrži ogroman broj dodatne informacije, koji je u ovaj trenutak nije potrebno (na primjer, neke bash funkcije).

Da biste "očistili" izlaz, trebate 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 usporediti ovaj izlaz s izlazom naredbi env/printenv i pokušati ispisati samo varijable ljuske, ali takav popis neće biti idealan jer je izlaz ovih naredbi drugačiji:

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

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

Međutim, ovo je sjajan način za pregled okruženja i varijabli ljuske postavljenih u određenoj sesiji.

Takve se varijable koriste u razne svrhe. Oni pružaju alternativni način postavljanja trajnih vrijednosti za sesiju između procesa, eliminirajući potrebu za izmjenama datoteke.

Osnovno okruženje i varijable ljuske

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

Ispod je popis glavnih varijabli okoline:

  • LJUSKA: Opisuje ljusku koja tumači unesene naredbe. U većini slučajeva, bash je instaliran prema zadanim postavkama, ali ova se vrijednost može promijeniti ako je potrebno.
  • TERMIN: 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 brinuti o tome.
  • KORISNIK: trenutni korisnik.
  • P.W.D.: trenutni radni imenik.
  • OLDPWD: prethodni radni imenik. Ljuska 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 vrste datoteka).
  • POŠTA: Put do trenutnog poštanskog sandučića korisnika.
  • STAZA: Popis direktorija kojima sustav pristupa prilikom izvršavanja naredbi. Kada korisnik pokrene naredbu, sustav provjerava te direktorije navedenim redoslijedom za izvršnu datoteku.
  • JEZIK: Trenutačne postavke jezika i lokalizacije, uključujući kodiranje znakova.
  • DOM: matični imenik trenutnog korisnika.
  • _ : Zadnja izvršena naredba.

Nakon pregleda popisa varijabli okoline, pregledajte popis varijabli ljuske:

  • BAŠOPTI: Popis opcija koje se koriste prilikom izvođenja basha. Ovo se može koristiti za provjeru radi li okruženje prema očekivanjima.
  • BASH_VERZIJA: Pokretna verzija basha u obliku čitljivom za ljude.
  • BASH_VERSINFO: Strojno čitljiva verzija basha.
  • KOLONE: Određuje širinu izlaza u stupcima.
  • DIRSTACK: Hrpa direktorija dostupnih naredbama pushd i popd.
  • HISTFILESIZE: Maksimalni broj redaka sadržanih u datoteci povijesti naredbi.
  • HISTSIZE: Broj naredbi koje treba zapamtiti na popisu povijesti.
  • HOSTNAME: Trenutačno ime hosta.
  • IFS: Interni razdjelnik polja za unos u naredbenom retku. Zadani je prostor.
  • PS1: Definira početni redak odzivnika - vrstu naredbenog retka prilikom pokretanja sesije ljuske. Varijabla PS2 postavlja sekundarnu liniju upita ako se naredba proteže u više redaka.
  • SHELLOPTS: Opcije ljuske koje se mogu postaviti pomoću skupa.
  • UID: Jedinstveni identifikator trenutnog korisnika.

Postavljanje varijabli ljuske i okoline

Dolje je nekoliko primjera koji pokazuju razliku između varijabli ljuske i okoline i objašnjavaju sintaksu za postavljanje ovih varijabli.

Stvaranje varijabli ljuske

Prvo trebate postaviti varijable ljuske za trenutnu sesiju. To se radi vrlo jednostavno, sve što trebate učiniti je navesti naziv i vrijednost. Kao što je već spomenuto, za pisanje naziva takvih varijabli koriste se velika slova.

TEST_VAR="Zdravo svijete!"

Ovaj primjer koristi navodnike jer vrijednost sadrži razmake. Štoviše, ovdje trebate koristiti jednostruke navodnike jer je uskličnik poseban znak u bash ljusci koji pristupa povijesti naredbi osim ako nije escapediran ili zatvoren u jednostruke navodnike.

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

Da biste to provjerili, upotrijebite naredbu grep na rezultatu naredbe set:

postaviti | grep TEST_VAR
TEST_VAR="Zdravo svijete!"

Također se možete uvjeriti da ova varijabla nije varijabla okruženja pokretanjem grepa na rezultatu naredbe printenv:

printenv | grep TEST_VAR

Ova radnja neće dati nikakav rezultat.

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

echo $TEST_VAR
Pozdrav svijete!

Kao što vidite, za pristup vrijednosti varijable morate koristiti simbol $.

Opet, rezultirajuća varijabla ne bi se trebala proslijediti niti jednom podređenom procesu. Da biste to testirali, unutar svoje trenutne ljuske implementirajte novu bash ljusku:

udarac
echo $TEST_VAR

Ako proširite dječju ljusku i pokušate otvoriti sadržaj varijable, ništa se neće ispisati. To znači da sve radi ispravno.

Za povratak na izvornu ljusku upišite exit:

Stvaranje varijabli okruženja

Sada pokušajte pretvoriti varijablu ljuske u varijablu okoline. To se postiže izvozom varijable. Naredba koja izvodi izvoz je tako imenovana.

Ova naredba pretvara varijablu ljuske u varijablu okoline. Kako biste provjerili je li sve učinjeno ispravno, možete ponovno pogledati popis varijabli okoline:

printenv | grep TEST_VAR
TEST_VAR=Zdravo svijete!

Sada je ova varijabla prikazana na ovom popisu. Također možete ponovno proširiti dječju ljusku:

udarac
echo $TEST_VAR
Pozdrav svijete!

Sjajno! Dječja ljuska primila je varijablu iz originalne ljuske. Pokušajte izvesti još jednu varijablu prije nego napustite podređenu ljusku.

izvoz NEW_VAR="Testiranje izvoza"

Provjerite je li varijabla izvezena:

printenv | grep NEW_VAR
NEW_VAR=Testiranje izvoza

Sada se vratite na svoju izvornu ljusku:

Provjerite može li se ova varijabla otvoriti:

Rezultat se ne vraća

To se događa jer se varijable okruženja prosljeđuju samo procesima podređenim. Ne postoji ugrađeni način za postavljanje varijabli okruženja nadređene ljuske. U većini slučajeva to sprječava da programi ometaju radnu okolinu iz koje su pokrenuti.

Varijabla NEW_VAR postavljena je kao varijabla okruženja ljuske dijete. Ova varijabla vrijedi za ovu ljusku i njezine podređene ljuske i procese. Nakon što se korisnik vratio u originalnu ljusku, ovo okruženje je uništeno.

Premještanje i ponovno postavljanje varijabli

Varijabla TEST_VAR još uvijek je varijabla okoline. Da ponovno postane varijabla ljuske, upišite:

izvoz -n TEST_VAR

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

printenv | grep TEST_VAR

Ovo je opet varijabla ljuske:

postaviti | grep TEST_VAR
TEST_VAR="Zdravo svijete!"

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

Uvjerite se da takva varijabla više ne postoji:

Nije ispisan nijedan rezultat jer je varijabla poništena.

Automatsko postavljanje varijabli okoline

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

Ovo je malo kompliciranije nego što se čini na prvi pogled, budući da bash ljuska čita mnogo konfiguracijskih datoteka.

Vrste Shell sesija

Bash ljuska čita različite konfiguracijske datoteke ovisno o tome kako je sesija pokrenuta. Prve dvije vrste sesija koje definiraju ljusku su početak i dijete.

Starter ili početna ljuska(login shell) je sesija ljuske koja se otvara nakon autorizacije korisnika. Ako se korisnik prijavi na terminal ili se autentificira koristeći SSH, 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 ljuska), ova će sesija biti podružnica (ne-prijaviti se ljuska). Za otvaranje ove sesije ne morate proći kroz proceduru autorizacije.

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

Interaktivna sesija shell (interaktivna ljuska) je sesija vezana za terminal. Neinteraktivna sesija ljuske je sesija koja nije povezana s terminalom.

Dakle, sesije ljuske klasificiraju se prema sljedećim aspektima: početak-dijete, interaktivni-neinteraktivni.

Normalna sesija otvorena pomoću SSH-a obično je interaktivna početna sesija. Skripta pokrenuta putem naredbenog retka obično se izvodi u neinteraktivnoj podređenoj sesiji. Terminalna sesija je različita kombinacija ova dva svojstva.

Klasificiranjem sesije kao početne sesije ili podređene sesije, sustav razumije koje datoteke treba pročitati da bi se inicijalizirala sesija ljuske.

Dakle, prvo početna sesija dobiva konfiguracije iz datoteke /etc/profile. 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 korisničku ~/.bash.rc datoteku za implementaciju okruženja.

Neinteraktivne ljuske čitaju varijablu okruženja BASH_ENV i navedenu datoteku za stvaranje novog okruženja.

Kako postaviti varijable okoline

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

Ovo čini sustav vrlo fleksibilnim, što je korisno u određenim situacijama kada trebate postaviti različite parametre za početnu i podređenu ljusku. Međutim, te ljuske općenito koriste iste postavke.

Srećom, većina distribucija Linuxa ukazuje na konfiguracijsku datoteku podređene ljuske kao izvor konfiguracija ljuske za pokretanje. To znači da možete definirati varijable okoline za obje sesije u konfiguracijskim datotekama dječje ljuske.

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

Otvori ovu datoteku:

Najvjerojatnije već sadrži neke podatke. Većina ovdje postavljenih vrijednosti su bash opcije i nemaju nikakve veze s varijablama okruženja. Varijable u ovoj datoteci postavljene su na točno isti način kao u naredbenom retku:

izvoz VARNAME=vrijednost

Nakon unosa svih potrebnih varijabli, zatvorite datoteku. Sljedeći put kada pokrenete sesiju ljuske, ovdje postavljene varijable bit će pročitane i proslijeđene okolini ljuske. Da biste rekli trenutnoj sesiji da pročita datu datoteku, unesite:

izvor ~/.bashrc

Za postavljanje varijabli za cijeli sustav dodajte ih u /etc/profile, /etc/bash.bashrc ili /etc/environment.

Rezultati

Varijable ljuske i okruženja uvijek su prisutne u svim sesijama ljuske, pa je posebno korisno znati kako s njima raditi. Mogu se koristiti za prosljeđivanje konfiguracija nadređenog procesa podređenim procesima, kao i za konfiguriranje postavki izvan datoteka.

To pruža brojne prednosti u određenim situacijama. Na primjer, neki mehanizmi postavljanja oslanjaju se na varijable okoline 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 vanjskih osoba.

Postoje mnoge druge uobičajene situacije u kojima ćete možda trebati očitati varijable ili promijeniti okruženje sustava. Alati i tehnike opisani u ovom vodiču pružaju izvrsnu osnovu za razvoj vaših vještina u radu s varijablama i njihovom ispravnom korištenju.

Oznake: ,

Varijable okruženja u Linuxu su posebne varijable koje definira ljuska i koriste ih programi tijekom izvođenja. Mogu se definirati od strane sustava i korisnika. Varijable okoline sustava Linux definira sustav i koriste ih programi na razini sustava.

Na primjer, naredba PWD koristi sistemsku varijablu za zadržavanje prethodnog radnog direktorija. 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 ljuski.

Šire gledano, varijabla okoline može biti tri vrste:

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. Ne pohranjuju se ni u kakve datoteke, već se stvaraju i brišu posebnim naredbama.

2. Prilagođene varijable ljuske

Ove varijable ljuske u Linuxu definirane su za određenog korisnika i učitavaju se svaki put kada se korisnik prijavi pomoću lokalnog terminala ili se spoji na daljinu. Takve se varijable obično pohranjuju u konfiguracijske datoteke: .bashrc, .bash_profile, .bash_login, .profile ili druge datoteke koje se nalaze u korisničkom direktoriju.

3. Varijable okruženja sustava

Ove varijable dostupne su u cijelom sustavu, za sve korisnike. Učitavaju se pri pokretanju sustava iz konfiguracijskih datoteka sustava: /etc/environment, /etc/profile, /etc/profile.d/ /etc/bash.bashrc.

Konfiguracijske datoteke varijable okruženja Linux

Ovdje ćemo na brzinu pogledati razne gore navedene konfiguracijske datoteke koje se koriste za konfiguriranje varijabli okoline za cijeli sustav ili određenog korisnika.

.bashrc

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

.bash_profil

Ove varijable stupaju na snagu svaki put kada se korisnik spoji na daljinu putem SSH-a. Ako ova datoteka nedostaje, sustav će tražiti .bash_login ili .profile.

/etc/environment

Ova datoteka služi za kreiranje, uređivanje i brisanje svih varijabli okruženja na razini sustava. Varijable okruženja stvorene u ovoj datoteci dostupne su za cijeli sustav, za svakog korisnika, pa čak i pri povezivanju na daljinu.

/etc/bash.bashrc

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

/etc/profil

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

Sve varijable okoline Linuxa stvorene korištenjem ovih datoteka mogu se ukloniti jednostavnim brisanjem odatle. Tek nakon svake promjene potrebno se ili odjaviti i ponovno prijaviti ili pokrenuti ovu naredbu:

naziv izvorne datoteke

Dodavanje korisničkih i sistemskih varijabli okruženja u Linuxu

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

var=vrijednost
$ izvoz var=vrijednost

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

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

1. Korištenje env

Prema zadanim postavkama, možete koristiti env za pregled svih postavljenih varijabli okoline. Ali s opcijom -i, omogućuje vam da privremeno uklonite sve varijable ljuske i izvršite naredbu bez varijabli.

env –i naredba

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

Ova naredba će pokrenuti ljusku bez ikakvih varijabli okoline:

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

2. Korištenje nepostavljeno

Ovo je još jedan način za uklanjanje varijabli okoline Linuxa. Unset uklanja varijablu po imenu do kraja trenutne sesije:

poništi naziv_varijable

3. Postavite vrijednost varijable na ""

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

Napomena: Pomoću ovih metoda možete promijeniti vrijednosti sistemskih ili korisničkih varijabli, ali one će biti relevantne samo za trenutnu sesiju.

Stvaranje varijabli okruženja korisnika i sustava

U ovom odjeljku pogledat ćemo kako postaviti i izbrisati sistemske i korisničke varijable ne samo za trenutnu sesiju, već tako da se učinak zadrži i 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 izbrisana:

VAR1="Izgubljeno"
$ echo $VAR1
$unset VAR1
$ echo $VAR1

Drugi način stvaranja varijable je pomoću naredbe izvoza. Uklonimo ga dodjeljivanjem prazne vrijednosti:

izvoz VAR="Losst"
$ echo $VAR
$VAR=
$ echo $VAR

Kreirajmo sada varijablu VAR2 i dajmo joj vrijednost. Zatim privremeno uklonite sve lokalne varijable pokretanjem env -i. Pokrenut će ljusku bez ikakvih varijabli. Nakon ulaska u exit, sve varijable će biti vraćene.

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

Postavljanje i uklanjanje korisničkih varijabli

Uredite .bashrc datoteku u svom početnom direktoriju dodavanjem naredbe za izvoz za izvoz željene varijable. Zatim pokrenite izvornu naredbu za primjenu promjena. Kreirajmo, na primjer, CD varijablu:

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

izvozni CD="Ovo je izgubljeni dom"

Sada ostaje ažurirati konfiguraciju:

izvor.bashrc
$echo $CD

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

Dodajmo sada varijablu okoline koristeći .bash_profile. Ova će varijabla, kao što već znate, biti dostupna samo tijekom daljinske prijave:

vi .bash_profil

Dodajte redak:

export VAR2="Ovo je izgubljeni dom"

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

izvor.bash_profil
$ echo $VAR2

Varijabla nije dostupna jer ste stvorili lokalnu sesiju terminala, sada se povežite putem ssh-a:

ssh korisnik@localhost
$ echo $VAR2

Ovu varijablu okruženja možete izbrisati na isti način kao u prethodnom slučaju brisanjem iz datoteke.

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

Postavljanje i uklanjanje varijabli okruženja sustava

Stvorimo varijablu dostupnu svim korisnicima u svim sesijama terminala osim udaljenih tako da je dodamo u /etc/bash.profile:

vi /etc/bash.profile

export VAR="Ovo je varijabla za cijeli sustav"

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 varijablu okruženja želite učiniti dostupnom svim korisnicima koji se daljinski spajaju na ovaj stroj, uredite datoteku /etc/profile:

export VAR1="Ovo je varijabla za cijeli sustav samo za udaljene sesije"

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

izvor /etc/profil
$ echo $VAR1

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

vi /etc/environment

export VAR12="Dostupan sam posvuda"

Provjeravamo:

izvor /etc/environment
$ echo $VAR12
$sudo su
$ echo $VAR12
$ izlaz
$ssh lokalni host
$ echo $VAR12

2.2. Varijable okoline

Operativni sustav podržava posebnu vrstu resursa tzv Varijable okoline (varijable okoline). Ove varijable su par IME - VRIJEDNOST . Ime može započeti slovom i sastojati se od slova, brojeva i podvlaka.

Za zamjenu vrijednosti varijable u naredbenom retku ispred naziva varijable stavite znak $:

$ echo $USER gost

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

Za postavljanje vrijednosti varijable upotrijebite operator dodjele (u slučaju Bourneovih ljuski):

$TEST=test

ili ugrađeni operator skupa (u slučaju onih sličnih C):

$ postavi TEST=test

Naredba set, bez argumenata, ispisuje 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/guest HOSTNAME=myhost HOSTTYPE=i686 IFS =$" \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/ lesspipe.sh %s" LINES=65 LOGNAME=gost ....

Varijable mogu biti lokalne za određeni proces ili globalne za sesiju. Možete postaviti lokalne vrijednosti za varijable prethodeći im pozivom naredbi:

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

Možete procijeniti sadržaj skupa varijabli za sesiju pozivanjem ugrađene naredbe tumača env u slučaju tumača sličnih Bourneu (sh, ksh, bash, zsh, pdksh...), i printenv u slučaju tumača C-Shell klonova (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=/usr/lib/qt-3.3/include SSH_TTY =/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=guest QTLIB=/usr/lib/qt-3.3/lib CVS_RSH=ssh SSH_CONNECTION=172.16.0.9 50487 172.16.2.9 22 LESSOPEN=|/usr /bin/lesspipe.sh %s G_BROKEN_FILENAMES=1 _=/bin/env

Skupovi naredbi Ljuska mogu se prevesti u naredbene datoteke koje se nazivaju skripte, gdje prvi redak u posebnoj vrsti komentara specificira tumač naredbi za izvršavanje ovog skupa. Na primjer, stvorimo 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 naredbenog retka prosljeđujući ga kao parametar tumaču naredbi:

$sh test TEST varijabla:

Varijablu možete napraviti globalnom pomoću naredbe export (Bourne) ili setenv (C-SHell):

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

Možete postaviti lokalne vrijednosti varijabli za izvršavanje zadanog programa tako da im prethodite pozivom naredbi:

$ TEST=test2 sh test TEST varijabla: test2

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

Pojam parametra u ljusci udarac sličan konceptu varijable u konvencionalnim programskim jezicima. Naziv parametra (ili identifikator) može biti riječ koja se sastoji od abecednih znakova, brojeva i podvlaka (samo prvi znak riječi ne može biti broj), broj ili jedan od sljedećih posebnih znakova: * , @ , # , ? , - (crtica), $ , ! , 0 , _ (podcrtavanje).

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 $ prije njegovog imena. Da, tim

$ echo ime

prikazat će riječ na ekranu Ime, i tim

$echo $name

vratit će vrijednost varijable name (ako je postavljena, naravno).

5.6.1 Raznolikost parametara

Parametri su podijeljeni u tri klase: položajni parametri, posebni parametri(čija su imena upravo navedeni posebni znakovi) i varijable ljuske.

Imena (identifikatori) položajni parametri sastoji se od jedne ili više znamenki (ne jedne nule). Vrijednosti pozicijskih parametara su argumenti koji su dati kada je ljuska pokrenuta (prvi argument je vrijednost pozicijskog parametra 1, itd.). Možete promijeniti vrijednost pozicijskog parametra pomoću ugrađene naredbe postaviti. Vrijednosti ovih parametara također se mijenjaju dok ljuska izvršava jednu od funkcija (o tome će biti riječi u nastavku, u odjeljak 5.8).

Posebni parametri su uzorci, čija se zamjena (supstitucija) provodi na sljedeći način.

Tablica 5.2. Posebni parametri.

Parametar

Pravila zamjene

Zamijenjeno položajnim parametrima, počevši od prvog. Ako se zamjena vrši unutar dvostrukih navodnika, tada se ovaj parametar zamjenjuje jednom riječju sastavljenom od svih pozicijskih parametara, odvojenih 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 prazno ili nema postavljenu vrijednost, parametri su odvojeni razmacima

Zamijenjeno položajnim parametrima, počevši od prvog. Ako se zamjena vrši unutar dvostrukih navodnika, tada se svaki parametar zamjenjuje zasebnom riječi. Dakle, `` $@"" je ekvivalentno ""$1"" ""$2"" ... Ako nema pozicijskih parametara, tada se ne dodjeljuje vrijednost (parametar @ jednostavno se uklanja)

Zamijenjeno decimalnom vrijednošću broja pozicijskih parametara

Zamijenjeno izlaznim statusom posljednjeg programa u prvom planu koji se izvodi

(crtica)

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

Zamijenjen identifikatorom procesa (P ID) ljuske

Zamijenjen identifikatorom procesa (P ID) posljednje izvršene pozadinske (asinkrono izvršene) naredbe

Zamijenjeno nazivom ljuske ili skripte za pokretanje. Ako udarac pokreće se za izvođenje paketne datoteke, $0 je naziv datoteke. Inače je ova vrijednost jednaka punom putu do ljuske

(naglasiti)

Zamijenjen zadnjim argumentom prethodne izvršene naredbe (ako je ovo parametar ili varijabla, tada se zamjenjuje njegova vrijednost)

Posebni parametri navedeni u gornjoj tablici razlikuju se po tome što se mogu samo referencirati; Ne možete im dodijeliti vrijednosti.

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

$name=vrijednost

Gdje Ime je naziv varijable, i vrijednost— vrijednost koja mu je dodijeljena (može biti prazan niz). Naziv varijable može se sastojati samo od brojeva i slova i ne može započeti brojem. Vrijednost može biti bilo koji tekst. Ako vrijednost sadrži posebne znakove, mora biti unutar navodnika. Dodijeljena vrijednost, naravno, ne sadrži ove navodnike. Ako je varijabla postavljena, može se ukloniti pomoću naredbe ugrađene u ljusku nepostavljeno.

Skup svih postavljenih varijabli ljuske s njihovim dodijeljenim vrijednostima naziva se okruženje ili okruženje ljuske. Možete ga vidjeti pomoću naredbe postaviti bez parametara (samo bi možda trebao organizirati cjevovod "postavi | manje"). Izlaz ove naredbe navodi sve varijable okruženja abecednim redom. Da biste vidjeli vrijednost jedne određene varijable, možete umjesto naredbe postaviti(u čijem izlazu još uvijek možete tražiti i tražiti željenu varijablu) možete koristiti naredbu

$echo $name

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

Među varijablama koje ćete vidjeti u izlazu naredbe su postaviti, postoje neke vrlo zanimljive varijable. Na primjer, obratite pozornost na varijablu RANDOM. Ako naredbu pokrenete nekoliko puta zaredom

$ echo $SLUČAJNO

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 promptovi

Jedna od vrlo važnih varijabli ima ime PS1. Ova varijabla specificira vrstu pozivnice koja udarac Izlazi kada se čeka na sljedeću naredbu koju treba unijeti korisnik. Prema zadanim postavkama, ova varijabla je postavljena na "\s-\v\$ ". Zapravo u udarac Postoje četiri pozivnice koje se koriste u različitim situacijama. Varijabilna PS1 specificira tip prompta koji se izdaje kada ljuska čeka na unos naredbe. Sekundarni upit određen varijablom 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 ovaj upit kada ste pokrenuli naredbu mačka za unos podataka s tipkovnice u datoteku. Drugi primjer je naredba ftp, nakon čijeg pokretanja poziv također ima ovaj oblik.

Promjenljivi upit PS3, koristi se u naredbi Izaberi. Promjenljivi upit PS4, ispisuje se prije svake naredbe u tom trenutku udarac prati tijek izvršenja. Zadana vrijednost je " + ".

Ako želite, možete promijeniti vrstu varijabli PS1 I PS2. U tom slučaju možete koristiti bilo koje simbole unesene s tipkovnice, kao i određeni broj posebnih znakova, koji se prilikom generiranja niza upita dekodiraju u skladu s tablicom. 5.3 (navodimo samo neke od njih, na primjer; za potpuni popis pogledajte man stranicu za pomoćni program udarac) .

Tablica 5.3. Posebni znakovi za generiranje pozivnice

Simbol

Njegovo značenje

Zvučni signal (ASCII kod 07)

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

Naziv glavnog računala do prve točke

Puni naziv 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 ljusku

Puno ime trenutnog radnog direktorija (počevši od korijena)

Trenutačni radni direktorij (put nije naveden)

Simbol # ako se ljuska izvodi kao superkorisnik, i simbol $ , ako je ljusku pokrenuo običan korisnik.

\nnn

Znak koji ima oktalni kod nnn

Novi redak (pokretanje retka)

Ime školjke

Trenutni broj ekipe

Obrnuta kosa crta

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

Kraj niza znakova koji se ne mogu ispisati

Serijski broj ove naredbe u povijesti naredbi

Broj trenutne naredbe (serijski broj naredbe koja se izvršava unutar trenutne sesije) može se razlikovati od broja ove naredbe u popisu povijesti naredbi, budući da potonji uključuje naredbe koje su spremljene u datoteci povijesti naredbi.

Nakon što je ljuska pročitala vrijednost varijable koja definira savjet, zamjene se mogu izvršiti prema pravilima za proširenje parametara, zamjene u imenima naredbi i aritmetičkim izrazima, te dijeljenje riječi. O tim će se pravilima raspravljati u nastavku, u odjeljku. 5.7.

Na primjer, nakon izvršenja naredbe (budući da postoji razmak u nizu, navodnici su obavezni)

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

standardni prompt prikazat će uglastu zagradu, korisničko ime, simbol @ , naziv računala, razmak, naziv trenutnog direktorija (bez puta), zatvorena uglata zagrada i simbol $ (ako jednostavan korisnik radi u ljusci) ili # (ako se ljuska izvodi kao root).

5.6.3 Varijabla STAZA

Još jedna vrlo važna varijabla ima ime STAZA. Određuje popis staza do direktorija u kojima udarac traži datoteke (osobito datoteke s naredbama) u slučajevima kada puna staza do datoteke nije navedena u naredbenom retku. Pojedinačni direktoriji na ovom popisu odvojeni su dvotočkama. Zadana varijabla STAZA uključuje imenike /usr/local/bin, /bin, /usr/bin, /usr/X11R6/bin, tj. izgleda ovako:

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

Kako biste dodali direktorij na ovaj popis, morate pokrenuti sljedeću naredbu:

# PATH=$PATH:novi_put.

Prilikom pretraživanja, ljuska pretražuje direktorije redoslijedom kojim su navedeni u varijabli PATH.

Imajte na umu da trenutni direktorij možete uključiti u ovaj popis dodavanjem točke u varijablu PATH. Međutim, to se ne preporučuje iz sigurnosnih razloga: napadač bi mogao staviti naredbu u javni direktorij čije ime odgovara jednoj od naredbi koje superkorisnik često izvršava, ali izvodi potpuno različite radnje (osobito ako je trenutni direktorij na početku popis putova pretraživanja).

5.6.4 Varijabla IFS

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

5.6.5 Trenutni i kućni imenici

Naziv trenutnog direktorija pohranjuje se u varijabli okruženja (nazvane PWD), a vrijednost ove varijable se mijenja svaki put kada se program pokrene CD(i također kada mijenjate trenutni direktorij na bilo koji drugi način, na primjer, kroz Midnight Commander).

Slično, puni naziv (i put) matičnog direktorija korisnika koji je pokrenuo proces pohranjuje se u HOME varijabli.

5.6.6 Tim izvoz

Kada ljuska pokrene program ili naredbu, prosljeđuje im neke varijable okoline. Da bi se varijabla okruženja proslijedila procesu pokrenutom iz ljuske, mora se postaviti pomoću posebne naredbe izvoz, tj. umjesto

$name=vrijednost

treba to zapisati

$izvoz ime=vrijednost

U tom slučaju, svi programi pokrenuti iz ljuske (uključujući sekundarne instance same ljuske) imat će pristup ovako definiranim varijablama, tj. moći će pozvati svoje vrijednosti imenom.

V. Kostromin (kos na rus-linux dot net) - 5.6. Parametri i varijable. Okolina školjke