М.Гаррелс. Bash гарын авлага. Хувьсагч. Линукс дээр локал, хэрэглэгчийн болон системийн орчны хувьсагчдыг хэрхэн тохируулах, идэвхгүй болгох талаар бүрхүүлийн хувьсагч хаана бичигдсэнийг хэрхэн олох вэ

Хувьсах төрлүүд

Дээрх жишээнүүдээс харахад бүрхүүлийн хувьсагчдыг ихэвчлэн том үсгээр бичдэг. Bash нь хоёр төрлийн хувьсагчийн жагсаалтыг хадгалдаг:

Глобал хувьсагчид

Глобал эсвэл орчны хувьсагчийг бүх бүрхүүлд ашиглах боломжтой. Орчны хувьсагчдыг харуулахын тулд та тушаалуудыг ашиглаж болно envэсвэл printenv. Эдгээр тушаалуудыг багцын нэг хэсэг болгон өгсөн болно sh-utils.

Доорх нь ердийн гаралт юм:

Franky ~> printenv CC=gcc CDPATH=.:~:/usr/local:/usr:/ CFLAGS=-O2 -fomit-frame-заагч COLORTERM=gnome-терминал CXXFLAGS=-O2 -fomit-frame-заагч DISPLAY=: 0 = hq.garrels.be = tors_se_seght = / gteghe_sestope = 1 GNESTESES_SESTOME = 1 GNESTONESEST = 1 GNESTOMESESS = 1 GNESTOMESESE = 1 GNESTOMESESEST = 1 GNESTOMESED = 1 GNESTOMES_SESTESESE = 1 GNESTOMESEDES = 1 ГОНГОЛЧУУД -1.2-gnome2 GWMCOLOR=хар ногоон GWMTERM=xterm HISTFILESIZE=5000 history_control=үл тоомсорлодог HISTSIZE=2000 HOME=/nethome/franky HOSTNAME=octarine.hq.garrels.be INPUTRC=/etc/JAVFRANK/JAVFRANK/JAVFRANKY=MEVAC= 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/lessexpipe=fle.sh %s LOCAL_MACHINE=октарин LOGNAME=franky LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd= 40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*. com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz= 01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01; 31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31: *.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*. tif=01;35: MACHINES=octarine MAILCHECK=60 MAIL=/var/mail/franky MANPATH=/usr/man:/usr/share/man/:/usr/local/man:/usr/X11R6/man MEAN_MACHINES= octarine MOZ_DIST_BIN=/usr/lib/mozilla MOZILLA_FIVE_HOME=/usr/lib/mozilla MOZ_PROGRAM=/usr/lib/mozilla/mozilla-bin MTOOLS_FAT_COMPATIBILITY=1 MYMALLOC=0 NNTPPORT_PATIBILITY=1 NNTPPORT_PAGIN=19TH_PROGRAM/ 4 залгаас/: / usr/lib/netscape/plugins OLDPWD=/nethome/franky OS=Linux PAGER=бага 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 байна \w\[\033 PS2=Илүү оролт> PWD=/nethome/franky SESSION_MANAGER=local/octarine.hq.garrels.be:/tmp/.ICE-unix/22106 SHELL=/bin /bash SHELL_LOGIN=--нэвтрэх SHLVL=2 SSH_AGENT_PID=22161 SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass SSH_AUTH_SOCK=/tmp/ssh-XXmhQ4fC/agent.22161 SSH_ASKPASS franky USER=franky _=/usr/bin/printenv VISUAL=vi WINDOWID=20971661 XAPPLRESDIR=/nethome/franky/app-defaults XAUTHORITY=/nethome/franky/.Xauthority XENVIRONMENT=/nethome/SEfranky=LEFRANky/. /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=байхгүй XTERMID= XWINHOME=/usr/X11R6 X=X11R6 - YACC=bison y

Орон нутгийн хувьсагчид

Орон нутгийн хувьсагчийг зөвхөн одоогийн командын бүрхүүлд ашиглах боломжтой. Хэрэв суулгасан тушаал бол тогтоосонямар ч параметргүйгээр ашиглагдвал бүх хувьсагч (ажлын үеийн хувьсагчийг оруулаад) болон функцуудын жагсаалтыг буцаана. Форматчлалыг ашиглаж, хувьсагчдын байршлыг харгалзан эрэмбэлсэн үр дүнг гаргацгаая.

Командуудын үр дүнг харьцуулан үүсгэсэн diff файлыг доор харуулав printenvТэгээд тогтоосон, тушаалаар бас харагдах функцуудын жагсаалтаас хассаны дараа тогтоосон:

Franky ~> diff багц. эрэмбэлэгдсэн хэвлэх. эрэмбэлэгдсэн | 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

Хувьсагчдыг агуулгаар нь хуваах

Хувьсагчдыг орон нутгийн болон глобал гэж хуваахаас гадна хувьсагчид ямар агуулга хадгалагдаж байгаагаас хамааран тэдгээрийг ангилалд хувааж болно. Үүнтэй холбогдуулан хувьсагчдыг дөрвөн төрөлд хуваадаг.

  • Мөр хувьсагч
  • Бүхэл тоон хувьсагч
  • Хувьсагч - тогтмолууд
  • Хувьсагч - массив

Бид эдгээр төрлийн хувьсагчдыг 10-р бүлэгт авч үзэх болно. Одоо бид хувьсагчиддаа бүхэл тоо болон мөрийн утгуудыг ашиглах болно.

Хувьсагч үүсгэх

Хувьсагчдад том, жижиг үсгүүдийг ялгаж, том үсгийг анхдагчаар ашигладаг. Заримдаа орон нутгийн хувьсагчийг бичихдээ жижиг үсгээр бичих нь заншилтай байдаг. Гэсэн хэдий ч та хувьсагчийн нэрэнд дурын тэмдэгт ашиглаж, том жижиг үсгийг хольж болно. Та мөн тоонуудыг хувьсагчийн нэрэнд ашиглаж болно, гэхдээ тоогоор эхэлсэн нэрийг зөвшөөрөхгүй:

Prompt> export 1number=1 bas: export: `1number=1": хүчинтэй танигч биш

Командын бүрхүүлд хувьсагчийг тохируулахын тулд дараах тушаалыг ашиглана уу

VARNAME="утга"

Тэнцүү тэмдгийн эргэн тойронд хоосон зай бүү оруул, энэ нь алдаа гаргах болно. Хувьсагчдад утгыг оноохдоо мөрийн агуулгыг хашилтанд оруулах нь сайн зуршил юм; энэ нь таныг алдаа гаргах магадлалыг бууруулдаг.

Том, жижиг үсэг, тоо, хоосон зайг ашиглах зарим жишээ (команд олдсонгүй гэсэн мессеж нь асуудал байгааг харуулж байна - ойролцоогоор.):

Franky ~> MYVAR1="2" franky ~> echo $MYVAR1 2 franky ~> first_name="Franky" franky ~> echo $first_name Franky franky ~> бүтэн_нэр="Franky M. Singh" franky ~> echo $full_name Franky M. Singh franky ~> MYVAR-2="2" bash: MYVAR-2=2: тушаал олдсонгүй franky ~> MYVAR1 ="2" bash: MYVAR1: тушаал олдсонгүй franky ~> MYVAR1 = "2" bash: 2: тушаал олдсонгүй franky ~> тохируулаагүй MYVAR1 нэр бүтэн_нэр franky ~> цуурай $MYVAR1 $first_name $бүтэн_нэр<--no output-->илэн далангүй ~>

Экспортын хувьсагч

Дээрх жишээнд үзүүлсэн шиг үүсгэсэн хувьсагч нь зөвхөн одоогийн командын бүрхүүлд боломжтой. Энэ бол локал хувьсагч: одоогийн бүрхүүлийн хүүхэд процессууд энэ хувьсагчийг мэдэхгүй байх болно. Хувьсагчдыг дэд бүрхүүлд дамжуулахын тулд бидэнд хэрэгтэй экспортлохҮүнийг суулгасан командыг ашиглана экспортлох. Экспортолсон хувьсагчдыг орчны хувьсагч гэж нэрлэдэг. Үнэ цэнийг оноож, экспортлох нь ихэвчлэн нэг алхамаар хийгддэг:

VARNAME="утга" экспортлох

Дэд бүрхүүл нь эцэг эх процессоос удамшсан хувьсагчдыг өөрчилж болох боловч хүүхэд процессоор хийсэн өөрчлөлтүүд эцэг процесст нөлөөлөхгүй. Үүнийг дараах жишээн дээр харуулав.

Фрэнки ~> бүтэн_нэр="Franky M. Singh" franky ~> bash franky ~> echo $full_name franky ~> exit franky ~> экспортын бүтэн нэр franky ~> bash franky ~> echo $бүтэн_нэр Фрэнки М.Сингх franky ~> экспортын бүтэн нэр= "Агуу Чарльз" franky ~> цуурай $бүтэн_нэр Агуу Чарльз франк ~> гарах франк ~> цуурай $бүтэн_нэр Фрэнки М.Сингх франк ~>

Эхний удаа дэд бүрхүүл бүтэн нэрийн утгыг уншихыг оролдоход утгыг тохируулаагүй байна (команд цуурайхоосон мөрийг харуулж байна). Дэд бүрхүүлээс гарсны дараа full_name хувьсагч эх бүрхүүл рүү экспортлогдох бөгөөд хувьсагчийг утга өгөгдсөний дараа экспортлох боломжтой. Дараа нь эх бүрхүүлээс экспортлогдсон хувьсагчийг харуулах шинэ дэд бүрхүүлийг эхлүүлнэ. Хувьсагчийг өөрчилсөн бөгөөд түүнд өөр утга хадгалагдах боловч эх бүрхүүлд энэ хувьсагчийн утга ижил хэвээр байна.

Нөөцлөгдсөн хувьсагчид

Bourne Reserved Shell Variables

Bash нь Bourne shell шиг тодорхой бүрхүүлийн хувьсагчдыг ашигладаг. Зарим тохиолдолд Bash нь хувьсагчдаа өгөгдмөл утгыг нь оноодог. Доорх хүснэгтийг харуулав Товч тодорхойлолтЭдгээр энгийн бүрхүүлийн хувьсагчууд:

Хүснэгт 3.1. Bourne Reserved Shell Variables

Хувьсагчийн нэр Тодорхойлолт

Баригдсан командыг ашиглан зам хайхад ашигладаг сангуудын жагсаалт, хоёр цэгээр тусгаарлагдсан CD.

Гэрийн лавлах одоогийн хэрэглэгч; өгөгдмөл байдлаар суулгасан тушаалд ашиглагддаг CD. Энэ хувьсагчийн утгыг мөн tilde тэмдэгтийн оронд ашигладаг.

Талбаруудыг салгахад ашигласан тэмдэгтүүдийн жагсаалт; бүрхүүл нь бүх орлуулалтыг хийсний дараа үр дүнг бие даасан үг болгон хуваахад ашиглагддаг.

Хэрэв энэ параметрийг файлын нэрээр тохируулсан ба MAILPATH тохируулаагүй бол Bash нь заасан файлд захидал хүлээн авсан тухай хэрэглэгчдэд мэдэгдэх болно.

Командын бүрхүүл нь шинэ захидал байгаа эсэхийг үе үе шалгадаг файлын нэрсийн хоёр цэгээр тусгаарлагдсан жагсаалт.

Баригдсан тушаалаар боловсруулсан параметрийн сүүлчийн аргументын утга getopts.

Баригдсан тушаалаар боловсруулсан сүүлийн параметрийн аргументын индекс getopts.

Бүрхүүлийн командуудыг хайдаг сангуудын хоёр цэгээр тусгаарлагдсан жагсаалт.

Анхдагч мөр. Өгөгдмөл утга нь ""\s-\v\$ "" байна.

Хоёрдогч шуурхай шугам. Өгөгдмөл утга нь ""> "" байна.

Bash нөөцлөгдсөн хувьсагчид

Эдгээр хувьсагчийн утгыг Bash-д тохируулсан эсвэл ашигладаг боловч бусад бүрхүүлд тэдгээрийг тусгайлан авч үздэггүй.

Хүснэгт 3.2. Bash нөөцлөгдсөн хувьсагчид

Хувьсагчийн нэр Тодорхойлолт

Энэ хувьсагч нь бүрхүүл нь хэрэглэгчтэй хэрхэн харилцаж, даалгавар гүйцэтгэхийг хянадаг.

Одоогийн Bash жишээг эхлүүлэхийн тулд бүрэн замыг ашигласан.

Хэрэв энэ хувьсагчийг скриптийг ажиллуулахын тулд Bash-г ажиллуулах үед тохируулсан бол түүний утгыг скриптийг ажиллуулахаас өмнө унших ёстой эхлүүлэх файлын нэр болгон ашигладаг.

Одоогийн Bash-ийн хувилбарын дугаар.

Хувьсагч нь массив элементүүд нь хувилбарын мэдээллийг хадгалдаг зөвхөн уншигдах массив юм энэ тохиолдлынБаш.

Сонгосон жагсаалтыг хэвлэхдээ суулгасан командыг ашигладаг сонгохтерминалын өргөнийг тодорхойлох. Дохио хүлээн авах үед автоматаар тохируулна СИГВИНЧ.

Заагч $(COMP_WORDS) одоогийн курсорын байрлалыг хадгалдаг үг.

Одоогийн тушаалын мөр.

Одоогийн командын эхлэлтэй харьцуулахад одоогийн курсорын байрлалыг заагч.

Хувьсагч нь одоогийн командын мөрөнд ашиглагдаж буй бие даасан үгсээс бүрдэх массив юм.

Хувьсагч нь Bash-ын уншдаг массив юм боломжит сонголтуудГүйцэтгэлийг програмчлахад зориулагдсан үйлчилгээгээр дуудагдсан бүрхүүлийн функцээр үүсгэгдсэн мөр бөглөх

Хувьсагч нь лавлах стекийн одоогийн төлөвийг хадгалдаг массив юм.

Тоон үр дүнтэй хэрэглэгчийн ID Одоогийн хэрэглэгчийн ID.

Үндсэн засварлагч нь суулгагдсан командын үед ашиглагддаг fc-e параметрийг зааж өгсөн

Файлын нэрийг автоматаар бөглөх үед үл хэрэгсэх дагаваруудын хоёр цэгээр тусгаарлагдсан жагсаалт.

Одоогоор ажиллаж байгаа бүрхүүлийн функцын нэр.

Файлын нэрийг солих үед үл хэрэгсэх файлын нэрсийн багцыг тодорхойлсон загваруудын хоёр цэгээр тусгаарлагдсан жагсаалт.

Хувьсагч нь одоогийн хэрэглэгчийн харьяалагдах бүлгүүдийн жагсаалтыг агуулсан массив юм.

Командын түүхийг солих, хурдан орлуулах, дууссан орлуулалтыг жетон болгон хуваахыг хянадаг гурван хүртэлх тэмдэгт.

Тушаалын түүхэн дэх одоогийн командын дугаар эсвэл тушаалын түүхийн жагсаалт дахь түүний индекс.

Тушаалыг командын түүхийн файлд нэмэх эсэхийг тодорхойлно.

Командын түүхийг хадгалсан файлын нэр. Өгөгдмөл утга: ~/.bash_history.

Командын түүхийн файлд агуулагдах мөрийн хамгийн дээд тоо нь 500 байна.

Командыг командын түүхийн жагсаалтад хадгалах эсэхийг тодорхойлох хоёр цэгээр тусгаарласан загваруудын жагсаалт.

Командын түүхийн жагсаалтад хадгалах боломжтой командын хамгийн дээд тоо нь 500 байна.

/etc/hosts файлтай ижил форматтай файлын нэрийг агуулж байгаа бөгөөд командын бүрхүүл хостын нэрийг бөглөх шаардлагатай үед унших боломжтой.

Одоогийн хостын нэр.

Bash ажиллаж байгаа машиныг дүрсэлсэн мөр.

Оролтын урсгалын төгсгөлийн тэмдэгтийг хүлээн авах үед бүрхүүл юу хийхийг удирдана EOF(файлын төгсгөлийн тэмдэг).

Анхдагч /etc/inputrc файлыг орлох Readline програмыг эхлүүлэх файлын нэр.

Нэр нь LC_ тэмдэгтээр эхэлсэн хувьсагчдаас тодорхой заагаагүй бүх категорийн хэлний ангиллыг тодорхойлоход хэрэглэгддэг.

Энэ хувьсагч нь LANG хувьсагчийн утгыг болон локалчлалын категорийг тодорхойлсон LC_ тэмдэгтүүдээр эхэлдэг бусад бүх хувьсагчдыг дарна.

Энэ хувьсагч нь хээтэй таарсан файлын нэрийг эрэмбэлэх үед хэрэглэгдэх эрэмбэлэх дарааллыг тодорхойлж, файлын нэр солих болон загвар тааруулах муж, тохирох анги, тэмдэгтийн харьцуулалтын дүрмийн тайлбарыг тодорхойлдог.

Энэ хувьсагч нь тэмдэгтүүдийг хэрхэн тайлбарлах, тэдгээр нь файлын нэрийг өргөтгөх болон загварт тааруулах тодорхой ангилалд хамаарах эсэхийг тодорхойлдог.

Энэ хувьсагч нь мөрийг боловсруулахад хэрэглэгдэх нутагшуулах категорийг тодорхойлдог давхар хашилт, өмнө нь $ тэмдэг байна.

Энэ хувьсагч нь тооны форматын нутагшуулах категорийг тодорхойлдог.

Одоогоор ажиллаж байгаа скрипт эсвэл бүрхүүлийн функц дэх мөрийн дугаар.

Баригдсан тушаалаар ашиглагддаг сонгохсонгосон жагсаалтуудыг харуулах баганын уртыг тодорхойлох.

Стандарт GNU CPU-COMPANY-SYSTEM форматыг ашиглан Bash-ийн ажиллаж байгаа системийн төрлийг бүрэн дүрсэлсэн мөр.

Бүрхүүл нь MAILPATH эсвэл MAIL хувьсагчид заасан файлууд дахь имэйлийг хэр давтамжтайгаар шалгах ёстойг секундын дотор зааж өгнө.

Баригдсан тушаалыг ашиглан өмнөх ажлын лавлахыг тохируулсан CD.

Хэрэв 1 гэж тохируулсан бол Bash нь суулгасан тушаалаар үүсгэсэн алдааны мэдэгдлүүдийг харуулна getopts.

Тайлбарлах мөр үйлдлийн систем, Bash-ийг ажиллуулдаг.

Хувьсагч нь сүүлийн шугам дахь процессын гаралтын төлөвийн утгуудын жагсаалтыг агуулсан массив юм (энэ нь нэг тушаалаас бүрдэж болно).

Хэрэв bash эхлэх үед энэ хувьсагчийг орчинд нэмбэл бүрхүүл POSIX горимд шилжинэ.

Хэрэв энэ хувьсагчийг тохируулсан бол утгыг анхдагч мөр (PS1) гарахаас өмнө гүйцэтгэх тушаал гэж тайлбарлана.

Энэ хувьсагчийн утгыг тушаалд ашиглана сонгохшуурхай мөр болгон. Өгөгдмөл - ""#? ""

Цуурайлтыг идэвхжүүлэхээр -x сонголтыг тохируулсан үед командын мөрийн өмнө гарах мөрийн утга тушаалын мөр; анхдагч нь ""+ "" байна.

Баригдсан тушаалаар тохируулсан одоогийн ажлын лавлах CD.

Энэ параметрт хандах бүрд 0-ээс 32767 хүртэлх хугацаанд санамсаргүй бүхэл тоо үүсдэг. Энэ хувьсагчийн утгыг санамсаргүй тоо үүсгэгчид ашигладаг.

Суулгацын командын өгөгдмөл хувьсагч унших.

Энэ хувьсагч нь тушаалын бүрхүүлийг ажиллуулснаас хойш хэдэн секунд өнгөрснийг заадаг.

Командын бүрхүүлд тохируулсан параметрүүдийн жагсаалт; хоёр цэгээр тусгаарлагдсан.

Bash-ийн шинэ жишээ эхлэх бүрт нэгээр нэмэгдэнэ.

Энэ параметрийн утгыг өмнө нь нөөцлөгдсөн үгээр дамжуулах шугамын ажиллах цагийн мэдээллийг гаргах форматыг зааж өгдөг мөр болгон ашигладаг. цаг.

Хэрэв TMOUT хувьсагчийг тэгээс их утгаар тохируулсан бол түүнийг суулгасан командын үндсэн завсарлага гэж үзнэ. унших. Командын бүрхүүлийг интерактив горимд эхлүүлэх үед энэ утгыг эхний мөрийг гаргасны дараа бүрхүүл оруулахыг хүлээх секундын тоо гэж ойлгогдоно. Хэрэв оролт хүлээн аваагүй бол энэ хугацааны дараа Bash гарна.

Тоон утга, одоогийн хэрэглэгчийн жинхэнэ хэрэглэгчийн ID.

Дэлгэрэнгүй мэдээллийг Bash хүний ​​хуудас эсвэл баримтаас үзнэ үү. Зарим хувьсагчид зөвхөн унших боломжтой, зарим нь автоматаар тохируулагддаг, зарим нь анхдагч утгаас өөр зүйлд тохируулагдсан үед утгагүй болдог.

Тусгай параметрүүд

Командын бүрхүүл нь зарим параметрүүдийг тусгай аргаар авч үздэг. Эдгээр параметрүүдийг зөвхөн тэдгээрээс утгыг авахад ашиглах боломжтой бөгөөд тэдгээрт утгыг оноож болохгүй.

Хүснэгт 3.3. Bash тусгай хувьсагч

Тэмдэг Тодорхойлолт

Эхнийхээс эхлэн байрлалын параметрүүдийг буцаана. Параметрийг давхар хашилтанд зааж өгсөн тохиолдолд IFS тусгай хувьсагчийн эхний тэмдэгтээр тусгаарлагдсан параметр бүрийн утгыг агуулсан нэг үгээр солигдоно.

Эхнийхээс эхлэн байрлалын параметрүүдийг буцаана. Параметрийг давхар хашилтанд оруулах үед параметр бүрийг тусдаа үг болгон буцаана.

Аравтын бутархайн тоогоор тодорхойлсон байрлалын параметрүүдийн тоог буцаана.

Өмнөх горимд гүйцэтгэсэн сүүлчийн дамжуулах хоолойн буцах кодыг буцаана.

Зураас параметр нь суулгасан командыг дуудах үед тохируулсан одоогийн параметрийн тугуудыг буцаана. тогтоосон, эсвэл тэдгээрийг бүрхүүл өөрөө тохируулсан (жишээлбэл, -i).

Бүрхүүлийн процессын ID-г буцаана.

Арын (асинхрон) горимд гүйцэтгэсэн сүүлчийн тушаалын процессын ID-г буцаана.

Бүрхүүл эсвэл скриптийн нэрийг буцаана.

"Доор зураас" параметрийн утгыг тушаалын бүрхүүл эхлүүлж, агуулж байх үед тохируулна бүтэн нэраргументуудын жагсаалтад дамжуулагдсаны дагуу гүйцэтгэсэн бүрхүүл эсвэл скрипт. Дараа нь утгыг өмнөх командын сүүлийн аргументаар солино. Энэ параметр нь тухайн команд руу экспортлогдсон орчинд гүйцэтгэсэн болон байрлуулсан команд бүрийн бүрэн замыг зааж өгдөг. Имэйлийг шалгах үед энэ параметр нь шуудангийн файлын нэрийг агуулна.

Байршлын параметрүүд нь бүрхүүлийн скриптийн нэрний дараах үгс юм. Тэдгээрийг $1, $2, $3 гэх мэт хувьсагчдад хадгалдаг. Шаардлагатай бол хувьсагчдыг дотоод массив руу нэмнэ. $# хувьсагч нь дараах энгийн скрипт дээр харуулсан параметрийн нийт тоог зааж өгдөг.

# positional.sh # Энэ скрипт нь байрлалын 3 параметрийг уншиж хэвлэнэ. POSPAR1="$1" POSPAR2="$2" POSPAR3="$3" цуурай "$1 бол анхны байрлалын параметр болох \$1." echo "$2 нь хоёр дахь байрлалын параметр, \$2." echo "$3 нь гурав дахь байрлалын параметр, \$3." echo echo "Байршлын параметрийн нийт тоо $# байна."

Скриптийг ажиллуулахдаа та хэдэн ч аргументыг зааж өгч болно:

Franky ~> positional.sh нэг хоёр гурав дөрөв тав нэг нь эхний байрлалын параметр, $1. хоёр нь хоёр дахь байрлалын параметр, $2. гурав нь гурав дахь байрлалын параметр буюу 3 доллар. Нийт байрлалын параметрийн тоо 5. franky ~> positional.sh one two one нь эхний байрлалын параметр, $1. хоёр нь хоёр дахь байрлалын параметр, $2. гурав дахь байрлалын параметр болох $3. Байршлын параметрийн нийт тоо 2 байна.

Эдгээр параметрүүдийг ашиглах талаар нэмэлт мэдээлэл авахыг хүсвэл 7-р бүлэг, Нөхцөл байдлын мэдэгдлүүд болон ээлжийн суулгасан командын хэсгийг үзнэ үү.

Бусад тусгай параметрүүдийн зарим жишээ:

Franky ~> grep толь бичиг /usr/share/dict/words толь бичиг 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: Ийм файл эсвэл лавлах байхгүй байна franky ~> echo $? 1 илэн далангүй ~>

Хэрэглэгч илэн далангүйкомандыг оруулснаар эхэлнэ grep, хувьсагчийн утгыг _ . Энэ бүрхүүлийн процессын ID нь 10662. Хэрэв зарим ажлын гүйцэтгэлийг шилжүүлсэн бол дэвсгэр горим, хувьсагчаар! үйл явцын тодорхойлогч байх болно суурь ажил. Ажлын командын бүрхүүл нь bash. Хэрэв алдаа гарсан бол хувьсагчид? 0 (тэг) -ээс ялгаатай буцах код байх болно.

Хувьсагчтай скриптүүдийн хэрэглээний хамрах хүрээг өргөжүүлэх

Хувьсагч нь таны скриптийг уншихад хялбар болгохоос гадна өөр контекст эсвэл өөр зорилгоор скриптийг хурдан ашиглахад тусална. Дараах жишээг авч үзье - алсын сервер дээр ажилладаг маш энгийн скрипт нөөц хуулбархэрэглэгчийн гэрийн лавлах илэн далангүй:

#!/bin/bash # Энэ скрипт нь миний гэрийн лавлахын нөөцлөлтийг хийдэг. cd /home # Энэ нь tar архивыг үүсгэдэг cf /var/tmp/home_franky.tar franky > /dev/null 2>&1 # Эхлээд хуучин bzip2 файлыг устгана уу. Хэрэв архив # байхгүй бол энэ нь зарим хэсгийг үүсгэдэг тул дахин чиглүүлэх алдаа. Дараа нь шинэ шахсан файл үүсгэ. rm /var/tmp/home_franky.tar.bz2 2> /dev/null bzip2 /var/tmp/home_franky.tar # Файлыг өөр хост руу хуулах - бидэнд энэ ажлыг хөндлөнгийн оролцоогүйгээр хийх ssh товчлуурууд бий. scp /var/tmp/home_franky.tar.bz2 bordeaux:/opt/backup/franky > /dev/null 2>&1 # Бүртгэлийн файлд цагийн тэмдэг үүсгэх. огноо >> /home/franky/log/home_backup.log цуурай нөөцлөлт амжилттай болсон >> /home/franky/log/home_backup.log

Юуны өмнө, хэрэв та шаардлагатай бол файл, лавлахыг гараар зааж өгвөл алдаа гаргах магадлал өндөр байдаг. Хоёрдугаарт, хэрэглэгч гэж бодъё илэн далангүйЭнэ скриптийг хэрэглэгч рүү дамжуулахыг хүсэж байна Кэрол, дараа нь өмнө Кэролскриптийг ашиглах боломжтой болно Нөөц хуулбартүүний гэрийн лавлах, тэр нэлээд засварлах хэрэгтэй болно. Хэрэв хэрэглэгч ижил зүйл тохиолдох болно илэн далангүйЭнэ скриптийг ашиглан бусад сангуудыг нөөцлөхийг хүсэх болно. Хамрах хүрээг өргөжүүлэхийн тулд бүх файл, лавлах, хэрэглэгчийн нэр, серверийн нэр гэх мэт хувьсагчдыг ашиглана уу. Дараа нь та зөвхөн нэг удаа утгыг өөрчлөх хэрэгтэй бөгөөд тодорхой параметр тохиолдох бүх газрыг олохын тулд скриптийг бүхэлд нь үзэх шаардлагагүй болно. Жишээ:

#!/bin/bash # Энэ скрипт нь миний гэрийн лавлахын нөөцлөлтийг хийдэг. # Скриптийг өөртөө ажиллуулахын тулд хувьсагчийн утгыг өөрчил: 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 # Энэ нь tar архив үүсгэдэг cf $TARFILE $BACKUPFILES > /dev/null 2>&1 # Эхлээд хуучин bzip2 файлыг устгана уу. Хэрэв архив # байхгүй бол энэ нь зарим хэсгийг үүсгэдэг тул дахин чиглүүлэх алдаа. Дараа нь шинэ шахсан файл үүсгэ. rm $BZIPFILE 2> /dev/null bzip2 $TARFILE # Файлыг өөр хост руу хуулах - бидэнд энэ ажлыг хөндлөнгийн оролцоогүйгээр хийх ssh товчлуурууд бий. scp $BZIPFILE $SERVER:$REMOTEDIR > /dev/null 2>&1 # Бүртгэлийн файлд цагийн тэмдэг үүсгэх. огноо >> $LOGFILE цуурай нөөцлөлт амжилттай болсон >> $LOGFILE

Сервертэй ажиллахдаа бүрхүүл нь түүний зан төлөв, нөөцөд хандах хандалтыг тодорхойлдог их хэмжээний мэдээллийг эмхэтгэдэг. Эдгээр сонголтуудын зарим нь бүрхүүлийн тохиргооноос олддог бол бусад нь хэрэглэгчийн оруулсан мэдээллээр тодорхойлогддог.

Бүрхүүлийн энэ мэдээллийг хянах нэг арга бол хүрээлэн буй орчин юм. Хүрээлэн буй орчин нь сесс эхлэх бүрд бүрхүүл үүсгэсэн системийг тодорхойлох хувьсагчдыг агуулсан хэсэг юм.

Энэхүү заавар нь хүрээлэн буй орчинтой хэрхэн харилцаж, орчин болон бүрхүүлийн хувьсагчдыг интерактив болон ашиглан унших эсвэл тохируулах талаар тайлбарладаг. тохиргооны файлууд. Бүх үйлдлүүд нь Ubuntu 12.04 VPS дээр хийгддэг, гэхдээ орчин үеийн аль ч хувилбар Линукс түгээлтадилхан ажиллах ёстой.

Хүрээлэн буй орчин ба түүний хувьсагчид хэрхэн ажилладаг

Бүрхүүлийн сессийг идэвхжүүлэх бүрт бүрхүүл болон түүний хүүхэд процессуудад байх ёстой мэдээллийг цуглуулж, эмхэтгэх процесс эхэлдэг. Бүрхүүл нь энэ өгөгдлийг систем дээрх олон янзын файл, тохиргооноос авдаг.

Ерөнхийдөө хүрээлэн буй орчин нь бүрхүүлийн процесст шаардлагатай тохиргоог цуглуулж, тохируулдаг дамжуулах байгууламжаар хангадаг бөгөөд энэ нь эргээд тэдгээрийг өөрийн хүүхэд процессууд руу дамжуулдаг.

Хүрээлэн буй орчин нь түлхүүр-утга хосыг агуулсан мөр хэлбэртэй байна. Олон утгыг ихэвчлэн хоёр цэгээр (:) тусгаарладаг. Хос бүр ерөнхийдөө иймэрхүү харагддаг:

ТҮЛХҮҮР=утга1:утга2:...

Хэрэв утгад хоосон зай байгаа бол та давхар хашилт хэрэглэх шаардлагатай:

KEY = "хоосон зайтай утга"

Энэ тохиолдолд түлхүүр нь хоёрын аль нэгийн хувьсагчийг хэлнэ одоо байгаа төрөл зүйл: орчин эсвэл бүрхүүлийн хувьсагч.

Хүрээлэн буй орчны хувьсагчидЭдгээр нь одоогийн бүрхүүлд зориулагдсан хувьсагч бөгөөд бүх хүүхдийн бүрхүүл эсвэл процессоор удамшдаг. Хүрээлэн буй орчны хувьсагчдыг бүрхүүлээс эхлүүлсэн процессуудад мэдээлэл дамжуулахад ашигладаг.

Бүрхүүлийн хувьсагчидЭдгээр нь зөвхөн тогтоосон эсвэл тодорхойлсон бүрхүүлд агуулагдах хувьсагч юм. Тэдгээрийг ихэвчлэн одоогийн өгөгдлийг (жишээлбэл, одоогийн ажлын лавлах) бүртгэхэд ашигладаг.

Ихэвчлэн ийм хувьсагчдыг том үсгээр тэмдэглэдэг. Энэ нь хэрэглэгчдэд бусад нөхцөл дэх орчны хувьсагчдыг ялгахад тусалдаг.

Хэвлэх бүрхүүл болон орчны хувьсагч

Сесс бүр өөрийн бүрхүүл болон орчны хувьсагчдыг бүртгэдэг. Тэднийг гаргах хэд хэдэн арга бий.

Бүх орчны хувьсагчийн жагсаалтыг харахын тулд env эсвэл printenv командуудыг ашиглана уу. Анхдагч байдлаар тэд яг ижил үр дүнг гаргах болно:

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

Энэ бол printenv болон env командуудын гаралтын ердийн жишээ юм. Эдгээр тушаалууд нь зөвхөн хэд хэдэн бие даасан функцээр ялгаатай байдаг. Жишээлбэл, printenv нь хувьсагчийн утгыг асууж болно:

printenv SHELL
/bin/bash

env команд нь хувьсагчийн тодорхойлолтуудын багцыг команд руу дамжуулж программуудын ажиллах орчныг өөрчлөх боломжийг олгодог.

env VAR1="blahblah" командын_сонголтуудыг ажиллуулах

Дээр дурдсанчлан хүүхдийн процессууд нь эх процессын орчны хувьсагчдыг өвлөн авдаг бөгөөд энэ нь утгыг өөрчлөх эсвэл хүүхдийн процессуудад нэмэлт хувьсагчийг нэвтрүүлэх боломжийг олгодог.

Printenv командын гаралтаас харахад орчны олон хувьсагчийг ашиглан үүсгэгддэг системийн файлуудболон хэрэглэгчийн оролцоогүйгээр үйл явц.

Гэхдээ та бүрхүүлийн хувьсагчдыг хэрхэн хардаг вэ?

Үүнийг хийхийн тулд 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=()
. . .

Дүрмээр бол энэ жагсаалт нэлээд урт байна. Үүнийг илүү тохиромжтой форматаар харуулахын тулд пейжер програм ашиглан нээнэ үү.

Энэ жагсаалтад асар их тоо орсон байна нэмэлт мэдээлэл, дотор байгаа Энэ мөчшаардлагагүй (жишээлбэл, зарим bash функцууд).

Гаралтыг "цэвэрлэх" тулд та shell функцийг алгасах POSIX горимд set командыг ажиллуулах хэрэгтэй. Үүнийг одоогийн орчныг өөрчлөхгүйн тулд дэд бүрхүүлд хийх шаардлагатай:

(set -o posix; багц)

Энэ үйлдэл нь бүх орчин болон бүрхүүлийн хувьсагчдыг харуулах болно.

Та мөн энэ гаралтыг env/printenv командын гаралттай харьцуулж, зөвхөн бүрхүүлийн хувьсагчдыг жагсаахыг оролдож болно, гэхдээ эдгээр командын гаралт өөр тул ийм жагсаалт тохиромжтой биш байх болно:

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

Тохируулах команд нь утгуудыг хашилтанд хэвлэдэг, харин printenv болон env командуудад тийм биш тул жагсаалтад олон орчны хувьсагч байх магадлалтай.

Гэсэн хэдий ч, энэ нь тухайн сессэд тохируулагдсан орчин болон бүрхүүлийн хувьсагчдыг харах гайхалтай арга юм.

Ийм хувьсагчдыг бүх төрлийн зорилгоор ашигладаг. Эдгээр нь процессуудын хоорондох сессийн байнгын утгыг тохируулах өөр арга замыг бий болгож, файлд өөрчлөлт оруулах хэрэгцээг арилгадаг.

Үндсэн орчин ба бүрхүүлийн хувьсагчууд

Зарим онцгой хэрэгцээтэй орчин болон бүрхүүлийн хувьсагчдыг ихэвчлэн ашигладаг.

Байгаль орчны үндсэн хувьсагчдын жагсаалтыг доор харуулав.

  • SHELL: Оруулсан тушаалуудыг тайлбарладаг бүрхүүлийг дүрсэлдэг. Ихэнх тохиолдолд bash-ийг анхдагчаар суулгадаг боловч шаардлагатай бол энэ утгыг өөрчилж болно.
  • ХУГАЦАА: Бүрхүүлийг эхлүүлэх үед дууриагдсан терминалын төрлийг заана. Үйл ажиллагааны шаардлагаас хамааран янз бүрийн тоног төхөөрөмжийн терминалуудыг дуурайж болно. Ерөнхийдөө та энэ талаар санаа зовох шаардлагагүй болно.
  • ХЭРЭГЛЭГЧ: одоогийн хэрэглэгч.
  • P.W.D.: одоогийн ажлын лавлах.
  • OLDPWD: өмнөх ажлын лавлах. cd - командыг ажиллуулсан тохиолдолд бүрхүүл үүнийг хадгалдаг.
  • LS_ӨНГӨ: ls командын гаралтыг өнгө болгоход хэрэглэгдэх өнгөний кодыг тодорхойлно. Энэ гаралт нь хэрэглэгчдэд командын үр дүнг хурдан уншихад тусалдаг (жишээлбэл, файлын төрлийг хурдан ялгах).
  • ШУУД: Хэрэглэгчийн одоогийн шуудангийн хайрцгийн зам.
  • ЗАМ: Командыг гүйцэтгэх үед систем ханддаг сангуудын жагсаалт. Хэрэглэгч командыг ажиллуулах үед систем эдгээр сангуудыг гүйцэтгэх файлыг заасан дарааллаар шалгадаг.
  • LANG: Тэмдэгтийн кодчилол зэрэг одоогийн хэл болон нутагшуулах тохиргоо.
  • ГЭР: Одоогийн хэрэглэгчийн гэрийн лавлах.
  • _ : Сүүлийн командыг гүйцэтгэсэн.

Орчны хувьсагчдын жагсаалтыг шалгасны дараа бүрхүүлийн хувьсагчийн жагсаалтыг шалгана уу:

  • BASHOPTS: Bash-г гүйцэтгэхэд ашигласан сонголтуудын жагсаалт. Үүнийг хүрээлэн буй орчин хүлээгдэж буй байдлаар ажиллаж байгаа эсэхийг шалгахад ашиглаж болно.
  • BASH_ХУВИЛБАР: Хүн унших боломжтой bash-ийн ажиллаж байгаа хувилбар.
  • BASH_VERSINFO: bash-ийн машинд уншигдах хувилбар.
  • БАГАНА: Багана дахь гаралтын өргөнийг заана.
  • DISTACK: Pushd болон popd командуудад хандах боломжтой сангуудын стек.
  • HISTFILIZE: Тушаалын түүхийн файлд агуулагдах мөрүүдийн хамгийн их тоо.
  • HISTSIZE: Түүхийн жагсаалтад санах тушаалын тоо.
  • HOSTNAME: Одоогийн хостын нэр.
  • IFS:Тушаалын мөрөнд дотоод оролтын талбар тусгаарлагч. Анхдагч нь зай юм.
  • PS1: Бүртгэлийн сессийг эхлүүлэх үед командын мөрийн төрлийг тодорхойлох эхний мөрийг тодорхойлно. PS2 хувьсагч нь тушаал олон мөрийг хамарсан тохиолдолд хоёрдогч мөрийг тохируулдаг.
  • БҮРСҮҮД: Set ашиглан тохируулж болох бүрхүүлийн сонголтууд.
  • UID: Одоогийн хэрэглэгчийн өвөрмөц танигч.

Бүрхүүл болон орчны хувьсагчдыг тохируулах

Бүрхүүл болон орчны хувьсагчдын хоорондын ялгааг харуулах, эдгээр хувьсагчдыг тохируулах синтаксийг тайлбарлах цөөн хэдэн жишээг доор харуулав.

Бүрхүүлийн хувьсагчид үүсгэх

Эхлээд та одоогийн сессийн бүрхүүлийн хувьсагчдыг тохируулах хэрэгтэй. Энэ нь маш энгийн бөгөөд та зөвхөн нэр, утгыг зааж өгөхөд хангалттай. Өмнө дурьдсанчлан ийм хувьсагчийн нэрийг том үсгээр бичдэг.

TEST_VAR="Сайн уу дэлхий!"

Утга нь хоосон зай агуулж байгаа тул энэ жишээн дээр ишлэл ашигладаг. Нэмж дурдахад, анхаарлын тэмдэг нь дан хашилтанд ороогүй эсвэл ороогүй тохиолдолд командын түүхэнд ханддаг bash бүрхүүлийн тусгай тэмдэгт тул та энд ганц хашилт ашиглах хэрэгтэй.

Тиймээс, үүссэн бүрхүүлийн хувьсагч нь одоогийн сессэд хүчинтэй боловч түүний хүүхэд процессууд руу дамждаггүй.

Үүнийг шалгахын тулд тогтоосон командын үр дүнд grep командыг ашиглана уу:

багц | grep TEST_VAR
TEST_VAR="Сайн уу дэлхий!"

Мөн та printenv командын үр дүнд grep-г ажиллуулснаар энэ хувьсагч нь орчны хувьсагч биш эсэхийг шалгах боломжтой.

printenv | grep TEST_VAR

Энэ үйлдэл нь ямар ч үр дүнд хүргэхгүй.

Үүнийг ямар ч бүрхүүл эсвэл орчны хувьсагчийн утгыг харуулахад ашиглаж болно.

$TEST_VAR
Сайн уу Дэлхий!

Таны харж байгаагаар хувьсагчийн утгад хандахын тулд та $ тэмдгийг ашиглах хэрэгтэй.

Дахин хэлэхэд үр дүнд бий болсон хувьсагчийг ямар ч хүүхэд процесс руу шилжүүлэх ёсгүй. Үүнийг шалгахын тулд одоогийн бүрхүүл дотор шинэ bash бүрхүүлийг байрлуул:

bash
$TEST_VAR

Хэрэв та хүүхдийн бүрхүүлийг өргөжүүлж, хувьсагчийн агуулгыг нээхийг оролдвол юу ч хэвлэгдэхгүй. Энэ нь бүх зүйл хэвийн ажиллаж байна гэсэн үг юм.

Өөрийн анхны бүрхүүл рүү буцахын тулд exit гэж бичнэ үү:

Хүрээлэн буй орчны хувьсагчдыг бий болгох

Одоо бүрхүүлийн хувьсагчийг орчны хувьсагч болгон хувиргаж үзээрэй. Энэ нь хувьсагчийг экспортлох замаар хийгддэг. Экспортыг гүйцэтгэх командыг зохих ёсоор нэрлэсэн.

Энэ тушаал нь бүрхүүлийн хувьсагчийг орчны хувьсагч болгон хувиргадаг. Бүх зүйл зөв хийгдсэн эсэхийг шалгахын тулд та орчны хувьсагчдын жагсаалтыг дахин харж болно:

printenv | grep TEST_VAR
TEST_VAR=Сайн уу Дэлхий!

Одоо энэ хувьсагчийг энэ жагсаалтад харуулав. Та мөн хүүхдийн бүрхүүлийг дахин өргөжүүлж болно:

bash
$TEST_VAR
Сайн уу Дэлхий!

Агуу их! Хүүхдийн бүрхүүл нь анхны бүрхүүлээс хувьсагчийг хүлээн авсан. Хүүхдийн бүрхүүлээс гарахын өмнө өөр нэг хувьсагчийг экспортлохыг оролдоно уу.

экспорт NEW_VAR="Экспортыг туршиж байна"

Хувьсагч экспортлогдсон эсэхийг шалгана уу:

printenv | grep NEW_VAR
NEW_VAR=Экспортыг туршиж байна

Одоо анхны бүрхүүл рүүгээ буцна уу:

Энэ хувьсагчийг нээх боломжтой эсэхийг шалгана уу:

Үр дүн нь буцаж ирэхгүй

Энэ нь орчны хувьсагчдыг зөвхөн хүүхдийн процесст дамжуулдаг тул тохиолддог. Эх бүрхүүлийн орчны хувьсагчдыг тохируулах ямар ч суулгасан арга байхгүй. Ихэнх тохиолдолд энэ нь програмыг эхлүүлсэн үйлдлийн орчинд нь саад учруулахаас сэргийлдэг.

NEW_VAR хувьсагчийг хүүхдийн бүрхүүлийн орчны хувьсагч болгон тохируулсан. Энэ хувьсагч нь энэ бүрхүүл болон түүний үндсэн бүрхүүлүүд болон процессуудад хүчинтэй. Хэрэглэгч анхны бүрхүүл рүү буцаж ирсний дараа энэ орчин устсан.

Хувьсагчдыг зөөж, дахин тохируулах

TEST_VAR хувьсагч нь орчны хувьсагч хэвээр байна. Үүнийг дахин бүрхүүлийн хувьсагч болгохын тулд дараахыг бичнэ үү:

экспорт -n TEST_VAR

Одоо энэ хувьсагч нь орчны хувьсагч байхаа больсон:

printenv | grep TEST_VAR

Энэ нь дахин бүрхүүлийн хувьсагч юм:

багц | grep TEST_VAR
TEST_VAR="Сайн уу дэлхий!"

Хүрээлэн буй орчин эсвэл бүрхүүлийн хувьсагч байж болох хувьсагчийг бүрэн дахин тохируулахын тулд unset командыг ашиглана уу:

Ийм хувьсагч байхгүй эсэхийг шалгаарай:

Хувьсагчийг дахин тохируулсан тул үр дүн хэвлэгдсэнгүй.

Орчны хувьсагчдыг автоматаар тохируулах

Өмнө дурьдсанчлан, олон программууд хэрхэн ажиллах ёстойг тодорхойлохын тулд орчны хувьсагчдыг ашигладаг. Шинэ бүрхүүл үүсгэх бүрт шаардлагатай хувьсагчдыг тохируулах нь нэлээд тохиромжгүй байдаг. Нэмж дурдахад, олон хувьсагчийг нэвтэрсэн даруйд тохируулдаг. Хувьсагчдыг хэрхэн автоматаар тохируулах вэ?

Bash shell нь олон тохиргооны файлуудыг уншдаг тул энэ нь эхлээд санагдсанаас арай илүү төвөгтэй юм.

Shell хуралдааны төрлүүд

Bash бүрхүүл нь сессийг хэрхэн эхлүүлснээс хамааран өөр өөр тохиргооны файлуудыг уншдаг. Бүрхүүлийг тодорхойлсон эхний хоёр төрлийн сесс нь эхлэл ба хүүхэд юм.

Эхлэл эсвэл анхны бүрхүүл(нэвтрэх бүрхүүл) нь хэрэглэгчийн зөвшөөрлийн дараа нээгддэг бүрхүүлийн сесс юм. Хэрэв хэрэглэгч терминал руу нэвтэрч эсвэл SSH ашиглан баталгаажуулвал эхлүүлэх бүрхүүл нээгдэнэ.

Хэрэв шинэ сессийг зөвшөөрөгдсөн (эхлэх) сессээс эхлүүлсэн бол (өмнөх жишээнүүдийн адил шинэ bash shell эхлүүлсэн) энэ сесс нь охин компани (буснэвтрэхбүрхүүл). Энэ сессийг нээхийн тулд та зөвшөөрлийн процедурыг давах шаардлагагүй.

Мөн бүрхүүлийн сесс нь интерактив эсвэл интерактив бус байж болно.

Интерактив сессбүрхүүл (интерактив бүрхүүл) нь терминалтай холбогдсон сесс юм. Интерактив бус бүрхүүл сесс нь терминалтай холбоогүй сесс юм.

Тиймээс, бүрхүүлийн сессийг дараах байдлаар ангилдаг: эхлэл-хүүхэд, интерактив-интерактив бус.

SSH ашиглан нээгдсэн ердийн сесс нь ихэвчлэн интерактив эхлэх сесс юм. Командын мөрөөр ажилладаг скрипт нь ихэвчлэн интерактив бус хүүхэд сессээр ажилладаг. Терминал сесс нь эдгээр хоёр шинж чанарын өөр хослол юм.

Сессийг эхлүүлэх сесс эсвэл хүүхэд сесс гэж ангилснаар систем нь бүрхүүл сессийг эхлүүлэхийн тулд ямар файлуудыг унших шаардлагатайг ойлгодог.

Тиймээс эхлээд эхлүүлэх сесс нь /etc/profile файлаас тохиргоог авдаг. Дараа нь хэрэглэгчийн тодорхойлсон тохиргоог авахын тулд хэрэглэгчийн гэрийн лавлахаас эхлүүлэх бүрхүүлийн тохиргооны файлыг хайдаг.

Энэ сесс ~/.bash_profile, ~/.bash_login болон ~/.profile файлуудыг уншдаг бөгөөд бусад файлуудыг уншдаггүй.

Хүүхдийн сесс нь эргээд /etc/baash.bashrc, дараа нь хэрэглэгчийн ~/.bash.rc файлыг уншиж орчныг байршуулна.

Интерактив бус бүрхүүлүүд нь шинэ орчин үүсгэхийн тулд BASH_ENV орчны хувьсагч болон заасан файлыг уншдаг.

Орчны хувьсагчдыг хэрхэн тохируулах талаар

Таны харж байгаагаар тохиргоонууд нь өөр өөр файлууд дээр тархсан байна.

Энэ нь системийг маш уян хатан болгодог бөгөөд энэ нь эхлэл болон хүүхдийн бүрхүүлд өөр өөр параметрүүдийг тохируулах шаардлагатай үед тодорхой нөхцөл байдалд ашигтай байдаг. Гэхдээ эдгээр бүрхүүлүүд нь ерөнхийдөө ижил тохиргоог ашигладаг.

Аз болоход ихэнх Линукс түгээлтүүд нь хүүхдийн бүрхүүлийн тохиргооны файлыг эхлүүлэх бүрхүүлийн тохиргооны эх сурвалж болгон зааж өгдөг. Энэ нь та хүүхдийн бүрхүүлийн тохиргооны файлд хоёр сессийн орчны хувьсагчдыг тодорхойлж болно гэсэн үг юм.

Ихэвчлэн хоёр бүрхүүл нь хэрэглэгчийн тодорхойлсон орчны хувьсагчдыг ашигладаг. Энэ нь та ~/.bashrc файлд эдгээр хувьсагчдыг тохируулах боломжтой гэсэн үг юм.

Энэ файлыг нээх:

Энэ нь аль хэдийн зарим өгөгдлийг агуулсан байх магадлалтай. Энд тохируулсан утгуудын ихэнх нь bash сонголтууд бөгөөд орчны хувьсагчтай ямар ч холбоогүй болно. Энэ файлын хувьсагчдыг командын мөртэй яг адилхан тохируулсан болно.

экспорт VARNAME=утга

Шаардлагатай бүх хувьсагчдыг оруулсны дараа файлыг хаа. Дараагийн удаад бүрхүүл сессийг эхлүүлэхэд энд тохируулсан хувьсагчдыг уншиж, бүрхүүлийн орчинд шилжүүлэх болно. Одоогийн сессийг өгөгдсөн файлыг уншихыг хэлэхийн тулд дараахыг оруулна уу:

эх сурвалж ~/.bashrc

Системийн хэмжээнд хувьсагчдыг тохируулахын тулд тэдгээрийг /etc/profile, /etc/bash.bashrc, эсвэл /etc/environment руу нэмнэ үү.

Үр дүн

Бүрхүүлийн болон орчны хувьсагч нь бүрхүүлийн бүх сессүүдэд үргэлж байдаг тул тэдэнтэй хэрхэн ажиллахаа мэдэх нь ялангуяа ашигтай байдаг. Тэдгээрийг эх процессын тохиргоог хүүхэд процесс руу дамжуулах, мөн файлаас гадуур тохиргоог тохируулахад ашиглаж болно.

Энэ нь тодорхой нөхцөл байдалд хэд хэдэн давуу талыг өгдөг. Жишээлбэл, зарим байршуулах механизм нь баталгаажуулалтын мэдээллийг тохируулахын тулд орчны хувьсагчдад тулгуурладаг. Энэ нь тохиромжтой, учир нь ийм чухал өгөгдөл нь ямар ч файлд хадгалагдахгүй бөгөөд энэ нь гадны хүмүүсээс найдвартай хамгаалагдах болно гэсэн үг юм.

Хувьсагчдыг унших эсвэл системийн орчныг өөрчлөх шаардлагатай өөр олон нийтлэг нөхцөл байдал бий. Энэхүү гарын авлагад тайлбарласан хэрэгсэл, арга техник нь хувьсагчтай ажиллах, тэдгээрийг зөв ашиглах ур чадвараа хөгжүүлэх маш сайн үндэс суурь болж өгдөг.

Шошго: ,

Линукс дахь орчны хувьсагч нь бүрхүүлээр тодорхойлогддог тусгай хувьсагч бөгөөд программууд ажиллах үед ашигладаг. Тэдгээрийг систем болон хэрэглэгч тодорхойлж болно. Линукс системийн орчны хувьсагчдыг системээр тодорхойлж, системийн түвшний программуудад ашигладаг.

Жишээлбэл, PWD тушаал нь өмнөх ажлын лавлахыг хадгалахын тулд системийн хувьсагчийг ашигладаг. Хэрэглэгчийн орчны хувьсагчийг хэрэглэгч одоогийн бүрхүүлд түр эсвэл бүрмөсөн тохируулдаг. Бүрхүүлийн хувьсагчдыг нэмэх, хасах бүхэл бүтэн ойлголт нь олон файл, тушаал, өөр өөр бүрхүүлүүдийн эргэн тойронд эргэлддэг.

Илүү өргөнөөр хэлбэл орчны хувьсагч нь гурван төрлийн байж болно:

1. Орон нутгийн орчны хувьсагч

Эдгээр хувьсагч нь зөвхөн одоогийн сессэд тодорхойлогддог. Сеанс дууссаны дараа тэдгээр нь алсаас хандалт эсвэл терминал эмулятор гэх мэт бүрмөсөн устах болно. Тэдгээр нь ямар ч файлд хадгалагдаагүй, харин тусгай тушаалуудыг ашиглан үүсгэж устгадаг.

2. Custom Shell Variables

Линукс дээрх эдгээр бүрхүүлийн хувьсагчууд нь тодорхой хэрэглэгчдэд зориулагдсан бөгөөд хэрэглэгч дотоод терминал ашиглан нэвтрэх эсвэл алсаас холбогдох бүрт ачаалагддаг. Ийм хувьсагчдыг ихэвчлэн тохиргооны файлд хадгалдаг: .bashrc, .bash_profile, .bash_login, .profile эсвэл хэрэглэгчийн директорт байрлах бусад файлууд.

3. Системийн орчны хувьсагч

Эдгээр хувьсагчийг бүх хэрэглэгчдэд систем даяар ашиглах боломжтой. Эдгээр нь системийг эхлүүлэх үед системийн тохиргооны файлуудаас ачаалагддаг: /etc/environment, /etc/profile, /etc/profile.d/ /etc/bash.bashrc.

Линукс орчны хувьсах тохиргооны файлууд

Энд бид бүхэл систем эсвэл тодорхой хэрэглэгчийн орчны хувьсагчдыг тохируулахад ашигладаг дээр дурдсан янз бүрийн тохиргооны файлуудыг хурдан харах болно.

.bashrc

Энэ нь хэрэглэгчдэд зориулсан хувьсагчийн файл юм. Хэрэглэгч терминал сесс үүсгэх, өөрөөр хэлбэл шинэ терминал нээх бүрт ачаалагдана. Энэ файлд үүсгэсэн орчны бүх хувьсагч нь шинэ терминал сесс эхлэх бүрт хүчин төгөлдөр болно.

.bash_profile

Хэрэглэгч SSH-ээр алсаас холбогдох бүрт эдгээр хувьсагч хүчин төгөлдөр болно. Хэрэв энэ файл байхгүй бол систем .bash_login эсвэл .profile-г хайх болно.

/etc/орчин

Энэ файл нь системийн түвшинд аливаа орчны хувьсагчийг үүсгэх, засварлах, устгахад зориулагдсан. Энэ файлд үүсгэсэн орчны хувьсагчдыг бүхэл систем, хэрэглэгч бүр, алсаас холбогдсон үед ч ашиглах боломжтой.

/etc/bash.bashrc

Системийн bashrc. Энэ файлыг хэрэглэгч бүр шинэ терминал сесс үүсгэх болгонд гүйцэтгэнэ. Энэ нь зөвхөн орон нутгийн хэрэглэгчдэд зориулагдсан бөгөөд интернетээр холбогдсон үед ийм хувьсагч харагдахгүй.

/etc/profile

Системийн файлын профайл. Энэ файлын бүх хувьсагчийг системд байгаа ямар ч хэрэглэгч алсаас нэвтэрсэн тохиолдолд л ашиглах боломжтой. Гэхдээ локал терминал сесс үүсгэх үед, өөрөөр хэлбэл та зүгээр л терминалыг нээвэл тэдгээр нь боломжгүй болно.

Эдгээр файлуудыг ашиглан үүсгэсэн Линуксийн орчны бүх хувьсагчдыг тэндээс устгаснаар л устгаж болно. Өөрчлөлт бүрийн дараа л та гараад буцаж нэвтрэх эсвэл энэ тушаалыг ажиллуулах хэрэгтэй:

эх файлын нэр

Линукс дээр хэрэглэгчийн болон системийн орчны хувьсагчдыг нэмэх

Одоо та бага зэрэг онолыг мэддэг болсон тул дадлага руу шилжье. Линукс дээрх локал орчны хувьсагчдыг дараах тушаалаар үүсгэж болно.

var=утга
$ экспортын var=утга

Эдгээр хувьсагчийг зөвхөн одоогийн терминалын сессэд ашиглах боломжтой.

Орчны хувьсагчдыг устгахын тулд та хэд хэдэн тушаалуудыг ашиглаж болно:

1. Env ашиглах

Анхдагч байдлаар, та бүх тохируулсан орчны хувьсагчдыг харахын тулд env ашиглаж болно. Гэхдээ -i сонголтоор бүх бүрхүүлийн хувьсагчдыг түр устгаж, хувьсагчгүйгээр командыг гүйцэтгэх боломжтой.

env – i тушаал

Var бол энэ команд руу шилжүүлэхийг хүссэн аливаа хувьсагч юм.

Энэ тушаал нь ямар ч орчны хувьсагчгүйгээр бүрхүүлийг эхлүүлэх болно:

Ийм орчинг ажиллуулсны дараа ямар ч хувьсагч байхгүй, харин гарсны дараа бүх зүйл байрандаа буцаж ирнэ.

2. Тохируулаагүйг ашиглах

Энэ нь Линукс орчны хувьсагчдыг устгах өөр нэг арга юм. Тохиргоог болиулах нь одоогийн сешн дуусах хүртэл хувьсагчийг нэрээр нь устгана:

хувьсагчийн_нэрийг тохируулаагүй

3. Хувьсагчийн утгыг "" болгож тохируулна уу.

Энэ нь Линукс дээрх орчны хувьсагчдыг устгах хамгийн хялбар арга бөгөөд хувьсагчийг хоосон болгосноор та одоогийн сессийн үлдсэн хугацаанд үүнийг устгах болно.

Тайлбар: Эдгээр аргуудыг ашигласнаар та систем эсвэл хэрэглэгчийн хувьсагчийн утгыг өөрчлөх боломжтой боловч тэдгээр нь зөвхөн одоогийн сессэд хамааралтай болно.

Хэрэглэгчийн болон системийн орчны хувьсагчдыг бий болгох

Энэ хэсэгт бид системийн болон хэрэглэгчийн хувьсагчдыг зөвхөн одоогийн сессийн хувьд хэрхэн тохируулах, устгах талаар авч үзэх болно, гэхдээ дахин ачаалсны дараа нөлөө хэвээр үлдэх болно.

1. Линукс дээр локал хувьсагчдыг тохируулах, устгах

Орон нутгийн VAR хувьсагчийг үүсгээд дурын утгыг тохируулаад дараа нь тохиргоог болиод устгасан эсэхийг шалгацгаая:

VAR1 = "Алдагдсан"
$ echo $VAR1
$VAR1 тохируулаагүй
$ echo $VAR1

Хувьсагч үүсгэх өөр нэг арга бол экспортын команд юм. Үүнийг хоосон утга оноож устгая:

экспорт VAR = "Алдагдсан"
$ echo $VAR
$VAR=
$ echo $VAR

Одоо VAR2 хувьсагч үүсгээд түүнд утгыг өгье. Тэгээд env -i-г ажиллуулж бүх локал хувьсагчдыг түр устга. Энэ нь ямар ч хувьсагчгүй бүрхүүлийг эхлүүлэх болно. Гарах руу орсны дараа бүх хувьсагчид сэргээгдэх болно.

VAR2 = "Алдагдсан"
$ echo $VAR2
$ env -i bash
$ echo $VAR2

Хэрэглэгчийн хувьсагчдыг тохируулах, устгах

Хүссэн хувьсагчаа экспортлохын тулд экспортын командыг нэмж өөрийн үндсэн директорт байгаа .bashrc файлыг засна уу. Дараа нь өөрчлөлтийг хэрэгжүүлэхийн тулд эх командыг ажиллуулна уу. Жишээлбэл, CD хувьсагчийг үүсгэцгээе:

Энэ мөрийг нэмнэ үү (o, дараа нь оо, дараа нь Esc болон :wq):

экспорт CD = "Энэ бол гэр гээсэн"

Одоо тохиргоог шинэчлэх хэвээр байна:

source.bashrc
$echo $CD

Энэ хувьсагчийг устгахын тулд .bashrc-ээс устгана уу.

Одоо .bash_profile ашиглан орчны хувьсагчийг нэмье. Энэ хувьсагч нь таны мэдэж байгаагаар зөвхөн алсаас нэвтрэх үед л боломжтой болно:

vi .bash_profile

Мөр нэмэх:

экспорт VAR2 = "Энэ бол гэр гээсэн"

Өөрчлөлтүүдийг хэрэгжүүлэхийн тулд эдгээр тушаалуудыг ажиллуулж, хувьсагч нэмэгдсэн эсэхийг шалгана уу:

source.bash_profile
$ echo $VAR2

Та локал терминал сесс үүсгэсэн тул энэ хувьсагчийг ашиглах боломжгүй, одоо ssh-ээр холбогдоно уу:

ssh user@localhost
$ echo $VAR2

Та энэ орчны хувьсагчийг файлаас устгаснаар өмнөх тохиолдлын адилаар устгаж болно.

Сэтгэгдэл: Эдгээр хувьсагч нь үргэлж боломжтой боловч бүх хэрэглэгчдэд байдаггүй.

Системийн орчны хувьсагчдыг тохируулах, устгах

/etc/bash.profile-д нэмж алсын зайнаас бусад бүх терминал сессийн бүх хэрэглэгчид ашиглах боломжтой хувьсагчийг үүсгэцгээе:

vi /etc/bash.profile

экспорт VAR="Энэ бол системийн хэмжээнд хамаарах хувьсагч"

Дараа нь бид шинэчилнэ:

эх сурвалж /etc/bash.bashrc

Одоо энэ хувьсагчийг бүх хэрэглэгчдэд, бүх терминал дээр ашиглах боломжтой:

$VAR
$sudo su
$ echo $VAR
$су -
$ echo $VAR

Хэрэв та энэ машинд алсаас холбогдсон бүх хэрэглэгчдэд орчны хувьсагчийг ашиглах боломжтой болгохыг хүсвэл /etc/profile файлыг засварлана уу:

экспорт VAR1="Энэ нь зөвхөн алсын сешнүүдэд зориулагдсан системийн хэмжээний хувьсагч"

Тохиргоог шинэчилж, хувьсагч байгаа эсэхийг шалгана уу, энэ нь зөвхөн алсаас боломжтой болно:

эх сурвалж /etc/profile
$ echo $VAR1

Хэрэв та Linux-д орчны хувьсагчийг алсаас болон дотоод сешнүүдэд ашиглах боломжтой болгох шаардлагатай бол /etc/environment руу экспортлоорой:

vi /etc/орчин

экспорт VAR12="Би хаа сайгүй бэлэн байна"

Бид шалгаж байна:

эх сурвалж /etc/орчин
$ echo $VAR12
$sudo su
$ echo $VAR12
$ гарах
$ssh localhost
$ echo $VAR12

2.2. Хүрээлэн буй орчны хувьсагчид

Үйлдлийн систем нь тусгай төрлийн нөөцийг дэмждэг Хүрээлэн буй орчны хувьсагчид (орчны хувьсагч). Эдгээр хувьсагч нь хос юм НЭР - VALUE . Нэр нь үсгээр эхэлж болох бөгөөд үсэг, тоо, доогуур зураасаас бүрдэнэ.

Командын мөрөнд хувьсагчийн утгыг орлуулахын тулд хувьсагчийн нэрний өмнө $ тэмдэг тавина:

$ echo $USER зочин

Хэрэв хувьсагчийг тохируулаагүй бол хоосон мөрийг буцаана.

Хувьсагчийн утгыг тохируулахын тулд хуваарилах операторыг ашиглана уу (Бурн шиг бүрхүүлийн хувьд):

$TEST=туршилт

эсвэл суурилуулсан олонлогийн оператор (С-тэй төстэй тохиолдолд):

$ TEST=туршилтыг тохируулна

Set команд нь аргументгүйгээр хүрээлэн буй орчинд тохируулагдсан бүх хувьсагчийн утгуудыг жагсаав.

$ 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=зочин ....

Хувьсагч нь тухайн процессын хувьд локал эсвэл сессийн хувьд глобал байж болно. Та дараах тушаалуудыг дуудаж хувьсагчийн локал утгыг тэдгээрийн өмнө тавьж болно.

$ TEST=test1 sh -c "echo $TEST" тест1

Борн шиг орчуулагч (sh, ksh, bash, zsh, pdksh...) тохиолдолд орчуулагчийн суулгасан env командыг, мөн тохиолдолд printenv гэж дуудаж сессийн хувьсагчийн багцын агуулгыг үнэлэх боломжтой. 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/3.3 QTINC=q/usr/TT_de/Ylib3inq =/dev/pts/6 USER=зочин 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/зочин LOGNAME=зочин QTLIB=/usr/lib/qt-3.3/lib CVS_RSH=ssh SSH_CONNECTION=172.16.0.9 50487 122.0.9 50487 122.0.2|us. /bin/lesspipe.sh %s G_BROKEN_FILENAMES=1 _=/bin/env

Тушаалын багц Бүрхүүлскрипт гэж нэрлэгддэг командын файлуудад эмхэтгэх боломжтой бөгөөд тусгай төрлийн тайлбарын эхний мөрөнд энэ багцыг гүйцэтгэх тушаалын орчуулагчийг зааж өгдөг. Жишээ нь, дараах контент бүхий test нэртэй файлыг текст засварлагчаар үүсгэцгээе.

#!/bin/sh echo TEST хувьсагч: echo $TEST

Энэ програм нь стандарт гаралт дээр "TEST variable:" текст мессеж болон хэрэв заасан бол TEST хувьсагчийн утгыг хэвлэх болно. Та үүнийг командын орчуулагч руу параметр болгон дамжуулж тушаалын мөрөөс ажиллуулж болно:

$sh тестийн TEST хувьсагч:

Та экспорт (Bourne) эсвэл setenv (C-SHell) мэдэгдлийг ашиглан хувьсагчийг глобал болгож болно:

$ экспорт TEST=test1 $ sh тест ТЕСТ хувьсагч: test1

Та өгөгдсөн програмыг гүйцэтгэх хувьсагчдын локал утгыг тэдгээрийн өмнө тушаалыг дуудаж тохируулж болно.

$ TEST=test2 sh test TEST хувьсагч: test2

Орчны хувьсагчдыг устгах нь unset мэдэгдлийг ашиглан хийгддэг.

Бүрхүүл дэх параметрийн тухай ойлголт bashердийн програмчлалын хэл дээрх хувьсагчийн тухай ойлголттой төстэй. Параметрийн нэр (эсвэл танигч) нь цагаан толгойн үсэг, тоо, доогуур зураас (зөвхөн үгийн эхний тэмдэгт нь тоо байж болохгүй), тоо эсвэл дараах тусгай тэмдэгтүүдээс бүрдсэн үг байж болно. * , @ , # , ? , - (зураас), $ , ! , 0 , _ (доор зурсан).

Параметрт утга оноогдсон бол тохируулагдсан эсвэл тохируулагдсан гэж нэрлэдэг. Мөн утга нь хоосон мөр байж болно. Параметрийн утгыг харуулахын тулд тэмдгийг ашиглана уу $ түүний нэрийн өмнө. Тиймээ, баг

$ цуурай нэр

гэсэн үгийг дэлгэцэн дээр харуулах болно нэр, ба баг

$echo $нэр

нэр хувьсагчийн утгыг буцаана (мэдээж тохируулсан бол).

5.6.1 Параметрийн сортууд

Параметрүүдийг гурван ангилалд хуваадаг. байрлалын параметрүүд, тусгай параметрүүд(нэр нь сая жагсаасан тусгай тэмдэгтүүд) ба бүрхүүлийн хувьсагчууд.

Нэр (танигч) байрлалын параметрүүднэг буюу хэд хэдэн цифрээс бүрдэнэ (нэг тэг биш). Байршлын параметрийн утгууд нь бүрхүүлийг эхлүүлэх үед өгөгдсөн аргументууд юм (эхний аргумент нь байрлалын параметр 1-ийн утга гэх мэт). Та суурилагдсан тушаалыг ашиглан байрлалын параметрийн утгыг өөрчилж болно тогтоосон. Бүрхүүл нь аль нэг функцийг гүйцэтгэж байх үед эдгээр параметрүүдийн утгууд өөрчлөгддөг (үүнийг доор авч үзэх болно. Хэсэг 5.8).

Тусгай параметрүүдЭдгээр нь дараах байдлаар солигдох (орлуулах) загварууд юм.

Хүснэгт 5.2.Тусгай параметрүүд.

Параметр

Орлуулах дүрэм

Эхнийхээс эхлэн байрлалын параметрүүдээр сольсон. Хэрэв орлуулалтыг давхар хашилтын дотор хийсэн бол энэ параметрийг тусгай IFS хувьсагчийн эхний тэмдэгтээр тусгаарласан бүх байрлалын параметрүүдээс бүрдсэн нэг үгээр солино (доор авч үзнэ). Өөрөөр хэлбэл, ``$*"" нь ``$1c$2c..."-тай тэнцүү байна, энд c нь IFS хувьсагчийн утгын эхний тэмдэгт юм. Хэрэв IFS-г хоосон гэж тохируулсан эсвэл ямар ч утга байхгүй бол параметрүүдийг хоосон зайгаар тусгаарлана

Эхнийхээс эхлэн байрлалын параметрүүдээр сольсон. Хэрэв орлуулалтыг давхар хашилтанд хийсэн бол параметр бүрийг тусдаа үгээр солино. Тиймээс `` $@"" нь ""$1"" ""$2""-тэй тэнцүү байна ... Хэрэв байрлалын параметр байхгүй бол ямар ч утга оноохгүй (@ параметрийг зүгээр л хассан)

Байршлын параметрийн тооны аравтын бутархайгаар солигдоно

Хамгийн сүүлд ажиллаж байгаа хөтөлбөрийн сувгийн гарах төлөвөөр солигдсон

(зураас)

Баригдсан тушаалыг ашиглан тогтоосон тугны утгуудын одоогийн багцаар сольсон тогтоосонэсвэл бүрхүүлийг өөрөө эхлүүлэх үед

Бүрхүүлийн процессын танигч (P ID) -ээр солигдсон

Хамгийн сүүлд гүйцэтгэсэн дэвсгэр (асинхрон гүйцэтгэсэн) командын процесс танигчаар (P ID) сольсон.

Ажиллуулах бүрхүүл эсвэл скриптийн нэрээр сольсон. Хэрэв bashбагц файлыг ажиллуулахаар ажилладаг бол $0 нь файлын нэр юм. Үгүй бол энэ утга нь бүрхүүлийн бүрэн замтай тэнцүү байна

(доогуур зураас)

Өмнөх гүйцэтгэсэн командын сүүлчийн аргументаар сольсон (хэрэв энэ нь параметр эсвэл хувьсагч бол түүний утгыг орлуулна)

Дээрх хүснэгтэд жагсаасан тусгай параметрүүд нь зөвхөн лавлагаа авах боломжтой гэдгээрээ ялгаатай; Та тэдэнд утгыг оноож болохгүй.

Хувьсагчбүрхүүлийн үүднээс авч үзвэл энэ нь нэрээр тэмдэглэгдсэн параметр юм. Дараах операторыг ашиглан хувьсагчдад утгыг онооно.

$нэр=утга

Хаана нэрхувьсагчийн нэр бөгөөд үнэ цэнэ— түүнд өгөгдсөн утга (хоосон мөр байж болно). Хувьсагчийн нэр нь зөвхөн тоо, үсгээс бүрдэх бөгөөд тоогоор эхэлж болохгүй. Утга нь ямар ч текст байж болно. Хэрэв утга нь тусгай тэмдэгт агуулсан байвал түүнийг хашилтанд оруулах ёстой. Өгөгдсөн утга нь эдгээр ишлэлийг агуулаагүй нь мэдээжийн хэрэг. Хэрэв хувьсагчийг тохируулсан бол shell builtin командыг ашиглан устгаж болно тохируулаагүй.

Бүх тогтоосон бүрхүүлийн хувьсагчдын багцыг тэдгээрт заасан утгууд нь хүрээлэн буй орчин эсвэл бүрхүүлийн орчин гэж нэрлэдэг. Та үүнийг командыг ашиглан харж болно тогтоосонпараметргүйгээр (магадгүй та дамжуулах хоолойг зохион байгуулах хэрэгтэй "тогтоох | бага"). Энэ командын гаралт нь бүх орчны хувьсагчдыг цагаан толгойн үсгийн дарааллаар жагсаадаг. Тодорхой нэг хувьсагчийн утгыг харахын тулд та тушаалын оронд хийж болно. тогтоосон(гаралтад та хүссэн хувьсагчаа хайж, хайж болно) та тушаалыг ашиглаж болно

$echo $нэр

(гэхдээ энэ тохиолдолд та сонирхож буй хувьсагчийн нэрийг мэдэх ёстой).

Командын гаралт дээр харагдах хувьсагчдын дунд тогтоосон, маш сонирхолтой хувьсагчууд байдаг. Жишээлбэл, RANDOM хувьсагчийг анхаарч үзээрэй. Хэрэв та тушаалыг хэд хэдэн удаа дараалан ажиллуулбал

$ echo $RANDOM

Та бүрт шинэ үнэ цэнийг авах болно. Энэ хувьсагч нь 0 - 32,768 интервалаас санамсаргүй бүхэл тоог буцаадаг явдал юм.

5.6.2 Бүрхүүлийн сануулга

Маш чухал хувьсагчдын нэг нь нэртэй байдаг PS1. Энэ хувьсагч нь урилгын төрлийг тодорхойлдог bashХэрэглэгч дараагийн командыг оруулахыг хүлээж байх үед гарна. Анхдагчаар энэ хувьсагчийг "\s-\v\$" гэж тохируулсан байна. Үнэндээ дотор bashЯнз бүрийн нөхцөлд ашигладаг дөрвөн урилга байдаг. Хувьсагч PS1бүрхүүл нь команд оруулахыг хүлээж байх үед ямар төрлийн хүсэлт гаргахыг зааж өгдөг. Хувьсагчаар тодорхойлогдсон хоёрдогч сануулга PS2, бүрхүүл нь хэрэглэгчийг ажиллуулж буй тушаал эсвэл програмыг үргэлжлүүлэхэд шаардлагатай нэмэлт өгөгдлийг оруулахыг хүлээж байх үед гарч ирнэ. Өгөгдмөл хувьсагч PS2гэсэн утгатай" >" . Та командыг ажиллуулахдаа энэ мэдэгдлийг аль хэдийн харсан байж магадгүй муургараас өгөгдлийг файлд оруулах. Өөр нэг жишээ бол тушаал юм ftp, эхлүүлсний дараа урилга мөн энэ хэлбэрийг авна.

Хувьсагчийн сануулга PS3, тушаалд хэрэглэгддэг сонгох. Хувьсагчийн сануулга PS4, тухайн үед команд бүрийн өмнө хэвлэгддэг bashгүйцэтгэлийн явцыг хянадаг. Өгөгдмөл утга нь " + ".

Хэрэв та хүсвэл хувьсагчийн төрлийг өөрчилж болно PS1Тэгээд PS2. Энэ тохиолдолд та гарнаас оруулсан дурын тэмдэг, түүнчлэн мэдээллийн мөрөөр үүсгэх үед Хүснэгтийн дагуу кодыг тайлсан тодорхой тооны тусгай тэмдэгтүүдийг ашиглаж болно. 5.3 (бид зөвхөн заримыг нь жагсаасан болно; иж бүрэн жагсаалтыг харахын тулд хэрэглүүрийг хүн хуудаснаас үзнэ үү. bash) .

Хүснэгт 5.3.Урилга үүсгэх тусгай тэмдэгтүүд

Тэмдэг

Үүний утга

Дууны дохио (ASCII код 07)

"Өдөр, сар, өдөр" форматтай огноо, жишээлбэл, Лхагва, 10-р сарын 17.

Эхний цэг хүртэл хостын нэр

Бүтэн хостын нэр

24 цагийн форматтай одоогийн цаг: HH:MM:SS (цаг:минут:секунд)

Одоогийн цаг 12 цагийн формат: HH:MM:SS

Одоогийн цаг 12 цагийн форматаар өглөөний цаг

Бүрхүүлийг эхлүүлсэн хэрэглэгчийн нэр

Одоогийн ажиллаж буй лавлахын бүтэн нэр (үндэсээс эхлэн)

Одоогийн ажлын лавлах (зам заагаагүй)

Бүрхүүл супер хэрэглэгчээр ажиллаж байгаа бол # тэмдэг, мөн тэмдэг $ , хэрэв бүрхүүлийг энгийн хэрэглэгч эхлүүлсэн бол.

\nnn

Найман кодтой тэмдэгт nnn

Шинэ мөр (шугам хангамж)

Бүрхүүлийн нэр

Одоогийн багийн дугаар

Урвуу налуу зураас

Хэвлэхгүй тэмдэгтүүдийн дарааллын эхлэл (энэ тэмдэгтийг самбарын текстэнд терминалын хяналтын тэмдэгтүүдийн дарааллыг оруулахад ашиглаж болно)

Хэвлэх боломжгүй тэмдэгтүүдийн дарааллын төгсгөл

Командын түүхэн дэх энэ командын серийн дугаар

Одоогийн командын дугаар (одоогийн сесс дотор гүйцэтгэгдэж байгаа командын серийн дугаар) нь командын түүхийн жагсаалт дахь энэ тушаалын дугаараас ялгаатай байж болно, учир нь сүүлийнх нь командын түүхийн файлд хадгалагдсан тушаалуудыг агуулдаг.

Санамжийг тодорхойлсон хувьсагчийн утгыг бүрхүүл уншсаны дараа параметрийг өргөтгөх, тушаалын нэр болон арифметик илэрхийлэлд орлуулах, үг хуваах дүрмийн дагуу орлуулалт хийж болно. Эдгээр дүрмийг доор, хэсэгт авч үзэх болно. 5.7.

Жишээлбэл, тушаалыг гүйцэтгэсний дараа (мөрт хоосон зай байгаа тул ишлэл оруулах шаардлагатай)

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

стандарт хүлээх мөрөнд дөрвөлжин хаалт, хэрэглэгчийн нэр, тэмдэг гарч ирнэ @ , компьютерийн нэр, зай, одоогийн лавлах нэр (замгүй), хаах дөрвөлжин хаалт ба тэмдэг $ (хэрэв энгийн хэрэглэгч бүрхүүлд ажиллаж байгаа бол) эсвэл # (хэрэв бүрхүүл root хэлбэрээр ажиллаж байгаа бол).

5.6.3 Хувьсагч ЗАМ

Өөр нэг чухал хувьсагч нь нэртэй байдаг ЗАМ. Энэ нь байгаа лавлах руу очих замуудын жагсаалтыг зааж өгдөг bashкомандын мөрөнд файлын бүрэн замыг заагаагүй тохиолдолд файлуудыг (ялангуяа командтай файлуудыг) хайдаг. Энэ жагсаалтад байгаа лавлах сангууд нь хоёр цэгээр тусгаарлагдана. Өгөгдмөл хувьсагч ЗАМсангууд багтана /usr/local/bin, /bin, /usr/bin, /usr/X11R6/bin,өөрөөр хэлбэл иймэрхүү харагдаж байна:

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

Энэ жагсаалтад лавлах нэмэхийн тулд та дараах тушаалыг ажиллуулах хэрэгтэй.

# PATH=$PATH:шинэ_зам.

Хайлт хийх үед бүрхүүл нь сангуудыг PATH хувьсагчид жагсаасан дарааллаар нь хайдаг.

PATH хувьсагчид цэг нэмснээр та одоогийн лавлахыг энэ жагсаалтад оруулах боломжтой гэдгийг анхаарна уу. Гэсэн хэдий ч аюулгүй байдлын үүднээс үүнийг хийхийг зөвлөдөггүй: халдагчид нэр нь супер хэрэглэгчийн байнга гүйцэтгэдэг командуудын аль нэгтэй таарч байгаа тушаалыг нийтийн лавлах хэсэгт байрлуулж болох боловч огт өөр үйлдэл хийдэг (ялангуяа одоогийн лавлах жагсаалтын эхэнд байгаа бол). хайлтын замуудын жагсаалт).

5.6.4 Хувьсагч IFS

Энэ хувьсагч нь тушаалын мөрийг гүйцэтгэхийн өмнө бүрхүүлээр гүйцэтгэсэн командын мөр хувиргалтыг үг хуваах үйл ажиллагаанд хэрэглэгддэг Дотоод талбар тусгаарлагчийг тодорхойлдог. Энэ хувьсагчийн өгөгдмөл утга нь "<Пробел><Символ_ новой_ строки>".

5.6.5 Одоогийн болон гэрийн лавлахууд

Одоогийн лавлахын нэр нь орчны хувьсагч (PWD нэртэй)-д хадгалагддаг бөгөөд програмыг эхлүүлэх бүрт энэ хувьсагчийн утга өөрчлөгддөг. CD(мөн одоогийн лавлахыг өөр аргаар өөрчлөх үед, жишээлбэл, Midnight Commander-ээр дамжуулан).

Үүнтэй адилаар процессыг эхлүүлсэн хэрэглэгчийн гэрийн лавлахын бүтэн нэр (болон зам) HOME хувьсагчид хадгалагдана.

5.6.6 Баг экспортлох

Бүрхүүл нь програм эсвэл командыг ажиллуулахдаа зарим орчны хувьсагчдыг тэдэнд дамжуулдаг. Орчны хувьсагчийг бүрхүүлээс эхлүүлсэн процесс руу шилжүүлэхийн тулд үүнийг тусгай команд ашиглан тохируулах ёстой. экспортлох, өөрөөр хэлбэл оронд нь

$нэр=утга

бичих хэрэгтэй

$экспортын нэр=утга

Энэ тохиолдолд бүрхүүлээс эхлүүлсэн бүх програмууд (бүрхүүлийн хоёрдогч тохиолдлуудыг оруулаад) ийм байдлаар тодорхойлсон хувьсагчдад хандах боломжтой болно, өөрөөр хэлбэл тэд утгуудыг нэрээр нь дуудаж болно.

V. Kostromin (kos at rus-linux dot net) - 5.6. Параметр ба хувьсагчид. Бүрхүүлийн орчин