ตัวอย่างของ Subshell แบบต่างๆ
วิธีต่างๆ ในการเรียกใช้งานสคริปต์ในเชลล์ย่อยจะแสดงในส่วนนี้ของบทช่วยสอน
ตัวอย่างที่ 1: ดำเนินการ Subshell โดยใช้ใบเสนอราคาเดี่ยวและใบเสนอราคาคู่
สร้างไฟล์ Bash ด้วยสคริปต์ต่อไปนี้ที่พิมพ์วันที่และเวลาปัจจุบัน ถัดไป ตัวแปร $strVal จะถูกพิมพ์โดยปิดสคริปต์ subshell ภายในเครื่องหมายคำพูดเดี่ยวและเครื่องหมายคำพูดคู่
#!/bin/bash
#พิมพ์คำสั่ง `date` ใน subshell
เสียงสะท้อน 'วันนี้คือวัน `วันที่` '
#Define ตัวแปรสตริง
สตริวัล = 'ทุบตี Subshell'
#พิมพ์ตัวแปรในเชลล์ย่อยโดยใช้เครื่องหมายอัญประกาศเดี่ยว
เสียงสะท้อน 'ผลลัพธ์ของคำพูดเดี่ยว:' '$(เสียงสะท้อน $strVal)'
#พิมพ์ตัวแปรใน subshell โดยใช้เครื่องหมายอัญประกาศคู่
เสียงสะท้อน 'ผลลัพธ์ของอัญประกาศคู่:' ' $(เสียงสะท้อน $strVal) '
ผลลัพธ์ต่อไปนี้ปรากฏขึ้นหลังจากเรียกใช้งานสคริปต์ สคริปต์ย่อยถูกพิมพ์เป็นสตริงเมื่อปิดด้วยเครื่องหมายอัญประกาศเดี่ยว สคริปต์ย่อยถูกเรียกใช้งานเมื่อถูกปิดด้วยเครื่องหมายอัญประกาศคู่:
ตัวอย่างที่ 2: ค้นหาไฟล์ทั้งหมดของส่วนขยายเฉพาะโดยใช้เชลล์ย่อย
สร้างไฟล์ Bash ด้วยสคริปต์ต่อไปนี้ซึ่งใช้นามสกุลไฟล์เป็นอินพุตจากผู้ใช้ ถัดไป คำสั่ง “ls” จะถูกดำเนินการใน subshell เพื่อค้นหาไฟล์ทั้งหมดของนามสกุลนั้นๆ
#!/bin/bash
เสียงสะท้อน -น 'ป้อนชื่อนามสกุลไฟล์:'
#จดชื่อนามสกุลไฟล์ที่ต้องการค้นหา
อ่าน ต่อ
#ตรวจสอบค่าที่ป้อน
ถ้า [ [ $ต่อ == '' ] ] ; แล้ว
#พิมพ์ข้อความผิดพลาด
เสียงสะท้อน 'ไม่มีการขยายเวลา'
อื่น
เสียงสะท้อน 'ชื่อไฟล์ด้วย $ต่อ ส่วนขยาย:'
#พิมพ์ชื่อไฟล์ทั้งหมดพร้อมนามสกุลที่กำหนด
เสียงสะท้อน ' $( echo `ls *.$ext` ) '
เป็น
ผลลัพธ์ต่อไปนี้ปรากฏขึ้นหลังจากเรียกใช้สคริปต์ด้วยอินพุต 'txt' ตามผลลัพธ์ มีไฟล์ข้อความสามไฟล์อยู่ในตำแหน่งปัจจุบัน:
ผลลัพธ์ต่อไปนี้ปรากฏขึ้นหลังจากรันสคริปต์ด้วยค่าว่าง:
ตัวอย่างที่ 3: เรียกใช้นิพจน์เลขคณิตใน Subshell
สร้างไฟล์ Bash ด้วยสคริปต์ต่อไปนี้ซึ่งใช้ตัวแปรชื่อเดียวกันในเชลล์หลักและเชลล์ย่อย การดำเนินการทางคณิตศาสตร์ถูกกำหนดไว้ในเชลล์หลักและเชลล์ย่อย
#!/bin/bash#Define ตัวแปรพาเรนต์เชลล์
ตัวเลข = 10
#พิมพ์ผลลัพธ์ตามตัวแปรของพาเรนต์เชลล์
( ( ผลลัพธ์ = จำนวน $ + 5 ) )
เสียงสะท้อน 'ผลรวมของ จำนวน $ +5= ผลลัพธ์ $ '
#สร้างตัวแปร subshell ด้วยชื่อเดียวกันกับ parent shell
( ตัวเลข = ยี่สิบ ; ( ( ผลลัพธ์ = จำนวน $ + 10 ) ) ; เสียงสะท้อน 'ผลรวมของ จำนวน $ +5= ผลลัพธ์ $ ' )
# พิมพ์ผลลัพธ์ตามตัวแปรของพาเรนต์เชลล์อีกครั้ง
เสียงสะท้อน 'ผลรวมของ จำนวน $ +5= ผลลัพธ์ $ '
ผลลัพธ์ต่อไปนี้ปรากฏขึ้นหลังจากเรียกใช้งานสคริปต์ เอาต์พุตแรกและเอาต์พุตสุดท้ายแสดงผลของเชลล์หลัก เอาต์พุตที่สองแสดงผลของเชลล์ย่อย ตัวแปรของเชลล์หลักไม่ถูกแก้ไขโดยตัวแปรของเชลล์ย่อย:
ตัวอย่างที่ 4: ดำเนินการหลายคำสั่งใน Subshell
สร้างไฟล์ Bash ด้วยสคริปต์ต่อไปนี้ที่ส่งออกคำสั่ง 'echo' ไปยังคำสั่ง 'sed' ที่แทนที่ค่าสตริงที่ตรงกันด้วยสตริงอื่น ผลลัพธ์ของคำสั่ง 'echo' คือ 'JavaScript' ดังนั้น ค่านี้จะถูกเปรียบเทียบกับ “Java” และ “JavaScript” หากพบการจับคู่ สตริงที่ตรงกันจะถูกแทนที่ด้วยสตริง 'ประเภท'
#!/bin/bash#กำหนดค่าสตริง
สตริวัล = 'จาวาสคริปต์'
#พิมพ์ค่าสตริงเดิม
เสียงสะท้อน 'ค่าสตริง: $strVal '
#พิมพ์ค่า subshell
เสียงสะท้อน -น 'มูลค่าย่อย: '
เสียงสะท้อน ' $(echo $strVal | sed 's|Java|JavaScript Type|') '
ผลลัพธ์ต่อไปนี้ปรากฏขึ้นหลังจากเรียกใช้งานสคริปต์ ตามผลลัพธ์ สตริง “Java” จะถูกแทนที่ด้วยสตริง “Type” ผลลัพธ์ของ subshell คือ 'JavaScript TypeScript':
บทสรุป
คำสั่งหรือสคริปต์อย่างน้อยหนึ่งคำสั่งสามารถดำเนินการได้โดยใช้เชลล์ย่อยโดยไม่กระทบกับเชลล์หลัก มีการอธิบายวัตถุประสงค์ของการใช้ subshell ในบทช่วยสอนนี้โดยใช้หลายตัวอย่าง งานประเภทต่างๆ เช่น การค้นหาไฟล์ การคำนวณผลรวมของตัวเลข การแทนที่สตริง ฯลฯ ดำเนินการโดยเชลล์ย่อยในตัวอย่างที่กำหนด แนวคิดของการใช้ subshell นั้นแสดงให้เห็นอย่างถูกต้อง และผู้ใช้ Bash ใหม่จะสามารถใช้ subshell ได้หลังจากอ่านบทช่วยสอนนี้