เอ็ม. การ์เรลส์. คู่มือทุบตี ตัวแปร วิธีการตั้งค่าและปิดใช้งานตัวแปรสภาพแวดล้อมภายใน ผู้ใช้ และระบบใน 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. พารามิเตอร์และตัวแปร สภาพแวดล้อมของเชลล์