Linux Shell คืออะไรและระดับเชลล์คืออะไร?

ตัวแปร $SHLVL จะบอกคุณว่าคุณมีเชลล์อยู่ลึกแค่ไหน หากคุณสับสนกับสิ่งนี้ คุณควรเริ่มตั้งแต่ต้น

สกรีนช็อตของคำสั่ง $SHLVL Linux ที่ใช้งานอยู่

เชลล์คืออะไร?

NS เปลือก รับคำสั่งและมอบคำสั่งเหล่านี้ให้กับระบบปฏิบัติการพื้นฐานเพื่อดำเนินการ บนระบบ Linux ส่วนใหญ่ โปรแกรมเชลล์เรียกว่า ทุบตี (The Bourne Again Shell) แต่ก็มีอื่นๆ รวมทั้ง ซี เชลล์ (tcsh) และ คอร์น เชลล์ (ksh).

วิธีเข้าถึง Linux Shell

โดยทั่วไป ในฐานะผู้ใช้ คุณโต้ตอบกับโปรแกรมเชลล์ผ่าน a การจำลองเทอร์มินัล โปรแกรมเช่น XTerm, konsoleหรือ gnome-terminal

หากคุณเรียกใช้ตัวจัดการ windows เช่น เปิดกล่อง หรือสภาพแวดล้อมเดสก์ท็อปเช่น GNOME หรือ KDEคุณจะพบโปรแกรมจำลองเทอร์มินัลจากเมนูหรือเส้นประ ในหลายระบบทางลัด CTRL+ALT+T เปิดหน้าต่างเทอร์มินัล

อีกวิธีหนึ่ง คุณสามารถสลับไปใช้ TTY (เครื่องพิมพ์ดีด) อื่น ซึ่งให้การเข้าถึงโดยตรงไปยังเชลล์บรรทัดคำสั่ง โดยกด CTRL+ALT+F1 หรือ CTRL+ALT+F2.

ระดับเชลล์คืออะไร?

เมื่อคุณรันคำสั่งในเชลล์ คำสั่งรันที่ระดับเชลล์ ภายในเชลล์ คุณสามารถเปิดเชลล์อื่น ซึ่งทำให้เชลล์ย่อยของเชลล์ที่เปิดขึ้น ดังนั้น พาเรนต์เชลล์ถือเป็นเชลล์ระดับ 1 และเชลล์ย่อยเป็นเชลล์ระดับ 2

วิธีแสดงระดับเชลล์

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

ก้อง $SHLVL. 

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

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

วิธีสร้าง Subshells

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

ก้อง $SHLVL. 

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

พิมพ์ข้อมูลต่อไปนี้ในหน้าต่างเทอร์มินัล:

NS. 

คำสั่ง sh รันเชลล์แบบโต้ตอบ ซึ่งหมายความว่าคุณกำลังใช้เชลล์ภายในเชลล์หรือเชลล์ย่อย

หากคุณพิมพ์อีกครั้ง:

ก้อง $SHLVL. 

คุณเห็นว่าระดับเชลล์ถูกตั้งค่าเป็น 3 การรันคำสั่ง sh จาก subshell จะเป็นการเปิด subshell ของ subshell ดังนั้นระดับของเชลล์จะอยู่ที่ระดับ 4

เหตุใดระดับเชลล์จึงสำคัญ

ระดับเชลล์มีความสำคัญเมื่อคิดถึงขอบเขตของตัวแปรภายในสคริปต์ของคุณ สำหรับตัวอย่างง่ายๆ:

dog=maisie
เสียงสะท้อน $dog

หากคุณเรียกใช้คำสั่งดังกล่าวในเชลล์ คำว่า maisie แสดงไปที่หน้าต่างเทอร์มินัล

หากต้องการเปิดเชลล์ใหม่ ให้พิมพ์ดังต่อไปนี้:

NS. 

เมื่อคุณเรียกใช้คำสั่งนี้ คุณจะเห็นว่าไม่มีการส่งคืนใดๆ:

เสียงสะท้อน $dog 

นั่นเป็นเพราะตัวแปร $dog ใช้ได้เฉพาะที่เชลล์ระดับ 2 หากคุณพิมพ์ exit เพื่อออกจาก subshell และ run echo $dog อีกครั้งคำว่า maisie แสดงอีกครั้ง

นอกจากนี้ยังควรคำนึงถึงพฤติกรรมของตัวแปรส่วนกลางภายในเชลล์ด้วย

เปิดหน้าต่างเทอร์มินัลใหม่ จากนั้นพิมพ์ดังต่อไปนี้:

สุนัขส่งออก = maisie
เสียงสะท้อน $dog

ตามคาด คำว่า maisie แสดง ถัดไป เปิดเชลล์ย่อยแล้วพิมพ์ echo $dog อีกครั้ง. คราวนี้คำว่า maisie แสดงแม้ว่าคุณจะอยู่ใน subshell เหตุผลก็คือคำสั่ง export ทำให้ตัวแปร $dog เป็นสากล การเปลี่ยนตัวแปร $dog ในเชลล์ย่อย แม้ว่าคุณจะใช้คำสั่ง export ก็ตาม จะไม่ส่งผลต่อพาเรนต์เชลล์

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