เอ็ม. การ์เรลส์. คู่มือทุบตี ตัวแปร วิธีการตั้งค่าและปิดใช้งานตัวแปรสภาพแวดล้อมภายใน ผู้ใช้ และระบบใน Linux วิธีค้นหาตำแหน่งที่เขียนตัวแปรเชลล์

ประเภทตัวแปร

ดังที่คุณเห็นจากตัวอย่างด้านบน ตัวแปรเชลล์มักจะเขียนด้วยตัวพิมพ์ใหญ่ Bash เก็บรายการตัวแปรสองประเภท:

ตัวแปรร่วม

ตัวแปรโกลบอลหรือสภาพแวดล้อมมีอยู่ในเชลล์ทั้งหมด หากต้องการแสดงตัวแปรสภาพแวดล้อม คุณสามารถใช้คำสั่งได้ สิ่งแวดล้อมหรือ โรงพิมพ์. คำสั่งเหล่านี้มีให้เป็นส่วนหนึ่งของแพ็คเกจ sh-utils.

ด้านล่างนี้เป็นผลลัพธ์ทั่วไป:

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=ค่าเริ่มต้น GNOME_DESKTOP_SESSION_ID=ค่าเริ่มต้น GTK_RC_FILES=/etc/gtk/gtkrc:/nethome/franky/.gtkrc -1.2-gnome2 GWMCOLOR=สีเขียวเข้ม GWMTERM=xterm HISTFILESIZE=5,000 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=ดิ้น LOCAL_MACHINE=ออคทารีน LOGNAME=แฟรงกี้ 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:หรือ=01;05;37;41:mi=01;05;37;41:อดีต=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: เครื่องจักร=ออคทารีน MAILCHECK=60 MAIL=/var/mail/franky MANPATH=/usr/man:/usr/share/man/:/usr/local/man:/usr/X11R6/man MEAN_MACHINES= ออคทารีน 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=ข่าว 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 อยู่ใน \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.22106 START_WM=twm TERM=xterm TYPE=ประเภท 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=none XTERMID= XWINHOME=/usr/X11R6 X=X11R6 YACC=วัวกระทิง - ย

ตัวแปรท้องถิ่น

ตัวแปรโลคัลมีเฉพาะในเชลล์คำสั่งปัจจุบันเท่านั้น หากใช้คำสั่งบิวท์อิน ชุดถูกใช้โดยไม่มีพารามิเตอร์ใดๆ โดยจะส่งคืนรายการตัวแปรทั้งหมด (รวมถึงตัวแปรรันไทม์) และฟังก์ชัน ลองใช้การจัดรูปแบบและสร้างผลลัพธ์ที่เรียงลำดับโดยคำนึงถึงท้องถิ่นของตัวแปร

ด้านล่างนี้เป็นไฟล์ diff ที่สร้างขึ้นโดยการเปรียบเทียบผลลัพธ์ของคำสั่ง โรงพิมพ์และ ชุดหลังจากลบออกจากรายการฟังก์ชันที่แสดงโดยคำสั่งแล้ว ชุด:

Franky ~> diff set.sorted printenv.sorted | เกรพ "<" | 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

การแบ่งตัวแปรตามเนื้อหา

นอกเหนือจากการแบ่งตัวแปรออกเป็นระดับท้องถิ่นและระดับโลกแล้ว เรายังสามารถแบ่งตัวแปรออกเป็นหมวดหมู่ตามเนื้อหาที่จัดเก็บไว้ในตัวแปร ทั้งนี้ ตัวแปรแบ่งออกเป็น 4 ประเภท คือ

  • ตัวแปรสตริง
  • ตัวแปรจำนวนเต็ม
  • ตัวแปร - ค่าคงที่
  • ตัวแปร - อาร์เรย์

เราจะพูดถึงตัวแปรประเภทนี้ในบทที่ 10 ตอนนี้เราจะใช้ค่าจำนวนเต็มและสตริงในตัวแปรของเรา

การสร้างตัวแปร

ในตัวแปร อักขระตัวพิมพ์ใหญ่และตัวพิมพ์เล็กจะแตกต่างกัน และใช้อักขระตัวพิมพ์ใหญ่ตามค่าเริ่มต้น บางครั้งก็เป็นเรื่องปกติที่จะใช้อักขระตัวพิมพ์เล็กเพื่อเขียนตัวแปรท้องถิ่น อย่างไรก็ตาม คุณสามารถใช้อักขระใดก็ได้สำหรับชื่อตัวแปร และแม้แต่ผสมอักขระตัวพิมพ์ใหญ่และตัวพิมพ์เล็กก็ได้ คุณยังสามารถใช้ตัวเลขในชื่อตัวแปรได้ แต่ไม่อนุญาตให้ใช้ชื่อที่ขึ้นต้นด้วยตัวเลข:

