คำว่า 'เชลล์' มีชื่อดี มันเป็นเปลือกที่แท้จริงของ O / S ที่อนุญาตให้ผู้ใช้โต้ตอบกับคอมพิวเตอร์ เมื่อแรกเริ่มรู้สึกว่ามีน้อยมากถ้าส่วนติดต่อผู้ใช้แบบกราฟิก (ไม่มี windows :() ทุกอย่างทำในบรรทัดคำสั่ง แต่แม้บรรทัดคำสั่งต้องมีสถานที่อยู่อาศัยมันอาศัยอยู่และยังคงอยู่ในเปลือก .
กล่าวง่ายๆว่าเพื่อให้บรรทัดคำสั่งมีประโยชน์จำเป็นต้องมีคำแนะนำที่สามารถเรียกใช้ได้ ดังนั้นโปรแกรมจึงถูกสร้างขึ้นเพื่อให้ทำงานภายในเชลล์เพื่อให้บรรทัดคำสั่งใช้ โปรแกรมถูกจัดกลุ่มไว้ในแพ็คเกจของตัวเองอย่างแน่นหนาและตั้งใจจะทำงานร่วมกัน พวกเขารวมถึงโปรแกรมเช่น "ls" และ "grep", "ps", "sed" ฯลฯ นอกจากนี้ยังมีคำสั่งเปลี่ยนเส้นทางไฟล์เช่น ">" และ "<" และไพพ์ ("|") ที่สำคัญกว่านั้นพวกเขายังรวมถึงการเขียนโปรแกรมสร้างเช่นการดำเนินการตามเงื่อนไข (ถ้าอย่างนั้นสำหรับลูปในขณะที่ลูปวิธีการตรวจสอบสถานะกลับมาเมื่อคุณเรียกใช้คำสั่ง (เช่นถ้าคุณเรียกใช้ "ls" มันพบอะไร?) สิ่ง เช่นนั้น). นี่คือพื้นฐานของสคริปต์บรรทัดคำสั่ง (เชลล์) ที่ซับซ้อนยิ่งขึ้น
เมื่อมีคนใช้คำว่า 'Bash Shell' พวกเขากำลังพูดถึงล่ามบรรทัดคำสั่งที่เรียกว่า 'Bash' ที่ทำงานในเชลล์ O / S คุณอาจคิดว่ามันสั้นสำหรับ 'Bash Shell Interpreter' มีล่ามอื่น ๆ เช่น Bourne (Bash คือ 'Bourne Shell ที่ได้รับการปรับปรุงใหม่และสั้นสำหรับ Bourne Again Shell) นอกจากนี้ยังมี C-Shell, K-Shell (ซึ่งเป็นที่โปรดปรานของหลาย ๆ คนที่เขียนเชลล์สคริปต์ที่ซับซ้อน) และตัวแปร GNU อื่น ๆ ในช่วงหลายปีที่ผ่านมามันกลายเป็นธรรมเนียมในการอ้างถึงล่ามบรรทัดคำสั่งเฉพาะที่คุณใช้เป็นเชลล์เพราะไม่สามารถใช้งานได้ แต่ความจริงก็คือพวกเขาแตกต่างกัน
สาเหตุที่พวกเขารู้จักกันดีในฐานะล่ามบรรทัดคำสั่งไม่ใช่เชลล์จริง: เป็นเพราะพวกเขาอาศัยอยู่ในเชลล์และตีความคำสั่งทั้งหมดราวกับว่าพวกเขากำลังทำงานในโปรแกรม และเชลล์ไม่สนใจสิ่งที่คุณใช้ล่ามตราบใดที่มันเป็นไปตามมาตรฐานที่ถูกต้อง
และทำไมพวกเขาถึงถูกเรียกว่าล่ามมันเป็นเพราะพวกเขาเป็นล่ามจริง ๆ แม้ว่าคุณจะไม่ได้เรียกใช้สคริปต์อย่างชัดเจน (และสคริปต์เป็นเพียงไฟล์ข้อความของคำสั่งที่คุณสร้างขึ้นเพื่อให้คุณสามารถรันคำสั่งเดียวกันซ้ำแล้วซ้ำอีกโดยไม่ต้องพิมพ์ซ้ำอีกครั้ง) ตัวอย่างเช่นใช้คำสั่ง 'ls' ที่ต่ำต้อย เมื่อคุณเรียกใช้มันจะส่งคืนรายการไฟล์ แต่มันทำงานอย่างไรมีความสำคัญต่อคำถามของคุณ: จริง ๆ แล้วมันทำงานในบริบทของล่ามบรรทัดคำสั่งแม้ว่าคุณจะเรียกใช้สิ่งที่ดูเหมือนจะเป็นคำสั่งปิดง่าย นั่นคือมันทำงานราวกับว่ามันเป็นคำสั่งในส่วนของโปรแกรมที่ใหญ่กว่า มันทำงานราวกับว่ามันอยู่ในไฟล์สคริปต์ของเชลล์สคริปต์โดยไม่ต้องอยู่ในไฟล์สคริปต์ของเชลล์ ไฟล์สคริปต์เชลล์แบบไม่ระบุชื่อเหมือนเดิม
สิ่งที่คุณเรียกใช้บนบรรทัดคำสั่งมีสิ่งนี้เหมือนกัน (ไม่ว่าจะเป็นคำสั่งเดียวเช่น 'ls' หรือไฟล์สคริปต์ที่เต็มไปด้วยคำสั่งและตัววนซ้ำและคำสั่งแบบมีเงื่อนไข): มันถูกประมวลผลทั้งหมดโดยล่ามบรรทัดคำสั่ง ไม่ว่าจะเป็น Bash, C-Shell, K-Shell (ค่าดีฟอลต์บน AIX btw)
หากต้องการดูสิ่งที่ฉันหมายถึงทำไดเรกทอรี 'ทดสอบ':
mkdir test
ป้อนและเรียกใช้คำสั่ง folowing
grep hello *
คุณจะได้รับคำตอบบางอย่างเช่น 'ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว' ตอนนี้ป้อนคำสั่ง
echo $?
($ บอกว่าบอกสิ่งที่คุณพบในคอมพิวเตอร์ที่มีความลับพูด) คุณควรเห็นมันคืนค่าตัวเลข (ควรเป็น) '2' นั่นคือโค้ดส่งคืนจาก grep ที่หมายถึง 'ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว' ตอนนี้เรียกใช้ต่อไปนี้:
echo hello > hello.txt
grep hello *
echo $?
คุณจะเห็นไฟล์ 'hello.txt' ถูกส่งคืนจากคำสั่ง grep เริ่มต้นและตอนนี้ควรเห็น 'echo $' คืนค่าตัวเลข '0' ซึ่งหมายถึงพบว่ามีบางอย่างเกิดขึ้นจริง
แม้ว่าคำสั่งแบบ off หนึ่งคำสั่งเหล่านี้ดูเหมือนว่าจะรัน แต่ตัวแปลบรรทัดคำสั่งจะทำหน้าที่เหมือนเป็นส่วนหนึ่งของโปรแกรมที่มีขนาดใหญ่กว่าและติดตามค่าที่ส่งคืน นั่นคือสาเหตุที่ถ้าคุณลืม * ในตอนท้ายของคำสั่ง grep มันจะไม่กลับมา เป็นที่รู้ว่าคำสั่งไม่สมบูรณ์และคาดว่าจะมีการป้อนข้อมูลมากขึ้น หลังจากทั้งหมดคุณอาจจะขอให้ grep ผลลัพธ์ของการวนซ้ำซึ่งถูกกฎหมายสมบูรณ์แบบในการเขียนและเรียกใช้บนบรรทัดคำสั่ง
บรรทัดล่างคือเชลล์คือเชลล์และล่าม (ไม่ว่าชื่อของคนที่คุณใช้ 'Bash', k-shell ฯลฯ ) จะแตกต่างกัน แต่บ่อยครั้งที่พวกเขาใช้แทนกันได้เนื่องจากในทันทีใดก็ตามพวกเขาจะถูกผูกติดกันอย่างสมบูรณ์