M. Garrels. Bash Guide. Spremenljivke. Kako nastaviti in onemogočiti lokalne, uporabniške in sistemske spremenljivke okolja v Linuxu Kako najti, kje je zapisana spremenljivka lupine

Vrste spremenljivk

Kot lahko vidite iz zgornjih primerov, so spremenljivke lupine običajno zapisane z velikimi črkami. Bash shranjuje sezname spremenljivk dveh vrst:

Globalne spremenljivke

Globalne ali okoljske spremenljivke so na voljo v vseh lupinah. Če želite prikazati spremenljivke okolja, lahko uporabite ukaze okolj oz printenv. Ti ukazi so na voljo kot del paketa sh-utils.

Spodaj je tipičen rezultat:

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=Privzeto GNOME_DESKTOP_SESSION_ID=Privzeto GTK_RC_FILES=/etc/gtk/gtkrc:/nethome/franky/.gtkrc -1.2-gnome2 GWMCOLOR=temnozelena 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:ali=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 NNTPPORT=119 NNTPSERVER=novice NPX_PLUGIN_PATH=/plugin/ns 4plugin/: / 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 v \w\[\033 PS2=Več vnosa> 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=brez XTERMID= XWINHOME=/usr/X11R6 X=X11R6 YACC=bison - l

Lokalne spremenljivke

Lokalne spremenljivke so na voljo samo v trenutni ukazni lupini. Če je vgrajen ukaz set se uporablja brez parametrov, bo vrnil seznam vseh spremenljivk (vključno s spremenljivkami izvajalnega okolja) in funkcij. Uporabimo oblikovanje in izdelajmo razvrščen rezultat, ki upošteva lokalnost spremenljivk.

Spodaj je datoteka diff, ustvarjena s primerjavo rezultatov ukazov printenv in set, po odstranitvi s seznama funkcij, ki jih ukaz tudi prikaže 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

Deljenje spremenljivk po njihovi vsebini

Poleg tega, da spremenljivke delimo na lokalne in globalne, jih lahko razdelimo tudi v kategorije glede na vsebino, ki je shranjena v spremenljivki. V zvezi s tem so spremenljivke razdeljene na štiri vrste:

  • Spremenljivke niza
  • Celoštevilske spremenljivke
  • Spremenljivke – konstante
  • Spremenljivke – nizi

O teh vrstah spremenljivk bomo razpravljali v 10. poglavju. Zdaj bomo v naših spremenljivkah uporabili celoštevilske in nizovne vrednosti.

Ustvarjanje spremenljivk

V spremenljivkah se razlikujejo velike in male črke, privzeto pa se uporabljajo velike črke. Včasih je običajna uporaba malih črk za pisanje lokalnih spremenljivk. Vendar pa lahko za imena spremenljivk uporabite poljubne znake in celo mešate velike in male črke. V imenih spremenljivk lahko uporabite tudi številke, vendar imena, ki se začnejo s številkami, niso dovoljena:

Prompt> export 1number=1 bash: export: `1number=1": ni veljaven identifikator

Če želite nastaviti spremenljivko v ukazni lupini, uporabite naslednji ukaz

VARNAME="vrednost"

Okoli enačaja ne vstavljajte presledkov; to bo povzročilo napake. Ko spremenljivkam dodeljujete vrednosti, je dobra navada, da vsebino niza stavite v narekovaje; to zmanjša možnost, da bi naredili napako.

Nekaj ​​primerov uporabe velikih in malih črk, številk in presledkov (sporočilo ukaza ni bilo mogoče najti pomeni, da obstaja težava - pribl.):

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: ukaz ni bil najden franky ~> MYVAR1 ="2" bash: MYVAR1: ukaz ni bil najden franky ~> MYVAR1= "2" bash: 2: ukaz ni najden franky ~> unset MYVAR1 first_name full_name franky ~> echo $MYVAR1 $first_name $full_name<--no output-->franky ~>

Izvoz spremenljivk

Spremenljivka, ustvarjena, kot je prikazano v zgornjem primeru, je na voljo samo v trenutni ukazni lupini. To je lokalna spremenljivka: podrejeni procesi trenutne lupine te spremenljivke ne bodo poznali. Za posredovanje spremenljivk podlupini potrebujemo izvoz z uporabo vgrajenega ukaza izvoz. Spremenljivke, ki se izvažajo, se imenujejo spremenljivke okolja. Dodeljevanje vrednosti in izvoz sta običajno izvedena v enem koraku:

Izvozi VARNAME="vrednost"

Podlupina lahko spremeni spremenljivke, ki so podedovane od nadrejenega procesa, vendar spremembe, ki jih naredi podrejeni proces, ne vplivajo na nadrejeni proces. To je prikazano v naslednjem primeru:

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 ~>

Ko podlupina prvič poskuša prebrati vrednost full_name, vrednost ni nastavljena (ukaz odmev prikazuje prazno vrstico). Ko je podlupina zapuščena, se spremenljivka polno_ime izvozi v nadrejeno lupino – spremenljivko je mogoče izvoziti, potem ko ji je bila dodeljena vrednost. Nato se zažene nova podlupina, ki prikazuje spremenljivko, izvoženo iz nadrejene lupine. Spremenljivka je spremenjena in vanjo bo shranjena druga vrednost, vendar v nadrejeni lupini vrednost te spremenljivke ostane enaka.

Rezervirane spremenljivke

Bournove rezervirane spremenljivke lupine

Bash uporablja določene spremenljivke lupine tako kot lupina Bourne. V nekaterih primerih Bash spremenljivki dodeli privzeto vrednost. Spodnja tabela prikazuje Kratek opis te preproste spremenljivke lupine:

Tabela 3.1. Bournove rezervirane spremenljivke lupine

Ime spremenljivke Opredelitev

Seznam imenikov, ločenih z dvopičji, uporabljenih pri iskanju poti z vgrajenim ukazom CD.

Domači imenik Trenutni uporabnik; privzeto uporabljen v vgrajenem ukazu CD. Vrednost te spremenljivke se uporablja tudi namesto znaka tilde.

Seznam znakov, ki se uporabljajo za ločevanje polj; uporablja se, ko ukazna lupina po izvedbi vseh zamenjav razdeli rezultat na posamezne besede.

Če je ta parameter nastavljen na ime datoteke in MAILPATH ni nastavljen, bo Bash obvestil uporabnika, da je bila pošta prejeta v navedeni datoteki.

Z dvopičjem ločen seznam imen datotek, ki jih ukazna lupina redno preverja za novo pošto.

Vrednost zadnjega argumenta v parametru, ki ga obdeluje vgrajeni ukaz getopts.

Indeks zadnjega argumenta parametra, ki ga je obdelal vgrajeni ukaz getopts.

Z dvopičjem ločen seznam imenikov, v katerih lupina išče ukaze.

Primarna pozivna vrstica. Privzeta vrednost je ""\s-\v\$ "".

Sekundarna pozivna vrstica. Privzeta vrednost je ""> "".

Bash rezervirane spremenljivke

Vrednosti teh spremenljivk so nastavljene ali uporabljene v Bashu, vendar se v drugih lupinah običajno ne obravnavajo kot posebne.

Tabela 3.2. Bash rezervirane spremenljivke

Ime spremenljivke Opredelitev

Ta spremenljivka nadzoruje, kako lupina komunicira z uporabnikom in izvaja naloge.

Celotna pot, uporabljena za zagon trenutnega primerka Bash.

Če je ta spremenljivka nastavljena v času, ko je Bash priklican za izvedbo skripta, se njena vrednost uporabi kot ime zagonske datoteke, ki jo je treba prebrati, preden se skript izvede.

Številka različice trenutnega primerka Bash.

Spremenljivka je matrika samo za branje, katere elementi matrike hranijo informacije o različici tega primera Bash.

Pri tiskanju izbranih seznamov se uporablja vgrajen ukaz izberite za določitev širine terminala. Samodejno nastavljeno ob sprejemu signala SIGWINCH.

Kazalec v $(COMP_WORDS) na besedo, ki shrani trenutni položaj kazalca.

Trenutna ukazna vrstica.

Kazalec na trenutni položaj kazalca glede na začetek trenutnega ukaza.

Spremenljivka je niz, sestavljen iz posameznih besed, uporabljenih v trenutni ukazni vrstici.

Spremenljivka je niz, iz katerega Bash bere možne možnosti dokončanja nizov, ki jih generira lupinska funkcija, ki jo kliče storitev, zasnovana za programiranje dokončanj

Spremenljivka je matrika, ki hrani trenutno stanje sklada imenikov.

Številčni efektivni ID uporabnika ID trenutnega uporabnika.

Privzeti urejevalnik, ki se uporablja v vgrajenem ukazu fc podan je parameter -e

Z dvopičjem ločen seznam pripon, ki jih je treba prezreti pri izvajanju samodejnega dokončanja imena datoteke.

Ime lupinske funkcije, ki se trenutno izvaja.

Seznam vzorcev, ločenih z dvopičjem, ki določajo niz imen datotek, ki jih je treba prezreti pri zamenjavi imen datotek.

Spremenljivka je matrika, ki vsebuje seznam skupin, ki jim trenutni uporabnik pripada.

Do trije znaki, ki nadzorujejo zamenjavo zgodovine ukazov, hitro zamenjavo in razdelitev dokončanih zamenjav v žetone.

Številka trenutnega ukaza v zgodovini ukazov ali njegov indeks na seznamu zgodovine ukazov.

Določa, ali bo ukaz dodan v datoteko zgodovine ukazov.

Ime datoteke, v kateri je shranjena zgodovina ukazov. Privzeta vrednost: ~/.bash_history.

Privzeto največje število vrstic v datoteki zgodovine ukazov je 500.

Seznam vzorcev, ločenih z dvopičjem, ki določajo, ali naj se ukaz shrani na sezname zgodovine ukazov.

Privzeto največje število ukazov, ki jih je mogoče shraniti na seznam zgodovine ukazov, je 500.

Vsebuje ime datoteke v enaki obliki kot datoteka /etc/hosts, ki jo je mogoče prebrati, ko mora ukazna lupina dokončati ime gostitelja.

Trenutno ime gostitelja.

Niz, ki opisuje stroj, na katerem se izvaja Bash.

Nadzoruje, kaj naredi lupina, ko prejme znak kot zaključni znak vhodnega toka EOF(simbol za konec datoteke).

Ime inicializacijske datoteke programa Readline, ki nadomešča privzeto datoteko /etc/inputrc.

Uporablja se za definiranje področne kategorije za vse kategorije, ki niso izrecno določene s spremenljivkami, katerih imena se začnejo z znaki LC_.

Ta spremenljivka preglasi vrednost spremenljivke LANG in vseh drugih spremenljivk, ki se začnejo z znaki LC_, ki določajo kategorijo lokalizacije.

Ta spremenljivka določa vrstni red, uporabljen pri razvrščanju imen datotek, ki se ujemajo z vzorcem, in določa razlago obsegov, razredov ujemanja in pravil primerjave znakov za zamenjavo imen datotek in ujemanje vzorcev.

Ta spremenljivka določa, kako se znaki interpretirajo in ali pripadajo določenemu razredu za razširitev imena datoteke in ujemanje vzorcev.

Ta spremenljivka podaja kategorijo lokalizacije, ki se uporablja za obdelavo nizov dvojni narekovaji, pred katerim je simbol $.

Ta spremenljivka podaja kategorijo lokalizacije za obliko številke.

Številka vrstice v skriptu ali lupinski funkciji, ki se trenutno izvaja.

Uporablja se z vgrajenim ukazom izberite za določitev dolžine stolpca, v katerem so prikazani izbrani seznami.

Niz, ki v celoti opisuje vrsto sistema, v katerem se izvaja Bash, z uporabo standardnega formata GNU CPU-COMPANY-SYSTEM.

V sekundah podaja, kako pogosto naj ukazna lupina preveri pošto v datotekah, navedenih v spremenljivkah MAILPATH ali MAIL.

Nastavitev prejšnjega delovnega imenika z vgrajenim ukazom CD.

Če je nastavljen na 1, Bash prikaže sporočila o napakah, ki jih ustvari vgrajeni ukaz getopts.

Opis niza operacijski sistem, ki poganja Bash.

Spremenljivka je matrika, ki vsebuje seznam vrednosti izhodnega stanja procesa v zadnjem cevovodu (ki je lahko sestavljen iz enega samega ukaza).

Če je ta spremenljivka dodana okolju, ko se zažene bash, gre lupina v način POSIX.

Če je ta spremenljivka nastavljena, se vrednost razlaga kot ukaz, ki se izvede pred vsako izdajo primarne pozivne vrstice (PS1).

Vrednost te spremenljivke se uporabi za ukaz izberite kot pozivni niz. Privzeto - ""#? ""

Vrednost pozivnega niza, ki je izdan pred ukazno vrstico, ko je možnost -x nastavljena za omogočanje odmeva ukazna vrstica; privzeto je ""+ "".

Trenutni delovni imenik, nastavljen z vgrajenim ukazom CD.

Ob vsakem dostopu do tega parametra se generira naključno celo število v območju od 0 do 32767. Vrednost te spremenljivke se uporablja v generatorjih naključnih števil.

Privzeta spremenljivka v vgrajenem ukazu prebrati.

Ta spremenljivka označuje število sekund, ki so pretekle od zagona ukazne lupine.

Seznam parametrov, nastavljenih v ukazni lupini; ločeni z dvopičji.

Poveča se za eno vsakič, ko se zažene nov primerek Bash.

Vrednost tega parametra se uporablja kot niz, ki določa obliko za izdajo informacij o času izvajanja za cevovode, pred katerimi je rezervirana beseda čas.

Če je spremenljivka TMOUT nastavljena na vrednost, večjo od nič, se v vgrajenem ukazu obravnava kot privzeta časovna omejitev prebrati. Ko se ukazna lupina zažene v interaktivnem načinu, se ta vrednost interpretira kot število sekund, ki jih bo lupina čakala na vnos po izdaji začetne vrstice poziva. Če ni prejet noben vnos, se po tem času Bash izklopi.

Numerična vrednost, pravi uporabniški ID za trenutnega uporabnika.

Za več informacij si oglejte strani priročnika Bash ali dokumentacijo. Nekatere spremenljivke so samo za branje, nekatere so samodejno nastavljene, nekatere pa postanejo nesmiselne, ko so nastavljene na kaj drugega kot na privzeto vrednost.

Posebni parametri

Ukazna lupina nekatere parametre obravnava na poseben način. Te parametre je mogoče uporabiti le za pridobivanje vrednosti iz njih; vrednosti jim ni mogoče dodeliti.

Tabela 3.3. Bash posebne spremenljivke

Simbol Opredelitev

Vrne pozicijske parametre od prvega. Ko je parameter podan v dvojnih narekovajih, se nadomesti z eno besedo, ki vsebuje vrednosti vsakega parametra, ločene s prvim znakom posebne spremenljivke IFS.

Vrne pozicijske parametre od prvega. Ko je parameter podan v dvojnih narekovajih, je vsak parameter vrnjen kot ločena beseda.

Vrne število pozicijskih parametrov, navedenih kot decimalna vrednost.

Vrne povratno kodo zadnjega cevovoda, izvedenega v načinu ospredja.

Parameter vezaj vrne zastavice trenutnega parametra, kot so bile nastavljene ob klicu vgrajenega ukaza set, ali kot jih je nastavila lupina sama (na primer -i).

Vrne ID procesa lupine.

Vrne ID procesa zadnjega ukaza, izvedenega v ozadju (asinhronem) načinu.

Vrne ime lupine ali skripta.

Vrednost parametra "podčrtaj" je nastavljena, ko se ukazna lupina zažene in vsebuje polno ime lupina ali skript, ki se izvede, kot je bil posredovan na seznamu argumentov. Vrednost bo nato zamenjana z zadnjim argumentom prejšnjega ukaza. Ta parameter določa tudi celotno pot do vsakega ukaza, izvedenega in postavljenega v okolje, ki je bilo izvoženo v ta ukaz. Ko je pošta preverjena, ta parameter vsebuje ime poštne datoteke.

Pozicijski parametri so besede, ki sledijo imenu lupinskega skripta. Shranjeni so v spremenljivkah $1, $2, $3 in tako naprej. Spremenljivke se po potrebi dodajo v notranjo matriko. Spremenljivka $# podaja skupno število parametrov, kot je prikazano v naslednjem preprostem skriptu:

# positional.sh # Ta skript prebere 3 pozicijske parametre in jih natisne. POSPAR1="$1" POSPAR2="$2" POSPAR3="$3" echo "$1 je prvi pozicijski parameter, \$1." echo "$2 je drugi pozicijski parameter, \$2." echo "$3 je tretji pozicijski parameter, \$3." echo echo "Skupno število pozicijskih parametrov je $#."

Ko izvajate skript, lahko podate poljubno število argumentov:

Franky ~> positional.sh ena dva tri štiri pet ena je prvi pozicijski parameter, $1. two je drugi pozicijski parameter, $2. tri je tretji pozicijski parameter, $3. Skupno število pozicijskih parametrov je 5. franky ~> positional.sh ena dva ena je prvi pozicijski parameter, $1. two je drugi pozicijski parameter, $2. je tretji pozicijski parameter, $3. Skupno število pozicijskih parametrov je 2.

Za več informacij o uporabi teh parametrov glejte 7. poglavje, Pogojni stavki, in razdelek o vgrajenem ukazu shift.

Nekaj ​​primerov drugih posebnih parametrov:

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 obstaja ls: ne obstaja: ni takšne datoteke ali imenika franky ~> echo $? 1 Franky ~>

Uporabnik franky se začne z vnosom ukaza grep, ki spremenljivki _ dodeli vrednost. ID procesa te lupine je 10662. Če se izvajanje nekega opravila prenese na način ozadja, v spremenljivki! tam bo identifikator procesa delo v ozadju. Delujoča ukazna lupina je bash. Če je prišlo do napake v spremenljivki? povratna koda bo drugačna od 0 (nič).

Razširitev obsega uporabe skriptov, ki imajo spremenljivke

Poleg tega, da naredijo vaš skript bolj berljiv, vam lahko spremenljivke tudi pomagajo hitro uporabiti vaš skript v drugih kontekstih ali za druge namene. Razmislite o naslednjem primeru - zelo preprost skript, ki deluje na oddaljenem strežniku varnostno kopijo domači imenik uporabnika franky:

#!/bin/bash # Ta skript naredi varnostno kopijo mojega domačega imenika. cd /home # To ustvari arhiv tar cf /var/tmp/home_franky.tar franky > /dev/null 2>&1 # Najprej odstranite staro datoteko bzip2. Napake preusmeritve, ker to ustvari nekaj, če arhiv # ne obstaja. Nato ustvarite novo stisnjeno datoteko. rm /var/tmp/home_franky.tar.bz2 2> /dev/null bzip2 /var/tmp/home_franky.tar # Kopirajte datoteko na drugega gostitelja - imamo ključe ssh, da bo to delovalo brez posredovanja. scp /var/tmp/home_franky.tar.bz2 bordeaux:/opt/backup/franky > /dev/null 2>&1 # Ustvarite časovni žig v dnevniški datoteki. datum >> /home/franky/log/home_backup.log varnostno kopiranje odmeva je uspelo >> /home/franky/log/home_backup.log

Prvič, večja je verjetnost, da boste naredili napake, če ročno določite datoteke in imenike vsakič, ko jih potrebujete. Drugič, predpostavimo uporabnika frankyželi ta skript posredovati uporabniku Carol, potem prej Carol bodo lahko uporabili skripto za Rezervni izvod svoj domači imenik, bo moral kar nekaj urediti. Enako se bo zgodilo, če uporabnik franky bo želel uporabiti ta skript za varnostno kopiranje drugih imenikov. Če želite razširiti obseg, uporabite spremenljivke za vse datoteke, imenike, uporabniška imena, imena strežnikov itd. Nato morate vrednost spremeniti samo enkrat in vam ni treba iti skozi celoten skript, da bi našli vsa mesta, kjer se pojavlja določen parameter. primer:

#!/bin/bash # Ta skript naredi varnostno kopijo mojega domačega imenika. # Spremenite vrednosti spremenljivk, da bo skript deloval namesto 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 # To ustvari arhiv tar cf $TARFILE $BACKUPFILES > /dev/null 2>&1 # Najprej odstranite staro datoteko bzip2. Napake preusmeritve, ker to ustvari nekaj, če arhiv # ne obstaja. Nato ustvarite novo stisnjeno datoteko. rm $BZIPFILE 2> /dev/null bzip2 $TARFILE # Kopirajte datoteko na drugega gostitelja - imamo ključe ssh, da bo to delovalo brez posredovanja. scp $BZIPFILE $SERVER:$REMOTEDIR > /dev/null 2>&1 # Ustvarite časovni žig v dnevniški datoteki. datum >> $LOGFILE varnostno kopiranje odmeva je uspelo >> $LOGFILE

Med delom s strežnikom lupina zbira veliko količino informacij, ki določajo njeno obnašanje in dostop do virov. Nekatere od teh možnosti najdete v nastavitvah lupine, druge določi uporabnik.

Eden od načinov, kako lupina sledi tem informacijam, je skozi okolje. Okolje je območje, ki vsebuje sistemsko definirane spremenljivke, ki jih lupina zgradi ob vsakem zagonu seje.

Ta vadnica pojasnjuje, kako komunicirati z okoljem in brati ali nastaviti spremenljivke okolja in lupine interaktivno in z uporabo konfiguracijske datoteke. Vsa dejanja se izvajajo na Ubuntu 12.04 VPS, vendar kateri koli sodobni Distribucija Linuxa mora delovati na enak način.

Kako deluje okolje in njegove spremenljivke

Vsakič, ko se aktivira lupinska seja, se začne postopek za zbiranje in prevajanje informacij, ki bi morale biti na voljo lupini in njenim podrejenim procesom. Lupina dobi te podatke iz številnih različnih datotek in nastavitev v sistemu.

Na splošno okolje zagotavlja prenosni objekt, ki zbira in nastavlja potrebne nastavitve procesu lupine, ki jih nato posreduje svojim podrejenim procesom.

Okolje je v obliki niza, ki vsebuje pare ključ-vrednost. Več vrednosti je običajno ločenih z dvopičjem (:). Vsak par na splošno izgleda nekako takole:

KEY=vrednost1:vrednost2:...

Če vrednost vsebuje presledke, morate uporabiti dvojne narekovaje:

KEY="vrednost s presledki"

V tem primeru ključ pomeni spremenljivke enega od dveh obstoječe vrste: spremenljivke okolja ali lupine.

Spremenljivke okolja so spremenljivke, ki so bile definirane za trenutno lupino in jih podedujejo vse podrejene lupine ali procesi. Spremenljivke okolja se uporabljajo za posredovanje informacij procesom, ki se zaženejo iz lupine.

Spremenljivke lupine so spremenljivke, ki so vsebovane izključno v lupini, v kateri so bile nastavljene ali definirane. Pogosto se uporabljajo za spremljanje trenutnih podatkov (na primer trenutnega delovnega imenika).

Običajno so takšne spremenljivke označene z velikimi črkami. To uporabnikom pomaga razlikovati med spremenljivkami okolja v drugih kontekstih.

Tiskanje lupine in spremenljivk okolja

Vsaka seja spremlja lastno lupino in spremenljivke okolja. Obstaja več načinov, kako jih spraviti ven.

Če si želite ogledati seznam vseh spremenljivk okolja, uporabite ukaza env ali printenv. Privzeto bodo oddali popolnoma enak rezultat:

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

To je tipičen primer izpisa ukazov printenv in env. Ti ukazi se razlikujejo le v nekaj posameznih funkcijah. Na primer, printenv lahko poizveduje po vrednostih posameznih spremenljivk:

printenv SHELL
/bin/bash

Ukaz env vam omogoča, da spremenite okolje, v katerem se izvajajo programi, tako da ukazu posredujete nabor definicij spremenljivk, nekaj takega:

env VAR1="blahblah" command_to_run ukazne_možnosti

Kot je navedeno zgoraj, podrejeni procesi običajno podedujejo spremenljivke okolja nadrejenega procesa, kar omogoča spreminjanje vrednosti ali uvedbo dodatnih spremenljivk za podrejene procese.

Kot lahko vidite v izhodu ukaza printenv, je veliko spremenljivk okolja ustvarjenih z uporabo sistemske datoteke in procese brez posredovanja uporabnika.

Toda kako gledate na spremenljivke lupine?

Če želite to narediti, uporabite ukaz set. Če ga vnesete brez dodatnih parametrov, set izpiše vse spremenljivke lupine, spremenljivke okolja, lokalne spremenljivke in funkcije lupine:

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

Praviloma je ta seznam precej dolg. Če ga želite prikazati v bolj priročni obliki, ga odprite s programom pozivnika:

Ta seznam vsebuje ogromno število Dodatne informacije, ki je v ta trenutek ni potrebno (na primer nekatere funkcije bash).

Če želite "počistiti" izhod, morate zagnati ukaz set v načinu POSIX, ki zaobide funkcije lupine. To je treba narediti v podlupini, da ne spremenite trenutnega okolja:

(set -o posix; set)

To dejanje bo prikazalo vse spremenljivke okolja in lupine.

Ta izhod lahko tudi primerjate z izhodom ukazov env/printenv in poskusite navesti samo spremenljivke lupine, vendar tak seznam ne bo idealen, ker je izhod teh ukazov drugačen:

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

Seznam bo verjetno vseboval več spremenljivk okolja, ker ukaz set natisne vrednosti v narekovajih, ukaza printenv in env pa ne.

Vendar je to odličen način za ogled okolja in spremenljivk lupine, nastavljenih v dani seji.

Takšne spremenljivke se uporabljajo za najrazličnejše namene. Zagotavljajo alternativni način za nastavitev trajnih vrednosti za sejo med procesi, s čimer se odpravi potreba po spreminjanju datoteke.

Osnovno okolje in spremenljivke lupine

Nekatere posebno uporabne spremenljivke okolja in lupine se uporabljajo zelo pogosto.

Spodaj je seznam glavnih spremenljivk okolja:

  • ŠKOLJKA: opisuje lupino, ki interpretira vnesene ukaze. V večini primerov je bash nameščen privzeto, vendar je to vrednost mogoče spremeniti, če je potrebno.
  • TERMIN: Določa vrsto terminala, ki se posnema ob zagonu lupine. Odvisno od operativnih zahtev je mogoče emulirati različne terminale strojne opreme. Običajno vam zaradi tega ni treba skrbeti.
  • UPORABNIK: Trenutni uporabnik.
  • P.W.D.: trenutni delovni imenik.
  • OLDPWD: prejšnji delovni imenik. Lupina ga shrani v primeru, da se zažene ukaz cd.
  • LS_BARVE: Določa barvne kode, ki se uporabljajo za barvanje izhoda ukaza ls. Ta izhod pomaga uporabniku hitreje prebrati rezultat ukaza (na primer hitro razlikovati med vrstami datotek).
  • POŠTA: pot do uporabnikovega trenutnega nabiralnika.
  • POT: seznam imenikov, do katerih sistem dostopa pri izvajanju ukazov. Ko uporabnik zažene ukaz, sistem preveri te imenike v določenem vrstnem redu za izvršljivo datoteko.
  • JEZIK: Trenutne nastavitve jezika in lokalizacije, vključno s kodiranjem znakov.
  • DOMOV: Domači imenik trenutnega uporabnika.
  • _ : Zadnji izveden ukaz.

Po pregledu seznama spremenljivk okolja preglejte seznam spremenljivk lupine:

  • BAŠOPTI: seznam možnosti, uporabljenih pri izvajanju bash. To lahko uporabite za preverjanje, ali okolje deluje po pričakovanjih.
  • BASH_RAZLIČICA: tekoča različica bash v človeku berljivi obliki.
  • BASH_VERSINFO: strojno berljiva različica bash.
  • STOLPCI: Določa širino izpisa v stolpcih.
  • DIRSTACK: Sklad imenikov, ki so dostopni z ukazoma pushd in popd.
  • HISTFILESIZE: največje število vrstic v datoteki zgodovine ukazov.
  • HISTSIZE: Število ukazov, ki si jih je treba zapomniti na seznamu zgodovine.
  • HOSTNAME: Trenutno ime gostitelja.
  • IFS: Notranje ločilo vnosnih polj v ukazni vrstici. Privzeto je prostor.
  • PS1: Določa začetno pozivno vrstico – vrsto ukazne vrstice ob zagonu lupinske seje. Spremenljivka PS2 nastavi sekundarno vrstico poziva, če ukaz obsega več vrstic.
  • SHELLOPTS: Možnosti lupine, ki jih je mogoče nastaviti z uporabo set.
  • UID: Enolični identifikator za trenutnega uporabnika.

Nastavitev lupine in spremenljivk okolja

Spodaj je nekaj primerov za prikaz razlike med spremenljivkami lupine in okolja ter za razlago sintakse za nastavitev teh spremenljivk.

Ustvarjanje spremenljivk lupine

Najprej morate nastaviti spremenljivke lupine za trenutno sejo. To se naredi zelo preprosto, vse kar morate storiti je, da določite ime in vrednost. Kot smo že omenili, se za pisanje imen takšnih spremenljivk uporabljajo velike črke.

TEST_VAR="Pozdravljen svet!"

Ta primer uporablja narekovaje, ker vrednost vsebuje presledke. Poleg tega morate tukaj uporabiti enojne narekovaje, ker je klicaj poseben znak v ukazni lupini bash, ki dostopa do zgodovine ukazov, razen če je ubežen ali obdan z enojnimi narekovaji.

Torej je nastala spremenljivka lupine veljavna v trenutni seji, vendar ni posredovana svojim podrejenim procesom.

Če želite to preveriti, uporabite ukaz grep za rezultat nastavljenega ukaza:

nastavite | grep TEST_VAR
TEST_VAR="Pozdravljen svet!"

Prav tako se lahko prepričate, da ta spremenljivka ni spremenljivka okolja, tako da zaženete grep za rezultat ukaza printenv:

printenv | grep TEST_VAR

To dejanje ne bo prineslo nobenega rezultata.

To lahko uporabite za izpostavitev vrednosti katere koli lupine ali spremenljivke okolja.

echo $TEST_VAR
Pozdravljen, svet!

Kot lahko vidite, morate za dostop do vrednosti spremenljivke uporabiti simbol $.

Spet dobljene spremenljivke ne smete posredovati nobenemu podrejenemu procesu. Če želite to preizkusiti, znotraj svoje trenutne lupine namestite novo lupino bash:

bash
echo $TEST_VAR

Če razširite podrejeno lupino in poskusite odpreti vsebino spremenljivke, ne bo nič natisnjeno. To pomeni, da vse deluje pravilno.

Če se želite vrniti v prvotno lupino, vnesite exit:

Ustvarjanje spremenljivk okolja

Zdaj poskusite spremenljivko lupine spremeniti v spremenljivko okolja. To se naredi z izvozom spremenljivke. Ukaz, ki izvede izvoz, je ustrezno poimenovan.

Ta ukaz spremeni spremenljivko lupine v spremenljivko okolja. Če želite preveriti, ali je bilo vse narejeno pravilno, lahko ponovno pogledate seznam spremenljivk okolja:

printenv | grep TEST_VAR
TEST_VAR=Pozdravljen svet!

Zdaj je ta spremenljivka prikazana na tem seznamu. Podrejeno lupino lahko tudi znova razširite:

bash
echo $TEST_VAR
Pozdravljen, svet!

Super! Podrejena lupina je prejela spremenljivko iz prvotne lupine. Poskusite izvoziti še eno spremenljivko, preden zapustite podrejeno lupino.

izvoz NEW_VAR="Testiranje izvoza"

Preverite, ali je bila spremenljivka izvožena:

printenv | grep NEW_VAR
NEW_VAR=Testiranje izvoza

Zdaj se vrnite na prvotno lupino:

Preverite, ali je to spremenljivko mogoče odpreti:

Rezultat se ne vrne

To se zgodi, ker se spremenljivke okolja posredujejo le podrejenim procesom. Ni vgrajenega načina za nastavitev spremenljivk okolja nadrejene lupine. V večini primerov to prepreči, da bi programi posegali v operacijsko okolje, iz katerega so bili zagnani.

Spremenljivka NEW_VAR je bila nastavljena kot spremenljivka okolja podrejene lupine. Ta spremenljivka je veljavna za to lupino in njene podrejene lupine ter procese. Ko se je uporabnik vrnil v prvotno lupino, je bilo to okolje uničeno.

Premikanje in ponastavitev spremenljivk

Spremenljivka TEST_VAR je še vedno spremenljivka okolja. Če želite znova narediti lupinsko spremenljivko, vnesite:

izvoz -n TEST_VAR

Zdaj ta spremenljivka ni več spremenljivka okolja:

printenv | grep TEST_VAR

To je spet lupinska spremenljivka:

nastavite | grep TEST_VAR
TEST_VAR="Pozdravljen svet!"

Če želite popolnoma ponastaviti spremenljivko, naj bo to spremenljivka okolja ali lupine, uporabite ukaz unset:

Prepričajte se, da taka spremenljivka ne obstaja več:

Natisnjen ni bil noben rezultat, ker je bila spremenljivka ponastavljena.

Samodejno nastavljanje spremenljivk okolja

Kot že omenjeno, mnogi programi uporabljajo spremenljivke okolja, da določijo, kako naj delujejo. Nastavljanje potrebnih spremenljivk vsakič, ko je ustvarjena nova lupina, je precej neprijetno. Poleg tega se številne spremenljivke nastavijo takoj ob prijavi. Kako samodejno nastaviti spremenljivke?

To je nekoliko bolj zapleteno, kot se zdi na prvi pogled, saj lupina bash bere veliko konfiguracijskih datotek.

Vrste lupinskih sej

Lupina bash bere različne konfiguracijske datoteke, odvisno od tega, kako je bila seja zagnana. Prvi dve vrsti sej, ki definirata lupino, sta začetni in podrejeni.

Začetna ali začetna lupina(login shell) je lupinska seja, ki se odpre po avtorizaciji uporabnika. Če se uporabnik prijavi v terminal ali overi s SSH, se odpre zagonska lupina.

Če se nova seja zažene iz pooblaščene (začetne) seje (kot v prejšnjih primerih je bila zagnana nova lupina bash), bo ta seja hčerinsko podjetje (ne-Vpiši se lupina). Če želite odpreti to sejo, vam ni treba opraviti postopka avtorizacije.

Tudi lupinske seje so lahko interaktivne ali neinteraktivne.

Interaktivna seja shell (interaktivna lupina) je seja, vezana na terminal. Neinteraktivna lupinska seja je seja, ki ni povezana s terminalom.

Seje lupine so torej razvrščene glede na naslednje vidike: začetni otrok, interaktivno-neinteraktivno.

Običajna seja, odprta s SSH, je običajno interaktivna začetna seja. Skript, ki se izvaja prek ukazne vrstice, se običajno izvaja v neinteraktivni podrejeni seji. Terminska seja je drugačna kombinacija teh dveh lastnosti.

Z razvrstitvijo seje kot začetne seje ali podrejene seje sistem razume, katere datoteke je treba prebrati za inicializacijo lupinske seje.

Torej, najprej zagonska seja pridobi konfiguracije iz datoteke /etc/profile. Nato poišče konfiguracijsko datoteko zagonske lupine v uporabnikovem domačem imeniku, da pridobi uporabniško definirane konfiguracije.

Ta seja bere datoteke ~/.bash_profile, ~/.bash_login in ~/.profile in ne bere drugih datotek.

Podrejena seja nato prebere /etc/baash.bashrc in nato uporabnikovo datoteko ~/.bash.rc za razmestitev okolja.

Neinteraktivne lupine preberejo spremenljivko okolja BASH_ENV in navedeno datoteko, da ustvarijo novo okolje.

Kako nastaviti spremenljivke okolja

Kot lahko vidite, so konfiguracije razpršene po različnih datotekah.

Zaradi tega je sistem zelo prilagodljiv, kar je uporabno v določenih situacijah, ko morate nastaviti različne parametre za začetno in podrejeno lupino. Vendar te lupine običajno uporabljajo enake nastavitve.

Na srečo večina distribucij Linuxa kaže na konfiguracijsko datoteko podrejene lupine kot vir konfiguracij zagonske lupine. To pomeni, da lahko definirate spremenljivke okolja za obe seji v konfiguracijskih datotekah podrejene lupine.

Običajno obe lupini uporabljata uporabniško definirane spremenljivke okolja. To pomeni, da lahko te spremenljivke nastavite v datoteki ~/.bashrc.

Odpri to datoteko:

Najverjetneje že vsebuje nekaj podatkov. Večina tukaj nastavljenih vrednosti je možnosti bash in nimajo nobene zveze s spremenljivkami okolja. Spremenljivke v tej datoteki so nastavljene na povsem enak način kot v ukazni vrstici:

izvoz VARNAME=vrednost

Ko vnesete vse potrebne spremenljivke, zaprite datoteko. Ko naslednjič zaženete lupinsko sejo, bodo tukaj nastavljene spremenljivke prebrane in posredovane okolju lupine. Če želite trenutni seji naročiti, naj prebere dano datoteko, vnesite:

vir ~/.bashrc

Če želite nastaviti sistemske spremenljivke, jih dodajte v /etc/profile, /etc/bash.bashrc ali /etc/environment.

Rezultati

Spremenljivke lupine in okolja so vedno prisotne v vseh sejah lupine, zato je znanje o delu z njimi še posebej koristno. Uporabljajo se lahko za posredovanje konfiguracij nadrejenega procesa podrejenim procesom, pa tudi za konfiguriranje nastavitev zunaj datotek.

To v določenih situacijah zagotavlja številne prednosti. Na primer, nekateri mehanizmi uvajanja se zanašajo na spremenljivke okolja za konfiguriranje informacij o preverjanju pristnosti. To je priročno, ker tako pomembni podatki ne bodo shranjeni v nobeni datoteki, kar pomeni, da bodo zanesljivo zaščiteni pred zunanjimi osebami.

Obstaja veliko drugih pogostejših situacij, v katerih boste morda morali prebrati spremenljivke ali spremeniti sistemsko okolje. Orodja in tehnike, opisani v tem priročniku, so odlična podlaga za razvoj vaših spretnosti pri delu s spremenljivkami in njihovi pravilni uporabi.

Oznake: ,

Okoljske spremenljivke v Linuxu so posebne spremenljivke, ki jih definira lupina in uporabljajo programi med izvajanjem. Določita jih lahko sistem in uporabnik. Spremenljivke sistemskega okolja Linux definira sistem in uporabljajo jih programi na ravni sistema.

Na primer, ukaz PWD uporablja sistemsko spremenljivko za ohranitev prejšnjega delovnega imenika. Spremenljivke uporabniškega okolja nastavi uporabnik za trenutno lupino, začasno ali trajno. Celoten koncept dodajanja in odstranjevanja spremenljivk lupine se vrti okoli več datotek, ukazov in različnih lupin.

V širšem smislu je lahko spremenljivka okolja treh vrst:

1. Lokalne spremenljivke okolja

Te spremenljivke so definirane samo za trenutno sejo. Po koncu seje bodo trajno izbrisani, ne glede na to, ali gre za oddaljeni dostop ali terminalski emulator. Ne shranjujejo se v nobenih datotekah, ampak se ustvarjajo in brišejo s posebnimi ukazi.

2. Spremenljivke lupine po meri

Te spremenljivke lupine v Linuxu so definirane za določenega uporabnika in se naložijo vsakič, ko se uporabnik prijavi z uporabo lokalnega terminala ali se poveže na daljavo. Takšne spremenljivke so običajno shranjene v konfiguracijskih datotekah: .bashrc, .bash_profile, .bash_login, .profile ali drugih datotekah v uporabniškem imeniku.

3. Spremenljivke sistemskega okolja

Te spremenljivke so na voljo v celotnem sistemu za vse uporabnike. Naložijo se ob zagonu sistema iz sistemskih konfiguracijskih datotek: /etc/environment, /etc/profile, /etc/profile.d/ /etc/bash.bashrc.

Konfiguracijske datoteke spremenljivk okolja Linux

Tukaj si bomo na hitro ogledali različne zgoraj navedene konfiguracijske datoteke, ki se uporabljajo za konfiguracijo okoljskih spremenljivk za celoten sistem ali določenega uporabnika.

.bashrc

To je datoteka spremenljivk, specifična za uporabnika. Naloži se vsakič, ko uporabnik ustvari terminalsko sejo, to je, z drugimi besedami, odpre nov terminal. Vse spremenljivke okolja, ustvarjene v tej datoteki, začnejo veljati vsakič, ko se začne nova terminalska seja.

.bash_profile

Te spremenljivke začnejo veljati vsakič, ko se uporabnik poveže na daljavo prek SSH. Če ta datoteka manjka, bo sistem poiskal .bash_login ali .profile.

/etc/okolje

Ta datoteka je namenjena ustvarjanju, urejanju in brisanju vseh spremenljivk okolja na sistemski ravni. Spremenljivke okolja, ustvarjene v tej datoteki, so na voljo za celoten sistem, za vsakega uporabnika in celo pri oddaljeni povezavi.

/etc/bash.bashrc

Sistem bashrc. Ta datoteka se izvede za vsakega uporabnika vsakič, ko ustvari novo terminalsko sejo. To deluje samo za lokalne uporabnike; ko so povezani prek interneta, te spremenljivke ne bodo vidne.

/etc/profile

Profil sistemske datoteke. Vse spremenljivke iz te datoteke so dostopne vsakemu uporabniku v sistemu le, če je prijavljen na daljavo. Vendar ne bodo na voljo pri ustvarjanju lokalne terminalske seje, to je, če preprosto odprete terminal.

Vse spremenljivke okolja Linux, ustvarjene s temi datotekami, lahko preprosto odstranite tako, da jih izbrišete od tam. Šele po vsaki spremembi se morate odjaviti in znova prijaviti ali zagnati ta ukaz:

izvorno ime datoteke

Dodajanje uporabniških in sistemskih okoljskih spremenljivk v Linuxu

Zdaj, ko poznate malo teorije, pojdimo k praksi. Lokalne spremenljivke okolja v Linuxu lahko ustvarite z naslednjimi ukazi:

var=vrednost
$ izvoz var=vrednost

Te spremenljivke bodo na voljo samo za trenutno terminalsko sejo.

Obstaja več ukazov, s katerimi lahko odstranite spremenljivke okolja:

1. Uporaba env

Privzeto lahko uporabite env za ogled vseh nastavljenih spremenljivk okolja. Toda z možnostjo -i vam omogoča, da začasno odstranite vse spremenljivke lupine in izvedete ukaz brez spremenljivk.

ukaz env –i

Var je katera koli spremenljivka, ki jo želite posredovati temu ukazu.

Ta ukaz bo zagnal lupino brez kakršnih koli spremenljivk okolja:

Po zagonu takšnega okolja ne bo na voljo nobena spremenljivka, po izhodu pa se bo vse vrnilo na svoje mesto.

2. Uporaba unset

To je še en način za odstranitev spremenljivk okolja Linux. Unset odstrani spremenljivko po imenu do konca trenutne seje:

nenastavljeno ime_spremenljivke

3. Nastavite vrednost spremenljivke na ""

To je najlažji način za odstranitev spremenljivk okolja v Linuxu; če spremenljivko nastavite na prazno, jo odstranite do konca trenutne seje.

Opomba: S temi metodami lahko spremenite vrednosti sistemskih ali uporabniških spremenljivk, vendar bodo pomembne le za trenutno sejo.

Ustvarjanje uporabniških in sistemskih spremenljivk okolja

V tem razdelku si bomo ogledali, kako nastaviti in izbrisati sistemske in uporabniške spremenljivke ne samo za trenutno sejo, ampak tako, da učinek ostane po ponovnem zagonu.

1. Nastavite in odstranite lokalne spremenljivke v Linuxu

Ustvarimo lokalno spremenljivko VAR in jo nastavimo na poljubno vrednost, nato jo razveljavimo in poskrbimo, da je izbrisana:

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

Drug način za ustvarjanje spremenljivke je z ukazom izvoz. Odstranimo ga tako, da dodelimo prazno vrednost:

izvoz VAR="Izgubljeno"
$ echo $VAR
$VAR=
$ echo $VAR

Sedaj pa ustvarimo spremenljivko VAR2 in ji dajmo vrednost. In nato začasno odstranite vse lokalne spremenljivke tako, da zaženete env -i. Zagnal bo lupino brez spremenljivk. Po vnosu izhoda bodo vse spremenljivke obnovljene.

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

Nastavljanje in odstranjevanje uporabniških spremenljivk

Uredite datoteko .bashrc v domačem imeniku tako, da dodate ukaz za izvoz za izvoz želene spremenljivke. Nato zaženite izvorni ukaz, da uveljavite spremembe. Ustvarimo na primer spremenljivko CD:

Dodajte to vrstico (o, nato prilepi, nato Esc in :wq):

izvoz CD="To je izgubljeni dom"

Zdaj je treba posodobiti konfiguracijo:

vir.bashrc
$echo $CD

Če želite odstraniti to spremenljivko, jo preprosto odstranite iz .bashrc.

Zdaj pa dodamo spremenljivko okolja z uporabo .bash_profile. Ta spremenljivka bo, kot že veste, na voljo samo med oddaljeno prijavo:

vi .bash_profile

Dodajte vrstico:

izvoz VAR2="To je izgubljeni dom"

In zaženite te ukaze, da uveljavite spremembe in preverite, ali je bila spremenljivka dodana:

izvor.bash_profile
$ echo $VAR2

Spremenljivka ni na voljo, ker ste ustvarili lokalno terminalsko sejo, zdaj se povežite prek ssh:

ssh uporabnik@localhost
$ echo $VAR2

To spremenljivko okolja lahko izbrišete na enak način kot v prejšnjem primeru, tako da jo izbrišete iz datoteke.

komentar: Te spremenljivke so vedno na voljo, vendar ne za vse uporabnike.

Nastavljanje in odstranjevanje sistemskih spremenljivk okolja

Ustvarimo spremenljivko, ki je na voljo vsem uporabnikom v vseh terminalskih sejah razen oddaljenih, tako da jo dodamo v /etc/bash.profile:

vi /etc/bash.profile

export VAR="To je sistemska spremenljivka"

Nato posodobimo:

vir /etc/bash.bashrc

Zdaj je ta spremenljivka na voljo vsem uporabnikom, v vseh terminalih:

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

Če želite dati spremenljivko okolja na voljo vsem uporabnikom, ki se na ta računalnik povežejo na daljavo, uredite datoteko /etc/profile:

export VAR1="To je sistemska spremenljivka samo za oddaljene seje"

Posodobite konfiguracijo in preverite razpoložljivost spremenljivke, na voljo bo samo na daljavo:

vir /etc/profile
$ echo $VAR1

Če morate dodati spremenljivko okolja v Linuxu, tako da je dostopna na daljavo in za lokalne seje, jo izvozite v /etc/environment:

vi /etc/environment

export VAR12="Na voljo sem povsod"

Preverjamo:

vir /etc/okolje
$ echo $VAR12
$sudo su
$ echo $VAR12
$ izhod
$ssh lokalni gostitelj
$ echo $VAR12

2.2. Spremenljivke okolja

Operacijski sistem podpira posebno vrsto virov, imenovanih Spremenljivke okolja (spremenljivke okolja). Te spremenljivke so par IME – VREDNOST . Ime se lahko začne s črko in je sestavljeno iz črk, številk in podčrtajev.

Če želite nadomestiti vrednost spremenljivke v ukazni vrstici, pred imenom spremenljivke postavite znak $:

$ echo $USER gost

Če spremenljivka ni nastavljena, se vrne prazen niz.

Če želite nastaviti vrednost spremenljivke, uporabite operator dodelitve (v primeru lupin, podobnih Bournu):

$TEST=test

ali vgrajeni operator množice (v primeru C-podobnih):

$ nastavite TEST=test

Ukaz set brez argumentov izpiše vrednosti vseh spremenljivk, nastavljenih v okolju:

$ 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 ....

Spremenljivke so lahko lokalne za dani proces ali globalne za sejo. Lokalne vrednosti za spremenljivke lahko nastavite tako, da pred njimi pokličete ukaze:

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

Vsebino nabora spremenljivk za sejo lahko ocenite tako, da pokličete tolmačev vgrajeni ukaz env v primeru Bournove podobnih tolmačev (sh, ksh, bash, zsh, pdksh ...) in printenv v primeru tolmačev klonov C-Shell (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

Nabori ukazov školjka je mogoče prevesti v ukazne datoteke, imenovane skripte, kjer prva vrstica v posebni vrsti komentarja določa tolmača ukazov za izvajanje tega niza. Na primer, ustvarimo datoteko v urejevalniku besedil z imenom test z naslednjo vsebino:

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

Ta program bo na standardni izhod natisnil besedilno sporočilo "TEST spremenljivka: " in vrednost spremenljivke TEST, če je navedena. Zaženete ga lahko iz ukazne vrstice, tako da ga kot parameter posredujete tolmaču ukazov:

$sh test TEST spremenljivka:

Spremenljivko lahko naredite globalno s stavkom izvoz (Bourne) ali setenv (C-SHell):

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

Lokalne vrednosti spremenljivk za izvajanje danega programa lahko nastavite tako, da pred njimi pokličete ukaze:

$ TEST=test2 sh test TEST spremenljivka: test2

Odstranjevanje spremenljivk okolja se izvede s stavkom unset.

Koncept parametra v lupini bash podoben konceptu spremenljivke v običajnih programskih jezikih. Ime parametra (ali identifikator) je lahko beseda, sestavljena iz abecednih znakov, številk in podčrtajev (samo prvi znak besede ne more biti številka), številka ali eden od naslednjih posebnih znakov: * , @ , # , ? , - (vezaj), $ , ! , 0 , _ (podčrtano).

Za parameter pravimo, da je nastavljen ali nastavljen, če mu je dodeljena vrednost. Vrednost je lahko tudi prazen niz. Za prikaz vrednosti parametra uporabite simbol $ pred njegovim imenom. Da, ekipa

$ echo ime

prikaže besedo na zaslonu ime, in ekipa

$echo $name

vrne vrednost spremenljivke name (če je seveda nastavljena).

5.6.1 Raznolikost parametrov

Parametri so razdeljeni v tri razrede: položajni parametri, posebni parametri(katerih imena so pravkar navedeni posebni znaki) in spremenljivke lupine.

Imena (identifikatorji) pozicijski parametri sestavljen iz ene ali več števk (ne ene ničle). Vrednosti pozicijskega parametra so argumenti, ki so bili podani ob zagonu lupine (prvi argument je vrednost pozicijskega parametra 1 itd.). Vrednost pozicijskega parametra lahko spremenite z vgrajenim ukazom set. Vrednosti teh parametrov se spreminjajo tudi, ko lupina izvaja eno od funkcij (o tem bomo razpravljali spodaj, v razdelek 5.8).

Posebni parametri so vzorci, katerih zamenjava (zamenjava) se izvede na naslednji način.

Tabela 5.2. Posebni parametri.

Parameter

Pravila zamenjave

Zamenjano s pozicijskimi parametri, začenši s prvim. Če je zamenjava izvedena znotraj dvojnih narekovajev, se ta parameter nadomesti z eno samo besedo, sestavljeno iz vseh pozicijskih parametrov, ločenih s prvim znakom posebne spremenljivke IFS (o kateri govorimo spodaj). To pomeni, da je ``$*"" enakovreden ``$1c$2c...", kjer je c prvi znak v vrednosti spremenljivke IFS. Če je IFS nastavljen na prazno ali nima nastavljene vrednosti, so parametri ločeni s presledki

Zamenjano s pozicijskimi parametri, začenši s prvim. Če je zamenjava izvedena znotraj dvojnih narekovajev, se vsak parameter nadomesti z ločeno besedo. Tako je `` $@"" enakovreden ""$1"" ""$2"" ... Če ni pozicijskih parametrov, potem ni dodeljena nobena vrednost (parameter @ se preprosto odstrani)

Zamenjano z decimalno vrednostjo števila pozicijskih parametrov

Nadomeščeno z izhodnim statusom zadnjega izvajanega programa v ospredju

(vezaj)

Zamenjano s trenutnim naborom vrednosti zastavic, nastavljenih z vgrajenim ukazom set ali pri zagonu same lupine

Zamenjano z identifikatorjem procesa (P ID) lupine

Zamenjano z identifikatorjem procesa (P ID) zadnjega izvedenega ukaza v ozadju (asinhrono izvedenega)

Zamenjano z imenom lupine ali skripta za zagon. če bash zažene za izvajanje paketne datoteke, $0 je ime datoteke. V nasprotnem primeru je ta vrednost enaka celotni poti do lupine

(podčrtaj)

Zamenjano z zadnjim argumentom prejšnjega izvedenega ukaza (če je to parameter ali spremenljivka, je njegova vrednost nadomeščena)

Posebni parametri, navedeni v zgornji tabeli, se razlikujejo po tem, da se nanje lahko sklicujete; Ne morete jim dodeliti vrednosti.

Spremenljivka z vidika lupine je to parameter, označen z imenom. Vrednosti so spremenljivkam dodeljene z uporabo naslednjega operatorja:

$name=vrednost

Kje ime je ime spremenljivke in vrednost— vrednost, ki mu je dodeljena (lahko je prazen niz). Ime spremenljivke je lahko sestavljeno samo iz številk in črk in se ne sme začeti s številko. Vrednost je lahko poljubno besedilo. Če vrednost vsebuje posebne znake, mora biti v narekovajih. Dodeljena vrednost teh narekovajev seveda ne vsebuje. Če je spremenljivka nastavljena, jo je mogoče odstraniti z vgrajenim ukazom lupine nenastavljeno.

Nabor vseh nastavljenih spremenljivk lupine z njihovimi dodeljenimi vrednostmi se imenuje okolje ali okolje lupine. Ogledate si ga lahko z ukazom set brez parametrov (mogoče bi morali organizirati cevovod "nastavi | manj"). Izhod tega ukaza navaja vse spremenljivke okolja po abecednem vrstnem redu. Če si želite ogledati vrednost ene specifične spremenljivke, lahko namesto ukaza set(v izpisu katerega še vedno lahko iščete in iščete želeno spremenljivko) lahko uporabite ukaz

$echo $name

(vendar morate v tem primeru poznati ime spremenljivke, ki vas zanima).

Med spremenljivkami, ki jih boste videli v izhodu ukaza, so set, obstaja nekaj zelo zanimivih spremenljivk. Na primer, bodite pozorni na spremenljivko RANDOM. Če ukaz zaženete večkrat zapored

$ echo $NAKLJUČNO

vsakič boste dobili novo vrednost. Dejstvo je, da ta spremenljivka vrne naključno celo število iz intervala 0 - 32.768.

5.6.2 Pozivi lupine

Ena od zelo pomembnih spremenljivk ima ime PS1. Ta spremenljivka določa vrsto povabila, ki bash Izhodi, ko čaka na naslednji ukaz, ki ga mora vnesti uporabnik. Privzeto je ta spremenljivka nastavljena na "\s-\v\$ ". Pravzaprav v bash Obstajajo štiri vabila, ki se uporabljajo v različnih situacijah. Spremenljivka PS1 določa vrsto poziva, ki se izda, ko ukazna lupina čaka na vnos ukaza. Sekundarni poziv, določen s spremenljivko PS2, se prikaže, ko ukazna lupina čaka, da uporabnik vnese še nekaj podatkov, potrebnih za nadaljevanje izvajanja ukaza ali programa. Privzeta spremenljivka PS2 ima pomen" >" . Morda ste že videli ta poziv, ko ste zagnali ukaz mačka za vnos podatkov s tipkovnice v datoteko. Drug primer je ukaz ftp, po zagonu katerega ima tudi vabilo to obliko.

Spremenljiv poziv PS3, ki se uporablja v ukazu izberite. Spremenljiv poziv PS4, se natisne pred vsakim ukazom v tem trenutku bash spremlja potek izvedbe. Privzeta vrednost je " + ".

Če tako želite, lahko spremenite vrsto spremenljivk PS1 in PS2. V tem primeru lahko uporabite poljubne simbole, vnesene s tipkovnice, kot tudi določeno število posebnih znakov, ki se pri generiranju pozivnega niza dekodirajo v skladu s tabelo. 5.3 (navajamo samo nekatere izmed njih, na primer; za celoten seznam glejte stran priročnika za pripomoček bash) .

Tabela 5.3. Posebni znaki za generiranje vabila

Simbol

Njegov pomen

Pisk (ASCII koda 07)

Datum v obliki "Dan, mesec, dan", na primer sreda, 17. oktober.

Ime gostitelja do prve pike

Polno ime gostitelja

Trenutni čas v 24-urnem formatu: HH:MM:SS (ure:minute:sekunde)

Trenutni čas v 12-urnem formatu: HH:MM:SS

Trenutni čas v 12-urnem zapisu zjutraj/popoldne

Ime uporabnika, ki je zagnal lupino

Polno ime trenutnega delovnega imenika (začenši pri korenu)

Trenutni delovni imenik (pot ni navedena)

Simbol #, če lupina deluje kot superuporabnik, in simbol $ , če lupino zažene običajni uporabnik.

\nnn

Znak z osmiško kodo nnn

Nova vrstica (pomik vrstice)

Ime školjke

Trenutna številka ekipe

Poševnica nazaj

Začetek zaporedja nenatisljivih znakov (ta znak se lahko uporabi za vključitev zaporedja kontrolnih znakov terminala v besedilo opisa orodja)

Konec zaporedja nenatisljivih znakov

Serijska številka tega ukaza v zgodovini ukazov

Trenutna številka ukaza (zaporedna številka ukaza, ki se izvaja v trenutni seji) se lahko razlikuje od številke tega ukaza v seznamu zgodovine ukazov, saj slednji vključuje ukaze, ki so bili shranjeni v datoteki zgodovine ukazov.

Ko je lupina prebrala vrednost spremenljivke, ki definira namig, jo je mogoče zamenjati v skladu s pravili za razširitev parametrov, zamenjave v imenih ukazov in aritmetičnih izrazih ter razdelitev besed. Ta pravila bodo obravnavana spodaj, v razdelku. 5.7.

Na primer po izvedbi ukaza (ker je v nizu presledek, so obvezni narekovaji)

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

standardni poziv bo prikazal oglati oklepaj, uporabniško ime, simbol @ , ime računalnika, presledek, ime trenutnega imenika (brez poti), oglati oklepaj in simbol $ (če preprost uporabnik teče v lupini) oz # (če se lupina izvaja kot root).

5.6.3 Spremenljivka POT

Druga zelo pomembna spremenljivka ima ime POT. Določa seznam poti do imenikov, v katerih bash išče datoteke (predvsem datoteke z ukazi) v primerih, ko v ukazni vrstici ni navedena celotna pot do datoteke. Posamezni imeniki na tem seznamu so ločeni z dvopičji. Privzeta spremenljivka POT vključuje imenike /usr/local/bin, /bin, /usr/bin, /usr/X11R6/bin, zgleda takole:

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

Če želite dodati imenik na ta seznam, morate zagnati naslednji ukaz:

# PATH=$PATH:nova_pot.

Ko izvaja iskanje, ukazna lupina išče imenike v vrstnem redu, kot so navedeni v spremenljivki PATH.

Upoštevajte, da lahko trenutni imenik vključite v ta seznam tako, da spremenljivki PATH dodate piko. Vendar to ni priporočljivo iz varnostnih razlogov: napadalec bi lahko postavil ukaz v javni imenik, katerega ime se ujema z enim od ukazov, ki jih pogosto izvaja superuporabnik, vendar izvaja popolnoma drugačna dejanja (še posebej, če je trenutni imenik na začetku seznam iskalnih poti).

5.6.4 Spremenljivka IFS

Ta spremenljivka podaja notranji ločilnik polj, ki se uporablja pri operaciji razdelitve besed pri pretvorbah ukazne vrstice, ki jih izvede ukazna lupina, preden zažene ukazno vrstico za izvedbo. Privzeta vrednost te spremenljivke je "<Пробел><Символ_ новой_ строки>".

5.6.5 Trenutni in domači imeniki

Ime trenutnega imenika je shranjeno v spremenljivki okolja (imenovani PWD), vrednost te spremenljivke pa se spremeni ob vsakem zagonu programa CD(in tudi pri spreminjanju trenutnega imenika na kakršen koli drug način, na primer prek Midnight Commanderja).

Podobno je polno ime (in pot) domačega imenika uporabnika, ki je zagnal postopek, shranjeno v spremenljivki HOME.

5.6.6 Ekipa izvoz

Ko ukazna lupina zažene program ali ukaz, jim posreduje nekaj spremenljivk okolja. Da se spremenljivka okolja posreduje procesu, ki se zažene iz lupine, jo je treba nastaviti s posebnim ukazom izvoz, tj

$name=vrednost

treba zapisati

$izvozno ime=vrednost

V tem primeru bodo imeli vsi programi, ki se zaženejo iz lupine (vključno s sekundarnimi primerki same lupine), dostop do spremenljivk, definiranih na ta način, to pomeni, da lahko pokličejo svoje vrednosti po imenu.

V. Kostromin (kos in rus-linux dot net) - 5.6. Parametri in spremenljivke. Okolje školjke