พร้อมท์> ส่งออก 1number = 1 bash: ส่งออก: `1number = 1": ไม่ใช่ตัวระบุที่ถูกต้อง

หากต้องการตั้งค่าตัวแปรในเชลล์คำสั่ง ให้ใช้คำสั่งต่อไปนี้

VARNAME="ค่า"

อย่าเว้นวรรครอบเครื่องหมายเท่ากับ จะทำให้เกิดข้อผิดพลาด เมื่อคุณกำหนดค่าให้กับตัวแปร เป็นนิสัยที่ดีที่จะใส่เนื้อหาของสตริงด้วยเครื่องหมายคำพูด ซึ่งจะช่วยลดโอกาสที่คุณจะทำผิดพลาด

ตัวอย่างการใช้ตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ตัวเลข และช่องว่าง (ข้อความไม่พบคำสั่งแสดงว่ามีปัญหา - ประมาณ):

แฟรงกี้ ~> MYVAR1="2" แฟรงกี้ ~> echo $MYVAR1 2 แฟรงกี้ ~> first_name="แฟรงกี้" แฟรงกี้ ~> echo $first_name แฟรงกี้ แฟรงกี้ ~> full_name="แฟรงกี้ เอ็ม ซิงห์" แฟรงกี้ ~> echo $full_name แฟรงกี้ เอ็ม. ซิงห์แฟรงกี้ ~> MYVAR-2="2" bash: MYVAR-2=2: ไม่พบคำสั่ง franky ~> MYVAR1 ="2" bash: MYVAR1: ไม่พบคำสั่ง franky ~> MYVAR1= "2" bash: 2: command ไม่พบ แฟรงกี้ ~> ไม่ได้ตั้งค่า MYVAR1 first_name full_name แฟรงกี้ ~> echo $MYVAR1 $first_name $full_name<--no output-->แฟรงกี้ ~>

ส่งออกตัวแปร

ตัวแปรที่สร้างขึ้นตามที่แสดงในตัวอย่างด้านบนมีเฉพาะในเชลล์คำสั่งปัจจุบันเท่านั้น นี่คือตัวแปรท้องถิ่น: กระบวนการลูกของเชลล์ปัจจุบันจะไม่ทราบถึงตัวแปรนี้ เพื่อที่จะส่งผ่านตัวแปรไปยังเชลล์ย่อย เราจำเป็นต้องมี ส่งออกโดยใช้คำสั่งบิวท์อิน ส่งออก. ตัวแปรที่ถูกส่งออกเรียกว่าตัวแปรสภาพแวดล้อม โดยทั่วไปการกำหนดค่าและการส่งออกจะดำเนินการในขั้นตอนเดียว:

ส่งออก VARNAME="ค่า"

เชลล์ย่อยสามารถเปลี่ยนตัวแปรที่สืบทอดมาจากกระบวนการหลักได้ แต่การเปลี่ยนแปลงที่ทำโดยกระบวนการย่อยจะไม่ส่งผลกระทบต่อกระบวนการหลัก สิ่งนี้แสดงให้เห็นในตัวอย่างต่อไปนี้:

Franky ~> full_name="Franky M. Singh" franky ~> bash franky ~> echo $full_name franky ~> exit franky ~> ส่งออก full_name franky ~> bash franky ~> echo $full_name Franky M. Singh franky ~> ส่งออก full_name= "ชาร์ลส์มหาราช" แฟรงกี้ ~> echo $full_name Charles the Great แฟรงกี้ ~> ออกจากแฟรงกี้ ~> echo $full_name แฟรงกี้เอ็ม. ซิงห์ แฟรงกี้ ~>

ครั้งแรกที่เชลล์ย่อยพยายามอ่านค่าของ full_name ค่าจะไม่ถูกตั้งค่า (command เสียงสะท้อนแสดงบรรทัดว่าง) หลังจากออกจากเชลล์ย่อยแล้ว ตัวแปร full_name จะถูกส่งออกไปยังเชลล์พาเรนต์ - ตัวแปรสามารถส่งออกได้หลังจากกำหนดค่าแล้ว จากนั้นเชลล์ย่อยใหม่จะเริ่มทำงาน โดยแสดงตัวแปรที่ส่งออกจากเชลล์พาเรนต์ ตัวแปรได้รับการแก้ไขและค่าอื่นจะถูกจัดเก็บไว้ แต่ในพาเรนต์เชลล์ ค่าของตัวแปรนี้จะยังคงเหมือนเดิม

ตัวแปรที่สงวนไว้

ตัวแปรเชลล์ที่สงวนไว้บอร์น

Bash ใช้ตัวแปรเชลล์บางตัวเหมือนกับเชลล์เป้าหมาย ในบางกรณี Bash จะกำหนดตัวแปรให้เป็นค่าเริ่มต้น ตารางด้านล่างแสดง คำอธิบายสั้นตัวแปรเชลล์อย่างง่ายเหล่านี้:

ตารางที่ 3.1. ตัวแปรเชลล์ที่สงวนไว้บอร์น

ชื่อตัวแปร คำนิยาม

รายการไดเร็กทอรีที่คั่นด้วยเครื่องหมายโคลอน ใช้ในการค้นหาเส้นทางโดยใช้คำสั่งบิวด์อิน ซีดี.

โฮมไดเร็กตอรี่ ผู้ใช้ปัจจุบัน; ใช้เป็นค่าเริ่มต้นในคำสั่งบิวด์อิน ซีดี. ค่าของตัวแปรนี้ยังใช้แทนอักขระตัวหนอนอีกด้วย

รายการอักขระที่ใช้ในการแยกฟิลด์ ใช้เมื่อเชลล์ หลังจากทำการทดแทนทั้งหมดแล้ว แยกผลลัพธ์ออกเป็นแต่ละคำ

หากพารามิเตอร์นี้ถูกตั้งค่าเป็นชื่อไฟล์และไม่ได้ตั้งค่า MAILPATH Bash จะแจ้งให้ผู้ใช้ทราบว่าได้รับเมลในไฟล์ที่ระบุ

รายการชื่อไฟล์ที่คั่นด้วยโคลอนซึ่งคำสั่งเชลล์จะตรวจสอบเมลใหม่เป็นระยะ

ค่าของอาร์กิวเมนต์สุดท้ายในพารามิเตอร์ที่ประมวลผลโดยคำสั่งบิวด์อิน รับ.

ดัชนีของอาร์กิวเมนต์พารามิเตอร์สุดท้ายที่ประมวลผลโดยคำสั่งบิวด์อิน รับ.

รายการไดเร็กทอรีที่คั่นด้วยโคลอนซึ่งเชลล์ค้นหาคำสั่ง

บรรทัดแจ้งหลัก ค่าเริ่มต้นคือ ""\s-\v\$ ""

บรรทัดคำสั่งรอง ค่าเริ่มต้นคือ ""> ""

ทุบตีตัวแปรที่สงวนไว้

ค่าของตัวแปรเหล่านี้ได้รับการตั้งค่าหรือใช้ใน Bash แต่โดยทั่วไปจะไม่ถือว่าเป็นค่าพิเศษในเชลล์อื่น

ตารางที่ 3.2. ทุบตีตัวแปรที่สงวนไว้

ชื่อตัวแปร คำนิยาม

ตัวแปรนี้ควบคุมวิธีที่เชลล์โต้ตอบกับผู้ใช้และดำเนินงาน

เส้นทางแบบเต็มที่ใช้ในการเริ่มต้นอินสแตนซ์ Bash ปัจจุบัน

หากตัวแปรนี้ได้รับการตั้งค่า ณ เวลาที่เรียกใช้ Bash เพื่อเรียกใช้สคริปต์ ค่าของตัวแปรนั้นจะถูกใช้เป็นชื่อของไฟล์เริ่มต้นที่ต้องอ่านก่อนที่จะเรียกใช้สคริปต์

หมายเลขเวอร์ชันของอินสแตนซ์ปัจจุบันของ Bash

ตัวแปรคืออาร์เรย์แบบอ่านอย่างเดียวซึ่งมีองค์ประกอบอาร์เรย์จัดเก็บข้อมูลเวอร์ชัน ของกรณีนี้ทุบตี.

เมื่อพิมพ์รายการที่เลือก จะใช้คำสั่งในตัว เลือกเพื่อกำหนดความกว้างของเทอร์มินัล ตั้งค่าอัตโนมัติเมื่อรับสัญญาณ ซิกกว้าน.

ตัวชี้ใน $(COMP_WORDS) ไปยังคำที่เก็บตำแหน่งเคอร์เซอร์ปัจจุบัน

บรรทัดคำสั่งปัจจุบัน

ตัวชี้ไปยังตำแหน่งเคอร์เซอร์ปัจจุบันสัมพันธ์กับจุดเริ่มต้นของคำสั่งปัจจุบัน

ตัวแปรคืออาร์เรย์ที่ประกอบด้วยคำแต่ละคำที่ใช้ในบรรทัดคำสั่งปัจจุบัน

Variable คืออาร์เรย์ที่ Bash อ่าน ตัวเลือกที่เป็นไปได้ความสมบูรณ์ของสตริงที่สร้างโดยฟังก์ชันเชลล์ที่เรียกโดยบริการที่ออกแบบมาเพื่อทำให้โปรแกรมสมบูรณ์

ตัวแปรคืออาร์เรย์ที่เก็บสถานะปัจจุบันของไดเร็กทอรีสแต็ก

ID ผู้ใช้ที่มีประสิทธิผลที่เป็นตัวเลข ID ของผู้ใช้ปัจจุบัน

โปรแกรมแก้ไขเริ่มต้นที่ใช้เมื่ออยู่ในคำสั่งในตัว เอฟซีระบุพารามิเตอร์ -e

รายการส่วนต่อท้ายที่คั่นด้วยโคลอนซึ่งควรละเว้นเมื่อดำเนินการเติมชื่อไฟล์อัตโนมัติ

ชื่อของฟังก์ชันเชลล์ที่กำลังทำงานอยู่

รายการรูปแบบที่คั่นด้วยโคลอนซึ่งกำหนดชุดชื่อไฟล์ที่จะละเว้นเมื่อเปลี่ยนชื่อไฟล์

ตัวแปรคืออาร์เรย์ที่มีรายการกลุ่มที่ผู้ใช้ปัจจุบันเป็นสมาชิก

อักขระสูงสุดสามตัวที่ควบคุมการทดแทนประวัติคำสั่ง การทดแทนอย่างรวดเร็ว และการแบ่งการทดแทนที่เสร็จสมบูรณ์ออกเป็นโทเค็น

หมายเลขของคำสั่งปัจจุบันในประวัติคำสั่งหรือดัชนีในรายการประวัติคำสั่ง

กำหนดว่าคำสั่งจะถูกเพิ่มลงในไฟล์ประวัติคำสั่งหรือไม่

ชื่อของไฟล์ที่บันทึกประวัติคำสั่ง ค่าเริ่มต้น: ~/.bash_history

จำนวนบรรทัดสูงสุดดีฟอลต์ที่อยู่ในไฟล์ประวัติคำสั่งคือ 500

รายการรูปแบบที่คั่นด้วยโคลอนซึ่งกำหนดว่าคำสั่งควรถูกบันทึกลงในรายการประวัติคำสั่งหรือไม่

จำนวนคำสั่งเริ่มต้นสูงสุดที่สามารถจัดเก็บไว้ในรายการประวัติคำสั่งคือ 500

มีชื่อไฟล์ในรูปแบบเดียวกับไฟล์ /etc/hosts ซึ่งสามารถอ่านได้เมื่อเชลล์คำสั่งจำเป็นต้องกรอกชื่อโฮสต์ให้สมบูรณ์

ชื่อโฮสต์ปัจจุบัน

สตริงที่อธิบายเครื่องที่ Bash กำลังทำงานอยู่

ควบคุมสิ่งที่เชลล์ทำเมื่อได้รับอักขระเป็นอักขระที่สิ้นสุดของอินพุตสตรีม อีโอเอฟ(สัญลักษณ์ท้ายไฟล์)

ชื่อของไฟล์การกำหนดค่าเริ่มต้นโปรแกรม Readline ที่แทนที่ไฟล์ /etc/inputrc ดีฟอลต์

ใช้เพื่อกำหนดหมวดหมู่โลแคลสำหรับหมวดหมู่ทั้งหมดที่ไม่ได้ระบุไว้อย่างชัดเจนโดยตัวแปรที่ชื่อขึ้นต้นด้วยอักขระ LC_

ตัวแปรนี้จะแทนที่ค่าของตัวแปร LANG และตัวแปรอื่นๆ ทั้งหมดที่ขึ้นต้นด้วยอักขระ LC_ ที่ระบุหมวดหมู่การแปล

ตัวแปรนี้ระบุลำดับการจัดเรียงที่ใช้เมื่อเรียงลำดับชื่อไฟล์ที่ตรงกับรูปแบบ และกำหนดการตีความช่วง คลาสที่ตรงกัน และกฎการเปรียบเทียบอักขระสำหรับการแทนที่ชื่อไฟล์และการจับคู่รูปแบบ

ตัวแปรนี้กำหนดวิธีการตีความอักขระและพิจารณาว่าอักขระเหล่านั้นอยู่ในคลาสเฉพาะสำหรับการขยายชื่อไฟล์และการจับคู่รูปแบบหรือไม่

ตัวแปรนี้ระบุหมวดหมู่การแปลที่ใช้ในการประมวลผลสตริง เครื่องหมายคำพูดคู่นำหน้าด้วยสัญลักษณ์ $

ตัวแปรนี้ระบุหมวดหมู่การแปลสำหรับรูปแบบตัวเลข

หมายเลขบรรทัดในสคริปต์หรือฟังก์ชันเชลล์ที่กำลังดำเนินการอยู่

ใช้โดยคำสั่งบิวด์อิน เลือกเพื่อกำหนดความยาวของคอลัมน์ที่จะแสดงรายการที่เลือก

สตริงที่อธิบายประเภทของระบบที่ Bash กำลังทำงานอยู่อย่างสมบูรณ์ โดยใช้รูปแบบ GNU CPU-COMPANY-SYSTEM มาตรฐาน

ระบุความถี่ที่เชลล์ควรตรวจสอบเมลในไฟล์ที่ระบุในตัวแปร MAILPATH หรือ MAIL เป็นวินาที

ไดเร็กทอรีการทำงานก่อนหน้าที่ตั้งค่าโดยใช้คำสั่งบิวด์อิน ซีดี.

หากตั้งค่าเป็น 1 Bash จะแสดงข้อความแสดงข้อผิดพลาดที่สร้างโดยคำสั่งบิวด์อิน รับ.

สตริงอธิบาย ระบบปฏิบัติการซึ่งรัน Bash

ตัวแปรคืออาร์เรย์ที่มีรายการค่าสถานะการออกกระบวนการในไปป์ไลน์สุดท้าย (ซึ่งอาจประกอบด้วยคำสั่งเดียว)

หากตัวแปรนี้ถูกเพิ่มลงในสภาพแวดล้อมเมื่อ bash เริ่มต้น เชลล์จะเข้าสู่โหมด POSIX

หากตั้งค่าตัวแปรนี้ ค่าจะถูกตีความว่าเป็นคำสั่งที่ดำเนินการก่อนที่จะออกบรรทัดพร้อมท์หลัก (PS1) แต่ละบรรทัด

ค่าของตัวแปรนี้ใช้สำหรับคำสั่ง เลือกเป็นสตริงพร้อมท์ ค่าเริ่มต้น - ""#? ""

ค่าของสตริงพร้อมต์ที่ออกก่อนบรรทัดรับคำสั่ง เมื่ออ็อพชัน -x ถูกตั้งค่าให้เปิดใช้งานการสะท้อน บรรทัดคำสั่ง; ค่าเริ่มต้นคือ ""+ ""

ไดเร็กทอรีการทำงานปัจจุบันที่กำหนดโดยคำสั่งบิวด์อิน ซีดี.

แต่ละครั้งที่มีการเข้าถึงพารามิเตอร์นี้ จำนวนเต็มสุ่มจะถูกสร้างขึ้นในช่วงตั้งแต่ 0 ถึง 32767 ค่าของตัวแปรนี้จะถูกใช้ในตัวสร้างตัวเลขสุ่ม

ตัวแปรเริ่มต้นในคำสั่งบิวด์อิน อ่าน.

ตัวแปรนี้ระบุจำนวนวินาทีที่ผ่านไปนับตั้งแต่เชลล์คำสั่งถูกเรียกทำงาน

รายการพารามิเตอร์ที่ตั้งค่าในเชลล์คำสั่ง คั่นด้วยเครื่องหมายทวิภาค

เพิ่มขึ้นทีละครั้งในแต่ละครั้งที่มีการเริ่มต้นอินสแตนซ์ใหม่ของ Bash

ค่าของพารามิเตอร์นี้ใช้เป็นสตริงที่ระบุรูปแบบในการออกข้อมูลรันไทม์สำหรับไปป์ไลน์ที่นำหน้าด้วยคำสงวน เวลา.

หากตัวแปร TMOUT ถูกตั้งค่าเป็นค่าที่มากกว่าศูนย์ จะถือว่าเป็นการหมดเวลาเริ่มต้นในคำสั่งบิวด์อิน อ่าน. เมื่อเชลล์คำสั่งเริ่มทำงานในโหมดโต้ตอบ ค่านี้จะถูกตีความว่าเป็นจำนวนวินาทีที่เชลล์จะรออินพุตหลังจากออกบรรทัดพร้อมต์เริ่มต้น หากไม่ได้รับการป้อนข้อมูล หลังจากเวลานี้ Bash ออกจากระบบ

ค่าตัวเลข ID ผู้ใช้จริงสำหรับผู้ใช้ปัจจุบัน

ดูหน้าคู่มือ Bash หรือเอกสารประกอบสำหรับข้อมูลเพิ่มเติม ตัวแปรบางตัวเป็นแบบอ่านอย่างเดียว บางตัวถูกตั้งค่าโดยอัตโนมัติ และบางตัวก็ไร้ความหมายเมื่อตั้งค่าเป็นอย่างอื่นที่ไม่ใช่ค่าเริ่มต้น

พารามิเตอร์พิเศษ

เชลล์คำสั่งปฏิบัติต่อพารามิเตอร์บางตัวในลักษณะพิเศษ พารามิเตอร์เหล่านี้สามารถใช้เพื่อรับค่าจากพารามิเตอร์เหล่านี้เท่านั้น ไม่สามารถกำหนดค่าได้

ตารางที่ 3.3. ทุบตีตัวแปรพิเศษ

เครื่องหมาย คำนิยาม

ส่งกลับพารามิเตอร์ตำแหน่งโดยเริ่มจากพารามิเตอร์แรก เมื่อระบุพารามิเตอร์ด้วยเครื่องหมายคำพูดคู่ จะถูกแทนที่ด้วยคำเดียวที่มีค่าของแต่ละพารามิเตอร์ คั่นด้วยอักขระตัวแรกของตัวแปรพิเศษ IFS

ส่งกลับพารามิเตอร์ตำแหน่งโดยเริ่มจากพารามิเตอร์แรก เมื่อระบุพารามิเตอร์ด้วยเครื่องหมายคำพูดคู่ แต่ละพารามิเตอร์จะถูกส่งกลับเป็นคำที่แยกจากกัน

ส่งกลับจำนวนพารามิเตอร์ตำแหน่งที่ระบุเป็นค่าทศนิยม

ส่งกลับรหัสส่งคืนของไปป์ไลน์สุดท้ายที่ดำเนินการในโหมดเบื้องหน้า

พารามิเตอร์ยัติภังค์ส่งคืนแฟล็กของพารามิเตอร์ปัจจุบันตามที่ตั้งค่าไว้เมื่อเรียกใช้คำสั่งบิวด์อิน ชุดหรือตามที่เชลล์กำหนดไว้ (เช่น -i)

ส่งกลับ ID กระบวนการเชลล์

ส่งคืน ID กระบวนการของคำสั่งสุดท้ายที่ดำเนินการในโหมดพื้นหลัง (อะซิงโครนัส)

ส่งกลับชื่อของเชลล์หรือสคริปต์

ค่าของพารามิเตอร์ "ขีดล่าง" ถูกตั้งค่าเมื่อเชลล์คำสั่งเริ่มทำงานและมี ชื่อเต็มเชลล์หรือสคริปต์ที่ดำเนินการตามที่ถูกส่งผ่านในรายการอาร์กิวเมนต์ ค่าจะถูกแทนที่ด้วยอาร์กิวเมนต์สุดท้ายของคำสั่งก่อนหน้า พารามิเตอร์นี้ยังระบุเส้นทางแบบเต็มไปยังแต่ละคำสั่งที่ดำเนินการและวางในสภาพแวดล้อมที่ถูกส่งออกไปยังคำสั่งนั้น เมื่อตรวจสอบเมล พารามิเตอร์นี้จะมีชื่อของไฟล์เมล

พารามิเตอร์ตำแหน่งคือคำที่ตามหลังชื่อของเชลล์สคริปต์ โดยจะถูกเก็บไว้ในตัวแปร $1, $2, $3 และอื่นๆ ตัวแปรจะถูกเพิ่มเข้าไปในอาร์เรย์ภายในตามความจำเป็น ตัวแปร $# ระบุจำนวนพารามิเตอร์ทั้งหมด ดังแสดงในสคริปต์ง่ายๆ ต่อไปนี้:

#positional.sh # สคริปต์นี้อ่านพารามิเตอร์ตำแหน่ง 3 รายการแล้วพิมพ์ออกมา POSPAR1="$1" POSPAR2="$2" POSPAR3="$3" echo "$1 เป็นพารามิเตอร์ตำแหน่งแรก \$1" echo "$2 เป็นพารามิเตอร์ตำแหน่งที่สอง \$2" echo "$3 เป็นพารามิเตอร์ตำแหน่งที่สาม \$3" echo echo "จำนวนพารามิเตอร์ตำแหน่งทั้งหมดคือ $#"

เมื่อรันสคริปต์ คุณสามารถระบุจำนวนอาร์กิวเมนต์เท่าใดก็ได้:

Franky ~>positional.sh หนึ่ง สอง สาม สี่ ห้า หนึ่ง เป็นพารามิเตอร์ตำแหน่งแรก $1 two คือพารามิเตอร์ตำแหน่งที่สอง $2 three คือพารามิเตอร์ตำแหน่งที่สาม $3 จำนวนพารามิเตอร์ตำแหน่งทั้งหมดคือ 5 franky ~>positional.sh หนึ่ง สอง หนึ่ง คือพารามิเตอร์ตำแหน่งแรก $1 two คือพารามิเตอร์ตำแหน่งที่สอง $2 คือพารามิเตอร์ตำแหน่งที่สาม $3 จำนวนพารามิเตอร์ตำแหน่งทั้งหมดคือ 2

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้พารามิเตอร์เหล่านี้ โปรดดูบทที่ 7 คำสั่งแบบมีเงื่อนไข และส่วนของคำสั่งในตัว shift

ตัวอย่างของพารามิเตอร์พิเศษอื่นๆ:

Franky ~> พจนานุกรม grep /usr/share/dict/words พจนานุกรม franky ~> echo $_ /usr/share/dict/words franky ~> echo $$ 1,0662 franky ~> mozilla & 11064 franky ~> echo $! 11,064 แฟรงกี้ ~> echo $0 ทุบตีแฟรงกี้ ~> echo $? 0 แฟรงกี้ ~> ls ไม่มีอยู่ ls: ไม่มีอยู่: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว แฟรงกี้ ~> echo $? 1 แฟรงกี้ ~>

ผู้ใช้ แฟรงกี้เริ่มต้นด้วยการป้อนคำสั่ง เกรปซึ่งกำหนดค่าให้กับตัวแปร _ ID กระบวนการของเชลล์นี้คือ 10662 หากการดำเนินการของงานบางอย่างถูกถ่ายโอนไป โหมดพื้นหลัง, ในตัวแปร! จะมีตัวระบุกระบวนการ งานเบื้องหลัง. เชลล์คำสั่งที่ใช้งานได้คือ ทุบตี. หากเกิดข้อผิดพลาดในตัวแปร? จะมีโค้ดส่งคืนแตกต่างจาก 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 การสำรองข้อมูล echo สำเร็จ >> /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 แต่มีความทันสมัย การกระจายลินุกซ์ควรทำงานในลักษณะเดียวกัน

สภาพแวดล้อมและตัวแปรทำงานอย่างไร

แต่ละครั้งที่มีการเปิดใช้งานเซสชันเชลล์ กระบวนการจะเริ่มรวบรวมและรวบรวมข้อมูลที่ควรจะพร้อมใช้งานสำหรับเชลล์และกระบวนการย่อย เชลล์รับข้อมูลนี้จากไฟล์และการตั้งค่าต่างๆ มากมายบนระบบ

โดยทั่วไป สภาพแวดล้อมจัดให้มีสิ่งอำนวยความสะดวกในการส่งสัญญาณที่รวบรวมและตั้งค่าการตั้งค่าที่จำเป็นให้กับกระบวนการเชลล์ ซึ่งจะส่งผ่านไปยังกระบวนการย่อย

สภาพแวดล้อมอยู่ในรูปแบบของสตริงที่มีคู่คีย์-ค่า โดยทั่วไปค่าหลายค่าจะถูกคั่นด้วยเครื่องหมายทวิภาค (:) โดยทั่วไปแต่ละคู่จะมีลักษณะดังนี้:

คีย์=value1:value2:...

หากค่ามีการเว้นวรรค คุณต้องใช้เครื่องหมายคำพูดคู่:

KEY = "ค่าที่มีช่องว่าง"

ในกรณีนี้ คีย์หมายถึงตัวแปรของหนึ่งในสองตัวแปร สายพันธุ์ที่มีอยู่: สภาพแวดล้อมหรือตัวแปรเชลล์

ตัวแปรสภาพแวดล้อมเป็นตัวแปรที่กำหนดไว้สำหรับเชลล์ปัจจุบันและสืบทอดโดยเชลล์ลูกหรือกระบวนการทั้งหมด ตัวแปรสภาพแวดล้อมใช้เพื่อส่งข้อมูลไปยังกระบวนการที่เรียกใช้จากเชลล์

ตัวแปรเชลล์เป็นตัวแปรที่มีอยู่เฉพาะในเชลล์ซึ่งมีการตั้งค่าหรือกำหนดไว้ มักใช้เพื่อติดตามข้อมูลปัจจุบัน (เช่น ไดเร็กทอรีการทำงานปัจจุบัน)

โดยปกติแล้ว ตัวแปรดังกล่าวจะแสดงด้วยตัวพิมพ์ใหญ่ ซึ่งจะช่วยให้ผู้ใช้แยกแยะระหว่างตัวแปรสภาพแวดล้อมในบริบทอื่น

การพิมพ์ตัวแปรเชลล์และสภาพแวดล้อม

แต่ละเซสชันจะติดตามตัวแปรเชลล์และสภาพแวดล้อมของตัวเอง มีหลายวิธีในการเอาพวกมันออกไป

หากต้องการดูรายการตัวแปรสภาพแวดล้อมทั้งหมด ให้ใช้คำสั่ง env หรือ printenv โดยค่าเริ่มต้น ผลลัพธ์ที่ได้จะออกมาเหมือนกันทุกประการ:

โรงพิมพ์
SHELL=/bin/bash
TERM=xterm
USER=ผู้สาธิต
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:หรือ=40;31;01:su=37;41:sg=30;43:ca:...
MAIL=/var/mail/demuser
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=เดมูเซอร์
เลสโซเพน=| /usr/bin/lesspipe %s
LESSCLOSE=/usr/bin/lesspipe %s %s
_=/usr/bin/printenv

นี่เป็นตัวอย่างทั่วไปของเอาต์พุตของคำสั่ง printenv และ env คำสั่งเหล่านี้แตกต่างกันในฟังก์ชันบางอย่างเท่านั้น ตัวอย่างเช่น printenv สามารถสืบค้นค่าของตัวแปรแต่ละตัวได้:

พิมพ์v SHELL
/bin/ทุบตี

คำสั่ง env อนุญาตให้คุณเปลี่ยนสภาพแวดล้อมที่โปรแกรมรันโดยส่งชุดคำจำกัดความของตัวแปรไปยังคำสั่ง บางอย่างในลักษณะนี้:

env VAR1="blahblah" command_to_run command_options

ตามที่ระบุไว้ข้างต้น กระบวนการลูกมักจะสืบทอดตัวแปรสภาพแวดล้อมของกระบวนการหลัก ซึ่งทำให้สามารถเปลี่ยนค่าหรือแนะนำตัวแปรเพิ่มเติมสำหรับกระบวนการลูกได้

ดังที่คุณเห็นในเอาต์พุตของคำสั่ง printenv ตัวแปรสภาพแวดล้อมจำนวนมากถูกสร้างขึ้นโดยใช้ ไฟล์ระบบและกระบวนการที่ผู้ใช้ไม่ต้องดำเนินการใดๆ

แต่คุณจะดูตัวแปรเชลล์ได้อย่างไร?

เมื่อต้องการทำเช่นนี้ ให้ใช้คำสั่ง set เมื่อป้อนโดยไม่มีพารามิเตอร์เพิ่มเติม 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=()
ทุบตี_ARGV=()
BASH_CMDS=()
. . .

ตามกฎแล้วรายการนี้ค่อนข้างยาว หากต้องการแสดงในรูปแบบที่สะดวกยิ่งขึ้น ให้เปิดโดยใช้โปรแกรมเพจเจอร์:

รายการนี้มีจำนวนมหาศาล ข้อมูลเพิ่มเติมซึ่งอยู่ใน ช่วงเวลานี้ไม่จำเป็น (เช่น ฟังก์ชั่นทุบตีบางอย่าง)

หากต้องการ "ล้าง" เอาต์พุต คุณต้องรันคำสั่ง set ในโหมด POSIX ซึ่งจะข้ามฟังก์ชันเชลล์ สิ่งนี้จะต้องทำในเชลล์ย่อยเพื่อไม่ให้เปลี่ยนสภาพแวดล้อมปัจจุบัน:

(ชุด -o posix; ชุด)

การดำเนินการนี้จะแสดงสภาพแวดล้อมและตัวแปรเชลล์ทั้งหมด

คุณยังสามารถเปรียบเทียบเอาต์พุตนี้กับเอาต์พุตของคำสั่ง env/printenv และลองแสดงรายการเฉพาะตัวแปรเชลล์ แต่รายการดังกล่าวจะไม่เหมาะ เนื่องจากเอาต์พุตของคำสั่งเหล่านี้แตกต่างกัน:

คอม -23<(set -o posix; set | sort) <(env | sort)

รายการอาจมีตัวแปรสภาพแวดล้อมหลายตัวเนื่องจากคำสั่ง set พิมพ์ค่าในเครื่องหมายคำพูด แต่คำสั่ง printenv และ env ไม่มี

อย่างไรก็ตาม นี่เป็นวิธีที่ดีในการดูสภาพแวดล้อมและตัวแปรเชลล์ที่ตั้งค่าในเซสชันที่กำหนด

ตัวแปรดังกล่าวใช้เพื่อวัตถุประสงค์ทุกประเภท พวกเขาให้ทางเลือกอื่นในการตั้งค่าถาวรสำหรับเซสชันระหว่างกระบวนการโดยไม่จำเป็นต้องทำการเปลี่ยนแปลงไฟล์

สภาพแวดล้อมพื้นฐานและตัวแปรเชลล์

สภาพแวดล้อมและตัวแปรเชลล์ที่มีประโยชน์อย่างยิ่งบางตัวถูกใช้บ่อยมาก

ด้านล่างนี้คือรายการตัวแปรสภาพแวดล้อมหลัก:

  • เปลือก: อธิบายเชลล์ที่ตีความคำสั่งที่ป้อน ในกรณีส่วนใหญ่ bash จะถูกติดตั้งตามค่าเริ่มต้น แต่ค่านี้สามารถเปลี่ยนแปลงได้หากจำเป็น
  • ภาคเรียน: ระบุประเภทของเทอร์มินัลที่จำลองเมื่อเรียกใช้เชลล์ สามารถจำลองเทอร์มินัลฮาร์ดแวร์ที่แตกต่างกันได้ ขึ้นอยู่กับข้อกำหนดในการปฏิบัติงาน โดยปกติแล้วคุณไม่จำเป็นต้องกังวลเกี่ยวกับเรื่องนี้
  • ผู้ใช้: ผู้ใช้ปัจจุบัน.
  • P.W.D.: ไดเร็กทอรีการทำงานปัจจุบัน
  • OLDPWD: ไดเร็กทอรีการทำงานก่อนหน้า เชลล์จะจัดเก็บไว้ในกรณีที่คำสั่ง cd - ถูกรัน
  • แอลเอส_สี: กำหนดรหัสสีที่ใช้ในการปรับสีเอาต์พุตของคำสั่ง ls เอาต์พุตนี้ช่วยให้ผู้ใช้อ่านผลลัพธ์ของคำสั่งได้เร็วขึ้น (เช่น แยกความแตกต่างระหว่างประเภทไฟล์ได้อย่างรวดเร็ว)
  • จดหมาย: เส้นทางไปยังกล่องจดหมายปัจจุบันของผู้ใช้
  • เส้นทาง: รายการไดเร็กทอรีที่ระบบเข้าถึงเมื่อรันคำสั่ง เมื่อผู้ใช้รันคำสั่ง ระบบจะตรวจสอบไดเร็กทอรีเหล่านี้ตามลำดับที่ระบุสำหรับไฟล์ปฏิบัติการ
  • แลง: การตั้งค่าภาษาและการแปลปัจจุบัน รวมถึงการเข้ารหัสอักขระ
  • บ้าน: โฮมไดเร็กตอรี่ของผู้ใช้ปัจจุบัน
  • _ : ดำเนินการคำสั่งสุดท้าย

หลังจากตรวจสอบรายการตัวแปรสภาพแวดล้อมแล้ว ให้ตรวจสอบรายการตัวแปรเชลล์:

  • บาชอปส์: รายการตัวเลือกที่ใช้เมื่อดำเนินการทุบตี สามารถใช้เพื่อตรวจสอบว่าสภาพแวดล้อมทำงานตามที่คาดไว้หรือไม่
  • ทุบตี_รุ่น: เวอร์ชันที่รันอยู่ของ bash ในรูปแบบที่มนุษย์สามารถอ่านได้
  • ทุบตี_เวอร์ซินโฟ: bash เวอร์ชันที่เครื่องอ่านได้
  • คอลัมน์: ระบุความกว้างของเอาต์พุตเป็นคอลัมน์
  • กองซ้อน: สแต็กของไดเร็กทอรีที่สามารถเข้าถึงได้โดยคำสั่ง pushd และ popd
  • HISTFILESIZE: จำนวนบรรทัดสูงสุดที่มีอยู่ในไฟล์ประวัติคำสั่ง
  • ฮิสต์ไซส์: จำนวนคำสั่งที่ต้องจดจำในรายการประวัติ
  • ชื่อโฮสต์: ชื่อโฮสต์ปัจจุบัน
  • ไอเอฟเอส:ตัวคั่นฟิลด์อินพุตภายในบนบรรทัดคำสั่ง ค่าเริ่มต้นคือช่องว่าง
  • PS1: กำหนดบรรทัดพร้อมท์เริ่มต้น - ประเภทของบรรทัดคำสั่งเมื่อเริ่มต้นเซสชันเชลล์ ตัวแปร PS2 จะตั้งค่าบรรทัดพรอมต์รองหากคำสั่งขยายหลายบรรทัด
  • หอยเชลล์: ตัวเลือกเชลล์ที่สามารถตั้งค่าได้โดยใช้ชุด
  • UID: ตัวระบุที่ไม่ซ้ำสำหรับผู้ใช้ปัจจุบัน

การตั้งค่าตัวแปรเชลล์และสภาพแวดล้อม

ด้านล่างนี้เป็นตัวอย่างบางส่วนที่แสดงให้เห็นถึงความแตกต่างระหว่างตัวแปรเชลล์และสภาพแวดล้อม และเพื่ออธิบายไวยากรณ์สำหรับการตั้งค่าตัวแปรเหล่านี้

การสร้างตัวแปรเชลล์

ขั้นแรก คุณต้องตั้งค่าตัวแปรเชลล์สำหรับเซสชันปัจจุบัน ซึ่งทำได้ง่ายมาก สิ่งที่คุณต้องทำคือระบุชื่อและค่า ดังที่ได้กล่าวไปแล้ว อักษรตัวใหญ่ ใช้ในการเขียนชื่อของตัวแปรดังกล่าว

TEST_VAR="สวัสดีชาวโลก!"

ตัวอย่างนี้ใช้เครื่องหมายคำพูดเนื่องจากค่ามีช่องว่าง นอกจากนี้ คุณต้องใช้เครื่องหมายคำพูดเดี่ยวที่นี่ เนื่องจากเครื่องหมายอัศเจรีย์เป็นอักขระพิเศษใน bash shell ที่เข้าถึงประวัติคำสั่ง เว้นแต่จะมีการหลีกเลี่ยงหรือปิดล้อมด้วยเครื่องหมายคำพูดเดี่ยว

ดังนั้น ตัวแปรเชลล์ผลลัพธ์จึงใช้ได้ในเซสชันปัจจุบัน แต่จะไม่ส่งต่อไปยังกระบวนการลูก

หากต้องการตรวจสอบสิ่งนี้ ให้ใช้คำสั่ง grep กับผลลัพธ์ของคำสั่ง set:

ตั้ง | grep TEST_VAR
TEST_VAR="สวัสดีชาวโลก!"

คุณยังสามารถตรวจสอบให้แน่ใจว่าตัวแปรนี้ไม่ใช่ตัวแปรสภาพแวดล้อมด้วยการรัน grep กับผลลัพธ์ของคำสั่ง printenv:

printenv | grep TEST_VAR

การกระทำนี้จะไม่ก่อให้เกิดผลลัพธ์ใดๆ

ซึ่งสามารถใช้เพื่อเปิดเผยค่าของเชลล์หรือตัวแปรสภาพแวดล้อม

เสียงสะท้อน $TEST_VAR
สวัสดีชาวโลก!

อย่างที่คุณเห็น ในการเข้าถึงค่าของตัวแปร คุณต้องใช้สัญลักษณ์ $

ขอย้ำอีกครั้งว่าไม่ควรส่งตัวแปรผลลัพธ์ไปยังกระบวนการลูกใดๆ เพื่อทดสอบสิ่งนี้ ภายในเชลล์ปัจจุบันของคุณ ให้ปรับใช้ bash เชลล์ใหม่:

ทุบตี
เสียงสะท้อน $TEST_VAR

หากคุณขยายเชลล์ลูกและพยายามเปิดเนื้อหาของตัวแปร จะไม่มีอะไรพิมพ์ออกมา ซึ่งหมายความว่าทุกอย่างทำงานได้อย่างถูกต้อง

หากต้องการกลับสู่เชลล์เดิม ให้พิมพ์ exit:

การสร้างตัวแปรสภาพแวดล้อม

ตอนนี้ลองเปลี่ยนตัวแปรเชลล์ให้เป็นตัวแปรสภาพแวดล้อม ซึ่งทำได้โดยการส่งออกตัวแปร คำสั่งที่ดำเนินการส่งออกจะถูกตั้งชื่อตามนั้น

คำสั่งนี้เปลี่ยนตัวแปรเชลล์ให้เป็นตัวแปรสภาพแวดล้อม หากต้องการตรวจสอบว่าทุกอย่างถูกต้องหรือไม่ คุณสามารถดูรายการตัวแปรสภาพแวดล้อมอีกครั้ง:

printenv | grep TEST_VAR
TEST_VAR=สวัสดีชาวโลก!

ตอนนี้ตัวแปรนี้จะแสดงอยู่ในรายการนี้ คุณยังสามารถขยายเชลล์ย่อยได้อีกครั้ง:

ทุบตี
เสียงสะท้อน $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 อ่านไฟล์การกำหนดค่าจำนวนมาก

ประเภทของเซสชันเชลล์

bash shell อ่านไฟล์คอนฟิกูเรชันที่แตกต่างกัน ขึ้นอยู่กับว่าเซสชันเริ่มต้นอย่างไร เซสชันสองประเภทแรกที่กำหนดเชลล์คือ start และ child

สตาร์ทเตอร์หรือเชลล์เริ่มต้น(login shell) เป็นเซสชันเชลล์ที่เปิดขึ้นหลังจากการอนุญาตจากผู้ใช้ หากผู้ใช้เข้าสู่ระบบเทอร์มินัลหรือตรวจสอบสิทธิ์โดยใช้ SSH เชลล์เริ่มต้นระบบจะเปิดขึ้น

หากเซสชันใหม่เริ่มต้นจากเซสชันที่ได้รับอนุญาต (เริ่มต้น) (เช่นเดียวกับในตัวอย่างก่อนหน้านี้ bash shell ใหม่ได้เริ่มต้นขึ้น) เซสชันนี้จะเป็น บริษัท ย่อย (ไม่ใช่-เข้าสู่ระบบเปลือก). หากต้องการเปิดเซสชั่นนี้ คุณไม่จำเป็นต้องผ่านขั้นตอนการอนุญาต

นอกจากนี้ เซสชันเชลล์สามารถเป็นแบบโต้ตอบหรือไม่โต้ตอบก็ได้

เซสชันแบบโต้ตอบเชลล์ (เชลล์แบบโต้ตอบ) เป็นเซสชันที่เชื่อมโยงกับเทอร์มินัล เซสชันเชลล์แบบไม่โต้ตอบคือเซสชันที่ไม่เกี่ยวข้องกับเทอร์มินัล

ดังนั้น เซสชันของเชลล์จะถูกจัดประเภทตามลักษณะต่อไปนี้: start-child, Interactive-Non-Interactive

โดยทั่วไปเซสชันปกติที่เปิดโดยใช้ SSH จะเป็นเซสชันเริ่มต้นแบบโต้ตอบ โดยทั่วไปสคริปต์ที่ทำงานผ่านบรรทัดคำสั่งจะทำงานในเซสชันลูกที่ไม่โต้ตอบ เซสชันเทอร์มินัลเป็นการผสมผสานที่แตกต่างกันของคุณสมบัติทั้งสองนี้

โดยการจัดประเภทเซสชันเป็นเซสชันเริ่มต้นหรือเซสชันย่อย ระบบจะเข้าใจว่าไฟล์ใดที่ต้องอ่านเพื่อเริ่มต้นเซสชันเชลล์

ดังนั้น ขั้นแรกเซสชันเริ่มต้นจะได้รับการกำหนดค่าจากไฟล์ /etc/profile จากนั้นจะค้นหาไฟล์การกำหนดค่าเชลล์เริ่มต้นระบบในโฮมไดเร็กทอรีของผู้ใช้เพื่อรับการกำหนดค่าที่ผู้ใช้กำหนด

เซสชันนี้จะอ่านไฟล์ ~/.bash_profile, ~/.bash_login และ ~/.profile และไม่อ่านไฟล์อื่น

เซสชันย่อยจะอ่าน /etc/baash.bashrc จากนั้นจึงอ่านไฟล์ ~/.bash.rc ของผู้ใช้เพื่อปรับใช้สภาพแวดล้อม

เชลล์แบบไม่โต้ตอบอ่านตัวแปรสภาพแวดล้อม BASH_ENV และไฟล์ที่ระบุเพื่อสร้างสภาพแวดล้อมใหม่

วิธีการตั้งค่าตัวแปรสภาพแวดล้อม

อย่างที่คุณเห็น การกำหนดค่าจะกระจัดกระจายไปตามไฟล์ต่างๆ

สิ่งนี้ทำให้ระบบมีความยืดหยุ่นสูง ซึ่งมีประโยชน์ในบางสถานการณ์ เมื่อคุณต้องการตั้งค่าพารามิเตอร์ที่แตกต่างกันสำหรับเชลล์เริ่มต้นและเชลล์ย่อย อย่างไรก็ตาม โดยทั่วไปเชลล์เหล่านี้จะใช้การตั้งค่าเดียวกัน

โชคดีที่ลีนุกซ์ส่วนใหญ่ชี้ไปที่ไฟล์คอนฟิกูเรชันเชลล์ย่อยเป็นแหล่งที่มาของคอนฟิกูเรชันเชลล์เริ่มต้น ซึ่งหมายความว่าคุณสามารถกำหนดตัวแปรสภาพแวดล้อมสำหรับทั้งสองเซสชันในไฟล์การกำหนดค่าของเชลล์ย่อยได้

โดยทั่วไปแล้ว เชลล์ทั้งสองจะใช้ตัวแปรสภาพแวดล้อมที่ผู้ใช้กำหนด ซึ่งหมายความว่าคุณสามารถตั้งค่าตัวแปรเหล่านี้ในไฟล์ ~/.bashrc ได้

เปิดไฟล์นี้:

เป็นไปได้มากว่ามันมีข้อมูลบางอย่างอยู่แล้ว ค่าส่วนใหญ่ที่ตั้งไว้ที่นี่เป็นตัวเลือกทุบตีและไม่เกี่ยวข้องกับตัวแปรสภาพแวดล้อม ตัวแปรในไฟล์นี้ได้รับการตั้งค่าในลักษณะเดียวกับในบรรทัดคำสั่ง:

ส่งออก VARNAME=ค่า

หลังจากป้อนตัวแปรที่จำเป็นทั้งหมดแล้ว ให้ปิดไฟล์ ครั้งถัดไปที่คุณเริ่มเซสชันเชลล์ ตัวแปรที่ตั้งไว้ที่นี่จะถูกอ่านและส่งผ่านไปยังสภาพแวดล้อมเชลล์ หากต้องการบอกให้เซสชันปัจจุบันอ่านไฟล์ที่กำหนด ให้ป้อน:

ที่มา ~/.bashrc

หากต้องการตั้งค่าตัวแปรทั้งระบบ ให้เพิ่มลงใน /etc/profile, /etc/bash.bashrc หรือ /etc/environment

ผลลัพธ์

ตัวแปรเชลล์และสภาพแวดล้อมจะแสดงอยู่ในเซสชันเชลล์ทั้งหมดเสมอ ดังนั้นการรู้วิธีทำงานกับตัวแปรเหล่านี้จึงมีประโยชน์อย่างยิ่ง สามารถใช้เพื่อส่งผ่านการกำหนดค่ากระบวนการหลักไปยังกระบวนการย่อย รวมถึงกำหนดการตั้งค่าภายนอกไฟล์

สิ่งนี้มีข้อดีหลายประการในบางสถานการณ์ ตัวอย่างเช่น กลไกการปรับใช้บางอย่างอาศัยตัวแปรสภาพแวดล้อมเพื่อกำหนดค่าข้อมูลการรับรองความถูกต้อง สะดวกเพราะข้อมูลสำคัญดังกล่าวจะไม่ถูกจัดเก็บไว้ในไฟล์ใดๆ ซึ่งหมายความว่าจะได้รับการปกป้องจากบุคคลภายนอกได้อย่างน่าเชื่อถือ

มีสถานการณ์ทั่วไปอื่นๆ อีกมากมายที่คุณอาจต้องอ่านตัวแปรหรือเปลี่ยนสภาพแวดล้อมของระบบ เครื่องมือและเทคนิคที่อธิบายไว้ในคู่มือนี้เป็นรากฐานที่ดีเยี่ยมสำหรับการพัฒนาทักษะในการทำงานกับตัวแปรและใช้งานอย่างถูกต้อง

แท็ก: ,

ตัวแปรสภาพแวดล้อมใน Linux เป็นตัวแปรพิเศษที่กำหนดโดยเชลล์และใช้โดยโปรแกรมขณะรันไทม์ สามารถกำหนดได้โดยระบบและผู้ใช้ ตัวแปรสภาพแวดล้อมระบบ Linux ถูกกำหนดโดยระบบและใช้โดยโปรแกรมระดับระบบ

ตัวอย่างเช่น คำสั่ง PWD ใช้ตัวแปรระบบเพื่อเก็บไดเร็กทอรีการทำงานก่อนหน้า ตัวแปรสภาพแวดล้อมผู้ใช้ถูกกำหนดโดยผู้ใช้ สำหรับเชลล์ปัจจุบัน ไม่ว่าจะชั่วคราวหรือถาวร แนวคิดทั้งหมดของการเพิ่มและการลบตัวแปรเชลล์เกี่ยวข้องกับหลายไฟล์ คำสั่ง และเชลล์ที่แตกต่างกัน

โดยทั่วไปแล้ว ตัวแปรสภาพแวดล้อมสามารถมีได้สามประเภท:

1. ตัวแปรสภาพแวดล้อมท้องถิ่น

ตัวแปรเหล่านี้ถูกกำหนดไว้สำหรับเซสชันปัจจุบันเท่านั้น ข้อมูลเหล่านี้จะถูกลบอย่างถาวรหลังจากเซสชันสิ้นสุดลง ไม่ว่าจะเป็นการเข้าถึงระยะไกลหรือโปรแกรมจำลองเทอร์มินัล พวกเขาไม่ได้จัดเก็บไว้ในไฟล์ใด ๆ แต่ถูกสร้างและลบโดยใช้คำสั่งพิเศษ

2. ตัวแปรเชลล์แบบกำหนดเอง

ตัวแปรเชลล์เหล่านี้ใน Linux ถูกกำหนดไว้สำหรับผู้ใช้เฉพาะ และจะถูกโหลดทุกครั้งที่ผู้ใช้เข้าสู่ระบบโดยใช้เทอร์มินัลท้องถิ่นหรือเชื่อมต่อจากระยะไกล โดยทั่วไปตัวแปรดังกล่าวจะถูกจัดเก็บไว้ในไฟล์การกำหนดค่า: .bashrc, .bash_profile, .bash_login, .profile หรือไฟล์อื่น ๆ ที่อยู่ในไดเร็กทอรีผู้ใช้

3. ตัวแปรสภาพแวดล้อมของระบบ

ตัวแปรเหล่านี้มีอยู่ทั่วทั้งระบบสำหรับผู้ใช้ทุกคน ไฟล์เหล่านี้จะถูกโหลดเมื่อเริ่มต้นระบบจากไฟล์คอนฟิกูเรชันระบบ: /etc/environment, /etc/profile, /etc/profile.d/ /etc/bash.bashrc

ไฟล์การกำหนดค่าตัวแปรสภาพแวดล้อม Linux

ที่นี่เราจะมาดูไฟล์การกำหนดค่าต่างๆ ที่ระบุไว้ข้างต้นซึ่งใช้ในการกำหนดค่าตัวแปรสภาพแวดล้อมสำหรับทั้งระบบหรือผู้ใช้เฉพาะรายโดยสรุป

.bashrc

นี่คือไฟล์ตัวแปรเฉพาะผู้ใช้ โหลดทุกครั้งที่ผู้ใช้สร้างเซสชันเทอร์มินัล กล่าวคือ เปิดเทอร์มินัลใหม่ ตัวแปรสภาพแวดล้อมทั้งหมดที่สร้างในไฟล์นี้จะมีผลทุกครั้งที่เริ่มเซสชันเทอร์มินัลใหม่

.bash_profile

ตัวแปรเหล่านี้จะมีผลทุกครั้งที่ผู้ใช้เชื่อมต่อระยะไกลผ่าน SSH หากไฟล์นี้หายไป ระบบจะค้นหา .bash_login หรือ .profile

/etc/สภาพแวดล้อม

ไฟล์นี้ใช้สำหรับสร้าง แก้ไข และลบตัวแปรสภาพแวดล้อมในระดับระบบ ตัวแปรสภาพแวดล้อมที่สร้างในไฟล์นี้จะพร้อมใช้งานสำหรับทั้งระบบ สำหรับผู้ใช้แต่ละราย และแม้กระทั่งเมื่อเชื่อมต่อจากระยะไกล

/etc/bash.bashrc

ระบบ bashrc ไฟล์นี้จะถูกดำเนินการสำหรับผู้ใช้แต่ละราย ทุกครั้งที่เขาสร้างเซสชันเทอร์มินัลใหม่ ใช้งานได้กับผู้ใช้ในพื้นที่เท่านั้น เมื่อเชื่อมต่อผ่านอินเทอร์เน็ต ตัวแปรดังกล่าวจะไม่ปรากฏให้เห็น

/etc/profile

โปรไฟล์ไฟล์ระบบ ตัวแปรทั้งหมดจากไฟล์นี้จะพร้อมใช้งานสำหรับผู้ใช้ทุกคนในระบบเฉพาะในกรณีที่เขาเข้าสู่ระบบจากระยะไกล แต่จะไม่สามารถใช้งานได้เมื่อสร้างเซสชันเทอร์มินัลในเครื่อง กล่าวคือ หากคุณเพียงแค่เปิดเทอร์มินัล

ตัวแปรสภาพแวดล้อม Linux ทั้งหมดที่สร้างขึ้นโดยใช้ไฟล์เหล่านี้สามารถลบออกได้ง่ายๆ ด้วยการลบออกจากที่นั่น หลังจากการเปลี่ยนแปลงแต่ละครั้งเท่านั้น คุณจะต้องออกจากระบบและกลับเข้าสู่ระบบใหม่ หรือเรียกใช้คำสั่งนี้:

ชื่อไฟล์ต้นฉบับ

การเพิ่มตัวแปรผู้ใช้และสภาพแวดล้อมระบบใน Linux

ตอนนี้คุณรู้ทฤษฎีเพียงเล็กน้อยแล้ว เรามาฝึกฝนกันต่อ ตัวแปรสภาพแวดล้อมท้องถิ่นใน Linux สามารถสร้างได้ด้วยคำสั่งต่อไปนี้:

var=ค่า
$ ส่งออก var=value

ตัวแปรเหล่านี้จะพร้อมใช้งานสำหรับเซสชันเทอร์มินัลปัจจุบันเท่านั้น

มีคำสั่งหลายคำสั่งที่คุณสามารถใช้เพื่อลบตัวแปรสภาพแวดล้อม:

1. การใช้สภาพแวดล้อม

ตามค่าเริ่มต้น คุณสามารถใช้ env เพื่อดูตัวแปรสภาพแวดล้อมที่ตั้งค่าไว้ทั้งหมดได้ แต่ด้วยตัวเลือก -i จะทำให้คุณสามารถลบตัวแปรเชลล์ทั้งหมดชั่วคราวและดำเนินการคำสั่งโดยไม่มีตัวแปร

คำสั่ง env –i

Var คือตัวแปรใดๆ ที่คุณต้องการส่งผ่านไปยังคำสั่งนี้

คำสั่งนี้จะสตาร์ทเชลล์โดยไม่มีตัวแปรสภาพแวดล้อมใดๆ เลย:

หลังจากเปิดตัวสภาพแวดล้อมดังกล่าวแล้ว จะไม่มีตัวแปรให้ใช้งาน แต่หลังจากออกแล้ว ทุกอย่างจะกลับสู่ตำแหน่งเดิม

2. การใช้การไม่ตั้งค่า

นี่เป็นอีกวิธีหนึ่งในการลบตัวแปรสภาพแวดล้อม Linux Unset จะลบตัวแปรตามชื่อจนกระทั่งสิ้นสุดเซสชันปัจจุบัน:

ยกเลิกการตั้งค่า Variable_name

3. ตั้งค่าตัวแปรเป็น ""

นี่เป็นวิธีที่ง่ายที่สุดในการลบตัวแปรสภาพแวดล้อมใน Linux โดยการตั้งค่าตัวแปรให้ว่างเปล่า คุณจะลบตัวแปรนั้นในช่วงที่เหลือของเซสชันปัจจุบัน

หมายเหตุ: เมื่อใช้วิธีการเหล่านี้ คุณสามารถเปลี่ยนค่าของระบบหรือตัวแปรผู้ใช้ได้ แต่จะเกี่ยวข้องกับเซสชันปัจจุบันเท่านั้น

การสร้างตัวแปรสภาพแวดล้อมของผู้ใช้และระบบ

ในส่วนนี้ เราจะดูวิธีตั้งค่าและลบตัวแปรระบบและผู้ใช้ ไม่เพียงแต่สำหรับเซสชันปัจจุบันเท่านั้น แต่ยังเพื่อให้ผลกระทบยังคงอยู่หลังจากการรีบูต

1. ตั้งค่าและลบตัวแปรโลคัลใน Linux

มาสร้างตัวแปรภายในเครื่อง VAR และตั้งค่าเป็นค่าใดก็ได้ จากนั้นยกเลิกการตั้งค่าและตรวจสอบให้แน่ใจว่าได้ลบแล้ว:

VAR1="แพ้"
$ เอคโค $VAR1
$ยกเลิกการตั้งค่า VAR1
$ เอคโค $VAR1

อีกวิธีหนึ่งในการสร้างตัวแปรคือใช้คำสั่งส่งออก มาลบมันออกโดยกำหนดค่าว่าง:

ส่งออก VAR = "ขาดทุน"
$ เอคโค $VAR
$วาร์=
$ เอคโค $VAR

ตอนนี้เรามาสร้างตัวแปร VAR2 และกำหนดค่าให้กับมันกัน จากนั้นลบตัวแปรโลคอลทั้งหมดชั่วคราวโดยรัน env -i มันจะเริ่มต้นเชลล์โดยไม่มีตัวแปรใดๆ หลังจากเข้าสู่ทางออกแล้ว ตัวแปรทั้งหมดจะถูกกู้คืน

VAR2="แพ้"
$ เอคโค $VAR2
$ env -i ทุบตี
$ เอคโค $VAR2

การตั้งค่าและการลบตัวแปรผู้ใช้

แก้ไขไฟล์ .bashrc ในโฮมไดเร็กตอรี่ของคุณโดยเพิ่มคำสั่งส่งออกเพื่อส่งออกตัวแปรที่ต้องการ จากนั้นรันคำสั่ง source เพื่อใช้การเปลี่ยนแปลง ตัวอย่างเช่น มาสร้างตัวแปร CD:

เพิ่มบรรทัดนี้ (o จากนั้นวาง จากนั้น Esc และ :wq):

ส่งออก CD = "นี่คือบ้านที่หายไป"

ตอนนี้ยังคงต้องอัปเดตการกำหนดค่า:

แหล่งที่มา.bashrc
$เอคโค $ซีดี

หากต้องการลบตัวแปรนี้ เพียงลบออกจาก .bashrc

ตอนนี้เรามาเพิ่มตัวแปรสภาพแวดล้อมโดยใช้ .bash_profile ดังที่คุณทราบแล้วตัวแปรนี้จะใช้ได้เฉพาะในระหว่างการเข้าสู่ระบบระยะไกลเท่านั้น:

vi .bash_profile

เพิ่มบรรทัด:

ส่งออก VAR2="นี่คือบ้านที่หายไป"

และรันคำสั่งเหล่านี้เพื่อใช้การเปลี่ยนแปลงและตรวจสอบว่ามีการเพิ่มตัวแปรแล้ว:

แหล่งที่มา.bash_profile
$ เอคโค $VAR2

ตัวแปรไม่พร้อมใช้งานเนื่องจากคุณได้สร้างเซสชันเทอร์มินัลในเครื่องแล้ว ตอนนี้เชื่อมต่อผ่าน ssh:

ผู้ใช้ ssh@localhost
$ เอคโค $VAR2

คุณสามารถลบตัวแปรสภาพแวดล้อมนี้ได้ในลักษณะเดียวกับในกรณีก่อนหน้าโดยการลบออกจากไฟล์

ความคิดเห็น: ตัวแปรเหล่านี้พร้อมใช้งานเสมอ แต่ไม่ใช่สำหรับผู้ใช้ทุกคน

การตั้งค่าและการลบตัวแปรสภาพแวดล้อมของระบบ

มาสร้างตัวแปรที่ผู้ใช้ทุกคนสามารถใช้ได้ในทุกเซสชันเทอร์มินัล ยกเว้นเซสชันระยะไกลโดยการเพิ่มลงใน /etc/bash.profile:

vi /etc/bash.profile

ส่งออก VAR = "นี่คือตัวแปรทั้งระบบ"

จากนั้นเราอัปเดต:

แหล่งที่มา /etc/bash.bashrc

ตอนนี้ตัวแปรนี้พร้อมใช้งานสำหรับผู้ใช้ทุกคน ในทุกเทอร์มินัล:

สะท้อน $VAR
$sudo su
$ เอคโค $VAR
$ซู -
$ เอคโค $VAR

หากคุณต้องการให้ตัวแปรสภาพแวดล้อมพร้อมใช้งานสำหรับผู้ใช้ทุกคนที่เชื่อมต่อกับเครื่องนี้แบบรีโมต ให้แก้ไขไฟล์ /etc/profile:

ส่งออก VAR1="นี่คือตัวแปรทั้งระบบสำหรับเซสชันระยะไกลเท่านั้น"

อัปเดตการกำหนดค่าและตรวจสอบความพร้อมใช้งานของตัวแปร โดยจะพร้อมใช้งานจากระยะไกลเท่านั้น:

แหล่งที่มา /etc/profile
$ เอคโค $VAR1

หากคุณต้องการเพิ่มตัวแปรสภาพแวดล้อมใน Linux เพื่อให้สามารถเข้าถึงได้ทั้งจากระยะไกลและสำหรับเซสชันในเครื่อง ให้ส่งออกไปที่ /etc/environment:

vi /etc/environment.vi

ส่งออก VAR12="ฉันพร้อมให้บริการทุกที่"

เราตรวจสอบ:

แหล่งที่มา /etc/environment
$ เอคโค่ $VAR12
$sudo su
$ เอคโค่ $VAR12
$ ออก
$ssh โลคัลโฮสต์
$ เอคโค่ $VAR12

2.2. ตัวแปรสภาพแวดล้อม

ระบบปฏิบัติการรองรับทรัพยากรชนิดพิเศษที่เรียกว่า ตัวแปรสภาพแวดล้อม (ตัวแปรสภาพแวดล้อม). ตัวแปรเหล่านี้เป็นคู่ ชื่อ - มูลค่า . ชื่อสามารถขึ้นต้นด้วยตัวอักษรและประกอบด้วยตัวอักษร ตัวเลข และขีดล่าง

หากต้องการทดแทนค่าของตัวแปรบนบรรทัดคำสั่ง ให้ใส่เครื่องหมาย $ นำหน้าชื่อตัวแปร:

$ echo $USER แขก

หากไม่ได้ตั้งค่าตัวแปร จะส่งกลับสตริงว่าง

หากต้องการตั้งค่าของตัวแปร ให้ใช้ตัวดำเนินการกำหนด (ในกรณีของเชลล์ที่มีลักษณะคล้ายบอร์น):

$ทดสอบ=ทดสอบ

หรือตัวดำเนินการตั้งค่าในตัว (ในกรณีของตัวคล้าย C):

$ ชุดทดสอบ=ทดสอบ

คำสั่ง set โดยไม่มีอาร์กิวเมนต์แสดงรายการค่าของตัวแปรทั้งหมดที่ตั้งค่าในสภาพแวดล้อม:

$ set COLUMNS=197 CVS_RSH=ssh DIRSTACK=() EUID=1,000 กลุ่ม=() G_BROKEN_FILENAMES=1 HISTFILE=/home/guest/.bash_history HISTFILESIZE=1,000 HISTSIZE=1,000 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

คุณสามารถประเมินเนื้อหาของชุดตัวแปรสำหรับเซสชันได้โดยการเรียกคำสั่งในตัวของล่าม env ในกรณีของล่ามที่เหมือนบอร์น (sh, ksh, bash, zsh, pdksh...) และ printenv ในกรณี ของล่ามโคลน C-Shell (csh, tcsh. ..):

$ env HOSTNAME=myhost TERM=xterm SHELL=/bin/bash HISTSIZE=1,000 KDE_NO_IPV6=1 SSH_CLIENT=172.16.0.9 50487 22 QTDIR=/usr/lib/qt-3.3 QTINC=/usr/lib/qt-3.3/รวม SSH_TTY =/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/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

ชุดคำสั่ง เปลือกสามารถคอมไพล์เป็นไฟล์คำสั่งที่เรียกว่าสคริปต์ โดยที่บรรทัดแรกในความคิดเห็นประเภทพิเศษระบุตัวแปลคำสั่งสำหรับการดำเนินการชุดนี้ ตัวอย่างเช่น เรามาสร้างไฟล์ในโปรแกรมแก้ไขข้อความชื่อ test โดยมีเนื้อหาดังต่อไปนี้:

#!/bin/sh ตัวแปรทดสอบ echo: echo $TEST

โปรแกรมนี้จะพิมพ์ข้อความ "ตัวแปร TEST: " และค่าของตัวแปร TEST ไปยังเอาต์พุตมาตรฐาน หากระบุไว้ คุณสามารถรันได้จากบรรทัดคำสั่งโดยส่งเป็นพารามิเตอร์ไปยังตัวแปลคำสั่ง:

$sh ทดสอบ ตัวแปรทดสอบ:

คุณสามารถสร้างตัวแปรโกลบอลได้โดยใช้คำสั่งส่งออก (Bourne) หรือ setenv (C-SHell):

$ ส่งออก TEST=test1 $ sh ทดสอบ ตัวแปรทดสอบ: test1

คุณสามารถตั้งค่าท้องถิ่นของตัวแปรสำหรับการรันโปรแกรมที่กำหนดโดยนำหน้าด้วยการเรียกคำสั่ง:

$ TEST=test2 sh ทดสอบ ตัวแปรทดสอบ: test2

การลบตัวแปรสภาพแวดล้อมทำได้โดยใช้คำสั่ง unset

แนวคิดของพารามิเตอร์ในเชลล์ ทุบตีคล้ายกับแนวคิดของตัวแปรในภาษาโปรแกรมทั่วไป ชื่อพารามิเตอร์ (หรือตัวระบุ) ​​สามารถเป็นคำที่ประกอบด้วยอักขระตัวอักษร ตัวเลข และขีดล่าง (เฉพาะอักขระตัวแรกของคำเท่านั้นที่ไม่สามารถเป็นตัวเลขได้) ตัวเลข หรืออักขระพิเศษตัวใดตัวหนึ่งต่อไปนี้: * , @ , # , ? , - (ยัติภังค์), $ , ! , 0 , _ (ขีดเส้นใต้).

พารามิเตอร์ถูกกล่าวว่าถูกตั้งค่าหรือตั้งค่าหากมีการกำหนดค่าให้กับพารามิเตอร์นั้น ค่านี้อาจเป็นสตริงว่างก็ได้ หากต้องการแสดงค่าของพารามิเตอร์ ให้ใช้สัญลักษณ์ $ ก่อนชื่อของเขา ใช่ครับ ทีม

$ ชื่อสะท้อน

จะแสดงคำบนหน้าจอ ชื่อและทีมงาน

$เอคโค $ชื่อ

จะส่งกลับค่าของตัวแปรชื่อ (ถ้ามีการตั้งค่าไว้แน่นอน)

5.6.1 พารามิเตอร์ที่หลากหลาย

พารามิเตอร์แบ่งออกเป็นสามคลาส: พารามิเตอร์ตำแหน่ง พารามิเตอร์พิเศษ(ชื่อที่เป็นอักขระพิเศษที่เพิ่งระบุไว้) และ ตัวแปรเชลล์.

ชื่อ (ตัวระบุ) พารามิเตอร์ตำแหน่งประกอบด้วยตัวเลขหนึ่งหลักขึ้นไป (ไม่ใช่ศูนย์ตัวเดียว) ค่าพารามิเตอร์ตำแหน่งคืออาร์กิวเมนต์ที่ได้รับเมื่อเชลล์เริ่มทำงาน (อาร์กิวเมนต์แรกคือค่าของพารามิเตอร์ตำแหน่ง 1 เป็นต้น) คุณสามารถเปลี่ยนค่าของพารามิเตอร์ตำแหน่งได้โดยใช้คำสั่งในตัว ชุด. ค่าของพารามิเตอร์เหล่านี้ยังเปลี่ยนแปลงในขณะที่เชลล์กำลังดำเนินการฟังก์ชันใดฟังก์ชันหนึ่ง (ซึ่งจะกล่าวถึงด้านล่างใน ส่วน 5.8).

พารามิเตอร์พิเศษเป็นรูปแบบการทดแทน (ทดแทน) โดยมีการดำเนินการดังนี้

ตารางที่ 5.2.พารามิเตอร์พิเศษ

พารามิเตอร์

กฎการเปลี่ยนตัว

แทนที่ด้วยพารามิเตอร์ตำแหน่งโดยเริ่มจากอันแรก หากการแทนที่เกิดขึ้นภายในเครื่องหมายคำพูดคู่ พารามิเตอร์นี้จะถูกแทนที่ด้วยคำเดียวที่ประกอบด้วยพารามิเตอร์ตำแหน่งทั้งหมด คั่นด้วยอักขระตัวแรกของตัวแปร IFS พิเศษ (ตามที่อธิบายด้านล่าง) นั่นคือ ``$*"" เทียบเท่ากับ ``$1c$2c..." โดยที่ c คืออักขระตัวแรกในค่าของตัวแปร IFS หาก IFS ถูกตั้งค่าเป็นว่างหรือไม่ได้ตั้งค่าไว้ พารามิเตอร์จะถูกคั่นด้วยช่องว่าง

แทนที่ด้วยพารามิเตอร์ตำแหน่งโดยเริ่มจากอันแรก หากมีการแทนที่ด้วยเครื่องหมายคำพูดคู่ แต่ละพารามิเตอร์จะถูกแทนที่ด้วยคำที่แยกจากกัน ดังนั้น `` $@"" จึงเทียบเท่ากับ ""$1"" ""$2"" ... หากไม่มีพารามิเตอร์ตำแหน่ง ก็จะไม่มีการกำหนดค่า (พารามิเตอร์ @ จะถูกลบออกอย่างง่ายดาย)

แทนที่ด้วยค่าทศนิยมของจำนวนพารามิเตอร์ตำแหน่ง

แทนที่ด้วยสถานะทางออกของช่องโปรแกรมเบื้องหน้าสุดท้ายที่ทำงานอยู่

(ยัติภังค์)

แทนที่ด้วยชุดค่าสถานะปัจจุบันที่กำหนดโดยใช้คำสั่งบิวด์อิน ชุดหรือเมื่อสตาร์ทเชลล์เอง

แทนที่ด้วยตัวระบุกระบวนการ (P ID) ของเชลล์

แทนที่ด้วยตัวระบุกระบวนการ (P ID) ของคำสั่งพื้นหลังที่ดำเนินการล่าสุด (ดำเนินการแบบอะซิงโครนัส)

แทนที่ด้วยชื่อของเชลล์หรือสคริปต์ที่จะรัน ถ้า ทุบตีรันเพื่อรันแบตช์ไฟล์ $0 คือชื่อของไฟล์ มิฉะนั้นค่านี้จะเท่ากับเส้นทางแบบเต็มไปยังเชลล์

(ขีดเส้นใต้)

แทนที่ด้วยอาร์กิวเมนต์สุดท้ายของคำสั่งก่อนหน้าที่ดำเนินการ (หากนี่คือพารามิเตอร์หรือตัวแปร ค่าของมันจะถูกทดแทน)

พารามิเตอร์พิเศษที่แสดงอยู่ในตารางด้านบนแตกต่างกันตรงที่สามารถอ้างอิงได้เท่านั้น คุณไม่สามารถกำหนดค่าให้กับพวกเขาได้

ตัวแปรจากมุมมองของเชลล์ มันเป็นพารามิเตอร์ที่แสดงด้วยชื่อ ค่าถูกกำหนดให้กับตัวแปรโดยใช้ตัวดำเนินการต่อไปนี้:

$ชื่อ=มูลค่า

ที่ไหน ชื่อคือชื่อของตัวแปร และ ค่า— ค่าที่กำหนดให้กับมัน (อาจเป็นสตริงว่าง) ชื่อตัวแปรประกอบด้วยตัวเลขและตัวอักษรเท่านั้น และไม่สามารถขึ้นต้นด้วยตัวเลขได้ ค่าสามารถเป็นข้อความใดก็ได้ หากค่ามีอักขระพิเศษ จะต้องอยู่ในเครื่องหมายคำพูด ค่าที่กำหนดไม่มีเครื่องหมายคำพูดเหล่านี้แน่นอน หากตั้งค่าตัวแปรไว้ ก็สามารถลบออกได้โดยใช้คำสั่งเชลล์บิวด์อิน ไม่ได้ตั้งค่า.

ชุดของตัวแปรเชลล์ที่ตั้งค่าทั้งหมดที่มีค่าที่กำหนดเรียกว่าสภาพแวดล้อมหรือสภาพแวดล้อมของเชลล์ คุณสามารถดูได้โดยใช้คำสั่ง ชุดไม่มีพารามิเตอร์ (บางทีคุณควรจัดระเบียบไปป์ไลน์ "ตั้ง | น้อยลง"). ผลลัพธ์ของคำสั่งนี้จะแสดงรายการตัวแปรสภาพแวดล้อมทั้งหมดตามลำดับตัวอักษร หากต้องการดูค่าของตัวแปรเฉพาะตัวใดตัวหนึ่ง คุณสามารถใช้แทนคำสั่งได้ ชุด(ในผลลัพธ์ที่คุณยังสามารถค้นหาและค้นหาตัวแปรที่ต้องการได้) คุณสามารถใช้คำสั่งได้

$เอคโค $ชื่อ

(แต่ในกรณีนี้คุณต้องทราบชื่อของตัวแปรที่คุณสนใจ)

ในบรรดาตัวแปรที่คุณจะเห็นในเอาต์พุตคำสั่งได้แก่ ชุดมีตัวแปรที่น่าสนใจอยู่บ้าง ตัวอย่างเช่น ให้ความสนใจกับตัวแปร RANDOM หากคุณรันคำสั่งหลายครั้งติดต่อกัน

$ เสียงสะท้อน $ สุ่ม

คุณจะได้รับค่าใหม่ทุกครั้ง ความจริงก็คือตัวแปรนี้ส่งคืนจำนวนเต็มแบบสุ่มจากช่วง 0 - 32,768

5.6.2 เชลล์พร้อมท์

มีชื่อตัวแปรที่สำคัญมากตัวหนึ่ง PS1. ตัวแปรนี้ระบุประเภทของคำเชิญนั้น ทุบตีเอาต์พุตเมื่อกำลังรอให้ผู้ใช้ป้อนคำสั่งถัดไป ตามค่าเริ่มต้น ตัวแปรนี้จะถูกตั้งค่าเป็น "\s-\v\$ " จริงๆ แล้วอิน. ทุบตีมีคำเชิญสี่รายการที่ใช้ในสถานการณ์ที่แตกต่างกัน ตัวแปร PS1ระบุประเภทของพร้อมต์ที่ออกเมื่อเชลล์กำลังรอคำสั่งที่จะป้อน พรอมต์รองที่ระบุโดยตัวแปร พีเอส2ปรากฏขึ้นเมื่อเชลล์กำลังรอให้ผู้ใช้ป้อนข้อมูลเพิ่มเติมที่จำเป็นสำหรับการดำเนินการคำสั่งหรือโปรแกรมที่รันอยู่ต่อไป ตัวแปรเริ่มต้น พีเอส2มีความหมาย" >" . คุณอาจเห็นพรอมต์นี้แล้วเมื่อคุณรันคำสั่ง แมวเพื่อป้อนข้อมูลจากแป้นพิมพ์ลงในไฟล์ อีกตัวอย่างหนึ่งคือคำสั่ง ftpหลังจากเปิดตัวแล้ว ซึ่งคำเชิญก็ใช้แบบฟอร์มนี้ด้วย

พรอมต์ตัวแปร พีเอส3ใช้ในคำสั่ง เลือก. พรอมต์ตัวแปร พีเอส4จะถูกพิมพ์ก่อนแต่ละคำสั่งในขณะนั้น ทุบตีติดตามความคืบหน้าของการดำเนินการ ค่าเริ่มต้นคือ " + ".

หากคุณต้องการ คุณสามารถเปลี่ยนประเภทของตัวแปรได้ PS1และ พีเอส2. ในกรณีนี้ คุณสามารถใช้สัญลักษณ์ใดๆ ที่ป้อนจากแป้นพิมพ์ได้ เช่นเดียวกับอักขระพิเศษจำนวนหนึ่งซึ่งเมื่อสร้างสตริงพร้อมต์จะถูกถอดรหัสตามตาราง 5.3 (เราแสดงรายการเพียงบางส่วนเท่านั้น เป็นต้น สำหรับรายการทั้งหมด โปรดดูที่ man page ของยูทิลิตี้ ทุบตี) .

ตารางที่ 5.3.อักขระพิเศษสำหรับการสร้างคำเชิญ

เครื่องหมาย

ความหมายของมัน

เสียงบี๊บ (รหัส ASCII 07)

วันที่ในรูปแบบ "วัน เดือน วัน" เช่น พุธ ต.ค. 17

ชื่อโฮสต์จนถึงจุดแรก

ชื่อโฮสต์แบบเต็ม

เวลาปัจจุบันในรูปแบบ 24 ชั่วโมง: HH:MM:SS (ชั่วโมง:นาที:วินาที)

เวลาปัจจุบันในรูปแบบ 12 ชั่วโมง: HH:MM:SS

เวลาปัจจุบันในรูปแบบ 12 ชั่วโมง ก่อน/หลังเที่ยง

ชื่อของผู้ใช้ที่สตาร์ทเชลล์

ชื่อเต็มของไดเร็กทอรีการทำงานปัจจุบัน (เริ่มต้นที่รูท)

ไดเรกทอรีการทำงานปัจจุบัน (ไม่ได้ระบุเส้นทาง)

สัญลักษณ์ # หากเชลล์ทำงานเป็น superuser และสัญลักษณ์ $ หากเชลล์เริ่มต้นโดยผู้ใช้ปกติ

\nnn

อักขระที่มีรหัสฐานแปด nnn

บรรทัดใหม่ (ตัวป้อนบรรทัด)

ชื่อเชลล์

หมายเลขทีมปัจจุบัน

แบ็กสแลช

จุดเริ่มต้นของลำดับอักขระที่ไม่พิมพ์ (อักขระนี้สามารถใช้เพื่อรวมลำดับของอักขระควบคุมเทอร์มินัลในข้อความคำแนะนำเครื่องมือ)

สิ้นสุดลำดับอักขระที่ไม่สามารถพิมพ์ได้

หมายเลขซีเรียลของคำสั่งนี้ในประวัติของคำสั่ง

หมายเลขคำสั่งปัจจุบัน (หมายเลขซีเรียลของคำสั่งที่กำลังดำเนินการภายในเซสชันปัจจุบัน) อาจแตกต่างจากหมายเลขของคำสั่งนี้ในรายการประวัติคำสั่ง เนื่องจากหมายเลขหลังมีคำสั่งที่บันทึกไว้ในไฟล์ประวัติคำสั่ง

เมื่อเชลล์อ่านค่าของตัวแปรที่กำหนดคำใบ้แล้ว การแทนที่สามารถทำได้ตามกฎสำหรับการขยายพารามิเตอร์ การแทนที่ในชื่อคำสั่งและนิพจน์ทางคณิตศาสตร์ และการแยกคำ กฎเหล่านี้จะกล่าวถึงด้านล่างในหัวข้อ 5.7.

เช่น หลังจากรันคำสั่งแล้ว (เนื่องจากมีช่องว่างในสตริง จึงจำเป็นต้องมีเครื่องหมายคำพูด)

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

พรอมต์มาตรฐานจะแสดงวงเล็บเหลี่ยม ชื่อผู้ใช้ สัญลักษณ์ @ , ชื่อคอมพิวเตอร์, ช่องว่าง, ชื่อไดเร็กทอรีปัจจุบัน (ไม่มีพาธ), วงเล็บเหลี่ยมปิด และสัญลักษณ์ $ (หากผู้ใช้ธรรมดากำลังทำงานอยู่ในเชลล์) หรือ # (หากเชลล์ทำงานเป็นรูท)

5.6.3 ตัวแปร เส้นทาง

มีชื่อตัวแปรที่สำคัญมากอีกตัวหนึ่ง เส้นทาง. ระบุรายการเส้นทางไปยังไดเร็กทอรีที่ ทุบตีค้นหาไฟล์ (โดยเฉพาะไฟล์ที่มีคำสั่ง) ในกรณีที่ไม่ได้ระบุเส้นทางแบบเต็มไปยังไฟล์ในบรรทัดคำสั่ง แต่ละไดเร็กทอรีในรายการนี้จะถูกคั่นด้วยเครื่องหมายทวิภาค ตัวแปรเริ่มต้น เส้นทางรวมถึงไดเร็กทอรี /usr/local/bin, /bin, /usr/bin, /usr/X11R6/bin,กล่าวคือดูเหมือนว่า:

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

ในการเพิ่มไดเร็กทอรีลงในรายการนี้ คุณต้องรันคำสั่งต่อไปนี้:

# PATH=$PATH:new_path.

เมื่อดำเนินการค้นหา เชลล์จะค้นหาไดเร็กทอรีตามลำดับที่แสดงอยู่ในตัวแปร PATH

โปรดทราบว่าคุณสามารถรวมไดเร็กทอรีปัจจุบันไว้ในรายการนี้ได้โดยเพิ่มจุดให้กับตัวแปร PATH อย่างไรก็ตาม ไม่แนะนำสิ่งนี้ด้วยเหตุผลด้านความปลอดภัย ผู้โจมตีสามารถใส่คำสั่งในไดเร็กทอรีสาธารณะที่มีชื่อตรงกับคำสั่งใดคำสั่งหนึ่งที่ผู้ใช้ระดับสูงดำเนินการบ่อยครั้ง แต่ดำเนินการที่แตกต่างไปจากเดิมอย่างสิ้นเชิง (โดยเฉพาะอย่างยิ่งหากไดเร็กทอรีปัจจุบันอยู่ที่จุดเริ่มต้นของ รายการเส้นทางการค้นหา)

5.6.4 ตัวแปร ไอเอฟเอส

ตัวแปรนี้ระบุตัวคั่นฟิลด์ภายในที่ใช้ในการดำเนินการแยกคำของการแปลงบรรทัดคำสั่งที่ดำเนินการโดยเชลล์ ก่อนที่จะรันบรรทัดคำสั่งสำหรับการดำเนินการ ค่าเริ่มต้นของตัวแปรนี้คือ "<Пробел><Символ_ новой_ строки>".

5.6.5 ไดเร็กทอรีปัจจุบันและโฮม

ชื่อของไดเร็กทอรีปัจจุบันถูกจัดเก็บไว้ในตัวแปรสภาพแวดล้อม (ชื่อ PWD) และค่าของตัวแปรนี้จะเปลี่ยนแปลงทุกครั้งที่เริ่มโปรแกรม ซีดี(และเมื่อเปลี่ยนไดเร็กทอรีปัจจุบันด้วยวิธีอื่น เช่น ผ่าน Midnight Commander)

ในทำนองเดียวกัน ชื่อเต็ม (และเส้นทาง) ของโฮมไดเร็กทอรีของผู้ใช้ที่เรียกใช้กระบวนการจะถูกเก็บไว้ในตัวแปร HOME

5.6.6 ทีม ส่งออก

เมื่อเชลล์รันโปรแกรมหรือคำสั่ง มันจะส่งผ่านตัวแปรสภาพแวดล้อมบางส่วนไปให้พวกมัน เพื่อให้ตัวแปรสภาพแวดล้อมถูกส่งผ่านไปยังกระบวนการที่เรียกใช้จากเชลล์ จะต้องตั้งค่าโดยใช้คำสั่งพิเศษ ส่งออกนั่นคือแทน

$ชื่อ=มูลค่า

จำเป็นต้องเขียนมันลงไป

$ส่งออกชื่อ=ค่า

ในกรณีนี้ โปรแกรมทั้งหมดที่เปิดตัวจากเชลล์ (รวมถึงอินสแตนซ์รองของเชลล์ด้วย) จะสามารถเข้าถึงตัวแปรที่กำหนดไว้ในลักษณะนี้ กล่าวคือ พวกเขาสามารถเรียกค่าตามชื่อได้

V. Kostromin (kos และ rus-linux dot net) - 5.6. พารามิเตอร์และตัวแปร สภาพแวดล้อมของเชลล์