Skip to main content

Linux - คำสั่ง Unix: bash

สอน UNIX Linux Command ตอนที่ 1- Introduction (อาจ 2024)

สอน UNIX Linux Command ตอนที่ 1- Introduction (อาจ 2024)
Anonim

คำสั่ง Linux ทุบตี เป็นดวลจุดโทษinterpreter คำสั่งที่เข้ากันได้ที่รันคำสั่งที่อ่านจากอินพุตมาตรฐานหรือจากไฟล์ทุบตี นอกจากนี้ยังมีคุณสมบัติที่เป็นประโยชน์จากเปลือก Korn และ C (ksh และcsh).

ตัวเลือก Bash

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

  • -c สตริง: ถ้า-c มีอยู่แล้วจะอ่านคำสั่งจาก เชือก . หากมีอาร์กิวเมนต์หลัง เชือก พวกเขาจะถูกกำหนดให้กับพารามิเตอร์ตำแหน่งเริ่มต้นด้วย$0.
  • -ผม: ถ้า-ผม ตัวเลือกมีอยู่เปลือกคือ โต้ตอบ .
  • -l: ทำทุบตี ทำราวกับว่ามันถูกเรียกเป็นเปลือกเข้าสู่ระบบ
  • -r: ถ้า-r ตัวเลือกมีอยู่เปลือกจะกลายเป็น ถูก จำกัด.
  • -s: ถ้า-s มีอยู่หรือถ้าไม่มีอาร์กิวเมนต์ใดที่ยังคงอยู่หลังจากประมวลผลตัวเลือกคำสั่งจะอ่านจากอินพุตมาตรฐาน ตัวเลือกนี้ช่วยให้สามารถตั้งค่าพารามิเตอร์ตำแหน่งได้เมื่อพูดถึงเปลือกโต้ตอบ
  • -D: รายการสตริงคู่ที่ยกมาก่อนหน้าด้วย$ จะพิมพ์บนเอาต์พุตมาตรฐาน ต่อไปนี้เป็นสตริงที่ต้องแปลภาษาเมื่อสถานที่ปัจจุบันไม่อยู่C หรือPOSIX. นี่หมายถึง -n ตัวเลือก; จะไม่มีคำสั่งใด ๆ
  • - + O shopt_option : shopt_option เป็นหนึ่งในตัวเลือกเปลือกที่ยอมรับโดยshopt builtin ถ้า shopt_option เป็นปัจจุบัน,-O กำหนดค่าของตัวเลือกนั้นและ+ O unsets it. ถ้า shopt_option ไม่ได้ระบุชื่อและค่าของตัวเลือกเชลล์ที่ยอมรับโดยshopt จะพิมพ์บนเอาต์พุตมาตรฐาน ถ้าตัวเลือกการเรียกคือ + O, เอาต์พุตจะแสดงในรูปแบบที่อาจนำมาใช้ซ้ำในรูปแบบอินพุต
  • --: -- สัญญาณสิ้นสุดของตัวเลือกและปิดใช้งานการประมวลผลตัวเลือกเพิ่มเติม อาร์กิวเมนต์ใด ๆ หลังจากที่-- จะถือว่าเป็นชื่อไฟล์และอาร์กิวเมนต์ อาร์กิวเมนต์ของ- เท่ากับ--.

ทุบตี ยังตีความตัวเลือกหลายตัว ตัวเลือกเหล่านี้ต้องปรากฏบนบรรทัดคำสั่งก่อนที่จะจดจำตัวเลือกอักขระเดี่ยว:

  • --dump-PO-สตริง: เทียบเท่ากับ-Dแต่เอาท์พุทอยู่ใน GNU gettext PO (แบบพกพา) รูปแบบไฟล์
  • --dump สตริง: เทียบเท่ากับ-D.
  • --ช่วยด้วย: แสดงข้อความการใช้งานบนเอาต์พุตมาตรฐานและออกจากระบบสำเร็จ
  • --init ไฟล์: ไฟล์ และ --rcfile ไฟล์ : ดำเนินการคำสั่งจาก ไฟล์ แทนไฟล์เริ่มต้นส่วนบุคคลมาตรฐาน ~ / .bashrc ถ้าเปลือกเป็นแบบโต้ตอบ
  • --เข้าสู่ระบบ: เทียบเท่ากับ-l.
  • --noediting: อย่าใช้ GNUReadLine ห้องสมุดอ่านบรรทัดคำสั่งเมื่อเปลือกเป็นแบบโต้ตอบ
  • --noprofile: อย่าอ่านไฟล์ startup systemwide / etc / รายละเอียด หรือไฟล์เริ่มต้นส่วนบุคคลใด ๆ ~ / .bash_profile , ~ / .bash_login , หรือ ~ / .profile . โดยค่าเริ่มต้น,ทุบตี อ่านไฟล์เหล่านี้เมื่อเรียกใช้เป็นเชลล์ล็อกอิน
  • --norc: อย่าอ่านและรันไฟล์การเตรียมใช้งานส่วนบุคคล ~ / .bashrc ถ้าเปลือกเป็นแบบโต้ตอบ ตัวเลือกนี้เปิดอยู่โดยค่าเริ่มต้นถ้าเปลือกถูกเรียกเป็นดวลจุดโทษ.
  • --posix: เปลี่ยนลักษณะการทำงานของทุบตี ซึ่งการดำเนินการเริ่มต้นแตกต่างจากมาตรฐาน POSIX เพื่อให้ตรงกับมาตรฐาน ( โหมด posix ).
  • --ถูก จำกัดเปลือกหดตัว
  • --rpm-ต้อง: จัดทำรายการไฟล์ที่จำเป็นสำหรับสคริปต์เชลล์เพื่อรัน นี่หมายถึง '-n' และอาจมีข้อ จำกัด เช่นเดียวกับการตรวจสอบการตรวจสอบข้อผิดพลาดในการคอมไพล์ การทดสอบ Backticks, และ Eval ไม่ได้รับการแยกวิเคราะห์ดังนั้นการละเว้นบางอย่างอาจไม่ได้รับการพิจารณา
  • --verbose: เทียบเท่า-v.
  • --version: แสดงข้อมูลเวอร์ชันสำหรับอินสแตนซ์นี้ของทุบตี บนเอาท์พุทมาตรฐานและออกสำเร็จ

ข้อโต้แย้ง

ถ้าอาร์กิวเมนต์ยังคงอยู่หลังการประมวลผลตัวเลือกและไม่ใช่-c หรือที่-s ตัวเลือกแรกถูกสันนิษฐานว่าเป็นชื่อของไฟล์ที่มีคำสั่งเชลล์ ถ้า ทุบตี จะเรียกในรูปแบบนี้,$0 ถูกตั้งค่าเป็นชื่อของไฟล์และพารามิเตอร์ตำแหน่งจะถูกตั้งค่าเป็นอาร์กิวเมนต์ที่เหลืออยู่ทุบตี อ่านและรันคำสั่งจากไฟล์นี้ แล้วออกทุบตีสถานะการออกจากระบบคือสถานะการออกจากคำสั่งสุดท้ายที่ดำเนินการในสคริปต์ ถ้าไม่มีคำสั่งใด ๆ สถานะการออกจากระบบคือ 0 ความพยายามครั้งแรกเพื่อเปิดไฟล์ในไดเร็กตอรี่ปัจจุบันและหากไม่พบไฟล์จากนั้น shell จะค้นหาไดเร็กทอรีในเส้นทาง สำหรับสคริปต์

การภาวนา

เปลือกเข้าสู่ระบบ เป็นตัวอักษรตัวแรกของอาร์กิวเมนต์ศูนย์คือ a-, หรือหนึ่งเริ่มต้นด้วย--เข้าสู่ระบบ ตัวเลือก

โต้ตอบ เปลือกเป็นหนึ่งเริ่มต้นโดยไม่ต้องอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือกและไม่มี-c ตัวเลือกที่มีอินพุตและเอาต์พุตมาตรฐานเชื่อมต่อกับเทอร์มินัลตามที่กำหนดไว้ isatty (3) หรือหนึ่งตัวขึ้นต้นด้วย-ผม ตัวเลือกPS1 ถูกตั้งค่าและ $- รวมถึงถ้าทุบตีเป็นแบบอินเทอร์แอ็ตชันการอนุญาตให้สคริปต์เชลล์หรือไฟล์เริ่มต้นใช้เพื่อทดสอบสถานะนี้

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

เมื่อทุบตี ถูกเรียกเป็นเปลือกการเข้าสู่ระบบแบบโต้ตอบหรือเป็นเปลือกที่ไม่โต้ตอบกับ--เข้าสู่ระบบ ตัวแรกจะอ่านและรันคำสั่งจากไฟล์ / etc / รายละเอียด หากไฟล์นั้นมีอยู่ หลังจากอ่านไฟล์แล้วจะมองหา ~ / .bash_profile , ~ / .bash_login , และ ~ / .profile , ในลำดับที่และอ่านและรันคำสั่งจากครั้งแรกที่มีอยู่และสามารถอ่านได้--noprofile อาจใช้เมื่อเปลือกเริ่มที่จะยับยั้งการทำงานนี้

เมื่อเปลือกเข้าสู่ระบบออก,ทุบตี อ่านและรันคำสั่งจากไฟล์ ~ / .bash_logout ถ้ามีอยู่

เมื่อเชลล์แบบโต้ตอบซึ่งไม่ใช่เชลล์ล็อกอินจะเริ่มทำงานทุบตี อ่านและรันคำสั่งจาก ~ / .bashrc หากไฟล์นั้นมีอยู่ ซึ่งอาจถูกยับยั้งโดยใช้--norc ตัวเลือก--rcfile ไฟล์ ตัวเลือกจะบังคับทุบตี อ่านและรันคำสั่งจาก ไฟล์ แทน ~ / .bashrc .

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

ถ้า -n "$ BASH_ENV"; แล้ว "$ BASH_ENV"; Fi

แต่ค่าของเส้นทาง ตัวแปรไม่ใช้เพื่อค้นหาชื่อไฟล์

ถ้าทุบตี ถูกเรียกด้วยชื่อดวลจุดโทษจะพยายามเลียนแบบพฤติกรรมเริ่มต้นของเวอร์ชันที่ผ่านมาดวลจุดโทษ ให้ใกล้เคียงที่สุดเท่าที่จะเป็นไปได้และสอดคล้องกับมาตรฐาน POSIX ด้วย เมื่อเรียกใช้เป็นเชลล์การเข้าสู่ระบบแบบอินเทอร์แอคทีฟหรือเปลือกที่ไม่ใช่แบบโต้ตอบพร้อมกับ--เข้าสู่ระบบ ตัวเลือกแรกพยายามที่จะอ่านและรันคำสั่งจาก / etc / รายละเอียด และ ~ / .profile , เพื่อให้.--noprofile อาจถูกใช้เพื่อยับยั้งการทำงานนี้ เมื่อเรียกเป็นเปลือกโต้ตอบที่มีชื่อ ดวลจุดโทษ, ทุบตี มองหาตัวแปรENVขยายค่าของมันถ้ามีการกำหนดและใช้ค่าที่ขยายเป็นชื่อของไฟล์ที่จะอ่านและดำเนินการ เนื่องจากเปลือกเรียกเป็นดวลจุดโทษ ไม่พยายามอ่านและรันคำสั่งจากไฟล์เริ่มต้นอื่น ๆ--rcfile ตัวเลือกไม่มีผล เปลือกที่ไม่โต้ตอบซึ่งเรียกใช้ชื่อดวลจุดโทษ ไม่พยายามอ่านไฟล์เริ่มต้นระบบอื่น ๆ เมื่อเรียกเป็นดวลจุดโทษ, ทุบตี เข้าสู่ POSIX หลังจากอ่านไฟล์เริ่มต้นแล้ว

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

ทุบตี ความพยายามที่จะกำหนดเมื่อมีการเรียกใช้โดย daemon เปลือกระยะไกลโดยปกติ rshd . ถ้า ทุบตี กำหนดว่ากำลังดำเนินการอยู่ rshd จะอ่านและรันคำสั่งจาก ~ / .bashrc ถ้าไฟล์นั้นมีอยู่และสามารถอ่านได้ จะไม่ทำเช่นนี้ถ้าเรียกเป็นดวลจุดโทษ.--norc อาจถูกใช้เพื่อยับยั้งการทำงานนี้และ--rcfile อาจใช้เพื่อบังคับให้ไฟล์อื่นอ่าน แต่ rshd โดยทั่วไปไม่เรียกเปลือกที่มีตัวเลือกเหล่านั้นหรืออนุญาตให้มีการระบุ

ถ้าเชลล์เริ่มต้นด้วยหมายเลขผู้ใช้ (กลุ่ม) ที่มีประสิทธิภาพไม่เท่ากับ ID ผู้ใช้จริง (กลุ่ม) และ-p ตัวเลือกไม่ได้ให้มาไม่มีการเริ่มต้นไฟล์ที่จะอ่านฟังก์ชั่นเปลือกไม่ได้รับมาจากสภาพแวดล้อม,SHELLOPTS ตัวแปรถ้าปรากฏในสภาพแวดล้อมถูกละเว้นและ ID ผู้ใช้ที่มีประสิทธิภาพถูกตั้งค่าเป็นรหัสผู้ใช้จริง ถ้า-p จะมีการจัดทำขึ้นที่ invocation ลักษณะการเริ่มต้นใช้งานเหมือนกัน แต่ไม่มีการตั้งค่ารหัสผู้ใช้ที่มีประสิทธิภาพ

คำนิยาม

คำจำกัดความต่อไปนี้ใช้ตลอดช่วงที่เหลือของเอกสารนี้:

  • ว่างเปล่า: ช่องว่างหรือแท็บ
  • คำ: ลำดับของอักขระที่ถือเป็นหน่วยเดียวโดยเปลือก ยังเป็นที่รู้จักกันในนาม a เหรียญ.
  • ชื่อ: คำ ประกอบด้วยอักขระตัวอักษรและตัวเลขและเครื่องหมายขีดล่างเท่านั้นและขึ้นต้นด้วยตัวอักษรหรือขีดล่าง เรียกอีกอย่างว่า aระบุ.
  • metacharacter: ตัวอักษรที่เมื่อ unquoted แยกคำ ข้อใดข้อหนึ่งต่อไปนี้:| &; () <> แท็บพื้นที่
  • ควบคุมตัวดำเนินการ: A เหรียญ ที่ทำหน้าที่ควบคุม เป็นหนึ่งในสัญลักษณ์ต่อไปนี้: || & && ; ;; ( ) |

คำสงวน

คำสงวน เป็นคำที่มีความหมายพิเศษสำหรับเปลือก คำต่อไปนี้ได้รับการยอมรับว่าเป็นสิทธิเมื่อ unquoted และคำแรกของคำสั่งง่ายๆหรือคำที่สามของ aกรณีหรือสำหรับ คำสั่ง:

! กรณีทำ elif อื่น esac fi สำหรับฟังก์ชันถ้าในการเลือกแล้วจนกระทั่งในขณะที่ {} เวลา

เชลล์ไวยากรณ์: คำสั่งง่ายๆ

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

ค่าตอบแทนของ a คำสั่งง่ายๆ เป็นสถานะทางออกหรือ 128+ n ถ้าคำสั่งถูกยกเลิกโดยสัญญาณ n .

ท่อ

ท่อ คือลำดับของคำสั่งอย่างน้อยหนึ่งคำที่คั่นด้วยอักขระ|. รูปแบบของท่อคือ เวลา -p ! คำสั่ง | Command2 … .

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

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

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

แต่ละคำสั่งในท่อจะถูกดำเนินการเป็นกระบวนการแยกต่างหาก (เช่นใน subshell เป็นต้น)

รายการ

รายการ คือลำดับของท่ออย่างน้อยหนึ่งรายการที่คั่นด้วยตัวดำเนินการอย่างใดอย่างหนึ่ง;, &, &&, หรือ||และเลือกที่จะยกเลิกโดยหนึ่งในนั้น;, &, หรือ.

ของผู้ประกอบการรายชื่อเหล่านี้,&& และ|| มีความสำคัญเท่ากันตามด้วย; และ&, ซึ่งมีความสำคัญเท่ากัน

ลำดับของบรรทัดใหม่อย่างน้อยหนึ่งบรรทัดอาจปรากฏใน a รายการ แทนเครื่องหมายอัฒภาคเพื่อกำหนดคำสั่ง

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

ผู้ดำเนินการควบคุม&& และ|| แสดงและรายการและหรือรายการตามลำดับ รายการ AND มีแบบฟอร์ม

Command1 && Command2

Command2 จะทำงานถ้าและเฉพาะในกรณีที่ Command1 ส่งกลับสถานะการออกจากศูนย์

รายการหรือมีแบบฟอร์ม

Command1 || Command2

Command2 จะถูกประมวลผลเมื่อและเมื่อไรเท่านั้น Command1 ส่งกลับค่าสถานะทางออกที่ไม่ใช่ศูนย์ สถานะการส่งคืนของ AND และ OR รายการคือสถานะการออกจากคำสั่งสุดท้ายที่ดำเนินการในรายการ

คำสั่งผสม

คำสั่งผสม เป็นหนึ่งในต่อไปนี้:

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

{list; } : รายการ จะถูกดำเนินการในสภาพแวดล้อมของเชลล์ปัจจุบันเท่านั้น รายการ ต้องถูกยกเลิกด้วยบรรทัดใหม่หรืออัฒภาค นี้เรียกว่า a คำสั่งกลุ่ม . สถานะการส่งคืนคือสถานะทางออกของ รายการ . โปรดทราบว่าไม่เหมือนกับ metacharacters( และ), { และ} เป็น คำสงวน และต้องเกิดขึ้นที่คำสงวนลิขสิทธิ์ได้รับอนุญาตให้จดจำ เนื่องจากไม่ก่อให้เกิดคำว่าแบ่งพวกเขาจึงต้องแยกออกจากกัน รายการ โดยช่องว่าง

((expression)) : The การแสดงออก ได้รับการประเมินตามกฎที่อธิบายไว้ใน การประเมินเลขคณิต ถ้าค่าของนิพจน์ไม่ใช่ศูนย์ผลลัพธ์ที่ได้คือ 0; มิฉะนั้นสถานะการส่งคืนคือ 1 นี่เทียบเท่ากับปล่อย ' การแสดงออก '.

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

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

นิพจน์อาจรวมกันโดยใช้ตัวดำเนินการต่อไปนี้ตามลำดับลำดับความสำคัญที่ลดลง:

  • (นิพจน์): ส่งคืนค่าของ การแสดงออก . ซึ่งอาจใช้เพื่อแทนที่ความสำคัญตามปกติของโอเปอเรเตอร์
  • ! expressio โรงเรียน: จริงถ้า การแสดงออก เป็นเท็จ
  • Expression1 && Expression2 : จริงถ้าทั้งคู่ Expression1 และ Expression2 เป็นความจริง
  • Expression1 || Expression2 : จริงถ้าอย่างใดอย่างหนึ่ง Expression1 หรือ Expression2 เป็นความจริง.

&& และ|| ผู้ประกอบการไม่ได้ประเมิน Expression2 ถ้าค่าของ Expression1 เพียงพอที่จะระบุค่าที่ส่งกลับของนิพจน์เงื่อนไขทั้งหมด

  • สำหรับ ชื่อ ใน คำ ; ทำ รายการ ; เสร็จแล้ว: รายการคำต่อไปนี้ใน มีการขยายการสร้างรายการของไอเท็ม ตัวแปร ชื่อ ถูกตั้งค่าเป็นองค์ประกอบของรายการนี้ในทางกลับกันและ รายการ จะทำงานทุกครั้ง ถ้าใน คำ ถูกละไว้สำหรับ ดำเนินการ รายการ หนึ่งครั้งสำหรับแต่ละพารามิเตอร์ตำแหน่งที่ตั้งไว้ สถานะการส่งคืนคือสถานะทางออกของคำสั่งสุดท้ายที่ดำเนินการ หากมีการขยายตัวของรายการดังต่อไปนี้ใน ผลลัพธ์ในรายการที่ว่างเปล่าไม่มีคำสั่งใดที่ถูกดำเนินการและสถานะการส่งคืนคือ 0
  • สำหรับ (( expr1 ; expr2 ; expr3 )) ; ทำ รายการ ; เสร็จแล้ว: อันดับแรกการแสดงเลขคณิต expr1 ได้รับการประเมินตามกฎที่อธิบายไว้ในการประเมินเลขคณิต การคำนวณเลขคณิต expr2 จะถูกประเมินซ้ำจนกระทั่งประเมินเป็นศูนย์ แต่ละครั้ง expr2 ประเมินเป็นค่าที่ไม่ใช่ศูนย์, รายการ จะถูกดำเนินการและการแสดงออกเลขคณิต expr3 ได้รับการประเมิน หากนิพจน์ใดถูกละเว้นจะทำงานเหมือนกับที่ได้รับการประเมินเป็น 1 ค่าที่ส่งกลับคือสถานะทางออกของคำสั่งสุดท้าย รายการ ที่ดำเนินการหรือเท็จถ้านิพจน์ใด ๆ ไม่ถูกต้อง
  • เลือก ชื่อ ใน คำ ; ทำ รายการ ; เสร็จแล้ว: รายการคำศัพท์ต่อไปนี้ใน มีการขยายการสร้างรายการของไอเท็ม ชุดของคำที่ขยายจะพิมพ์ตามข้อผิดพลาดมาตรฐานซึ่งมีตัวเลขอยู่ข้างหน้า ถ้าใน คำ ถูกละเว้นพารามิเตอร์ตำแหน่งจะถูกพิมพ์ออกมา PS3 prompt จะปรากฏขึ้นและบรรทัดที่อ่านจากอินพุตมาตรฐาน ถ้าบรรทัดประกอบด้วยตัวเลขที่ตรงกับคำที่แสดงไว้หนึ่งค่าจากนั้นค่าของ ชื่อ ตั้งค่าเป็นคำดังกล่าว ถ้าบรรทัดว่างคำและพรอมต์จะปรากฏขึ้นอีกครั้ง ถ้าอ่าน EOF คำสั่งจะเสร็จสมบูรณ์ ค่าอ่านสาเหตุอื่น ๆ ชื่อ จะตั้งค่าเป็น null บรรทัดที่อ่านจะถูกบันทึกไว้ในตัวแปรตอบ. รายการ จะถูกทํางานหลังจากเลือกแตละครั้งจนถึงกหยุด คำสั่งจะถูกดำเนินการ สถานะการออกจากเลือก คือสถานะการออกจากคำสั่งสุดท้ายที่ดำเนินการมา รายการ , หรือศูนย์ถ้าไม่มีคำสั่งใดถูกดำเนินการ
  • กรณี คำ ใน ( แบบแผน | แบบแผน :กรณี คำสั่งขยายตัวครั้งแรก คำ และพยายามที่จะจับคู่กับแต่ละอย่าง แบบแผน ในทางกลับกันโดยใช้กฎการจับคู่เช่นเดียวกับการขยายพา ธ เมื่อมีการจับคู่พบกัน รายการ จะถูกประมวลผล หลังจากการแข่งขันรอบแรกไม่มีการแข่งขันที่ตามมา สถานะทางออกคือศูนย์หากไม่มีรูปแบบตรงกับ มิฉะนั้นจะเป็นสถานะออกจากคำสั่งสุดท้ายที่ดำเนินการมา รายการ .
  • ถ้า รายการ ; แล้วก็ รายการ; และ elif รายการ ; แล้วก็ รายการ ; … อื่น รายการ ; Fi: ถ้า รายการ จะถูกประมวลผล ถ้าสถานะการออกเป็นศูนย์แล้วก็ รายการ จะถูกประมวลผล มิฉะนั้นแต่ละ elif รายการ จะถูกดำเนินการในทางกลับกันและหากสถานะออกเป็นศูนย์แล้วก็ รายการ และคําสั่งจะเสร็จสิ้น ไม่เช่นนั้นอื่น รายการ จะทำงานถ้ามี สถานะทางออกคือสถานะทางออกของคำสั่งสุดท้ายที่ดำเนินการหรือศูนย์หากไม่มีเงื่อนไขที่ทดสอบจริง
  • ในขณะที่ รายการ ; ทำ รายการ ; เสร็จแล้ว และ จนกระทั่ง รายการ ; ทำ รายการ ; เสร็จแล้ว: Theในขณะที่ สั่งดำเนินการอย่างต่อเนื่องทำ รายการ ตราบใดที่คำสั่งสุดท้ายเข้า รายการ ส่งกลับสถานะการออกจากศูนย์จนกระทั่ง คำสั่งจะเหมือนกันกับในขณะที่ ยกเว้นว่าการทดสอบถูกลบล้างทำ รายการ จะทำงานตราบเท่าที่คำสั่งสุดท้ายเข้า รายการ ส่งกลับค่าสถานะทางออกที่ไม่ใช่ศูนย์ สถานะการออกจากไฟล์ในขณะที่ และจนกระทั่ง คำสั่งคือสถานะทางออกของรายการสุดท้ายทำ รายการ สั่งดำเนินการหรือศูนย์ถ้าไม่มีการดำเนินการ
  • ฟังก์ชัน ชื่อ () { รายการ ; }: กำหนดฟังก์ชันที่ชื่อ ชื่อ . ร่างกาย ของฟังก์ชั่นคือ รายการ ของคำสั่งระหว่าง {และ} รายการนี้จะถูกดำเนินการเมื่อใดก็ตาม ชื่อ ถูกระบุเป็นชื่อของคำสั่งง่ายๆ สถานะทางออกของฟังก์ชันคือสถานะทางออกของคำสั่งสุดท้ายที่ดำเนินการในเนื้อหา

ความคิดเห็น

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

quoting

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

แต่ละแห่ง metacharacters ที่ระบุไว้ข้างต้นคำนิยาม มีความหมายพิเศษกับเปลือกหอยและต้องมีการอ้างถึงถ้าเป็นตัวแทนของตัวเอง

เมื่อมีการใช้สิ่งอำนวยความสะดวกการขยายประวัติการสั่งงาน การขยายประวัติศาสตร์ ตัวอักษรปกติ!ต้องถูกยกมาเพื่อป้องกันไม่ให้การขยายประวัติ

มีกลไกการเสนอราคาสามข้อคือ ตัวหนี , เครื่องหมายคำพูดเดี่ยวและเครื่องหมายคำพูดคู่

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

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

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

พารามิเตอร์พิเศษ* และ@ มีความหมายพิเศษเมื่ออยู่ในเครื่องหมายคำพูดคู่

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

  • a: แจ้งเตือน (ระฆัง)
  • : backspace
  • E: ตัวหนี
  • : ฟีดรูปแบบ
  • n: บรรทัดใหม่
  • r: return carriage
  • t: แท็บแนวนอน
  • วี: แท็บแนวตั้ง
  • \: เครื่องหมายทับขวา
  • ': อ้างเพียงครั้งเดียว
  • nnn : อักขระแปดบิตที่มีค่าเป็นค่าฐานแปด nnn (หนึ่งถึงสามหลัก)
  • x HH : อักขระแปดบิตที่มีค่าเป็นค่าฐานสิบหก HH (หนึ่งหรือสองหลักหกหลัก)
  • x : ควบคุม - x ตัวละคร

ผลลัพธ์ที่ขยายออกมาคือการยกมาครั้งเดียวเช่นเดียวกับเครื่องหมายดอลลาร์ที่ยังไม่ปรากฏ

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

พารามิเตอร์

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

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

ตัวแปร อาจถูกกำหนดให้โดยคำแถลงของแบบฟอร์ม: ชื่อ = ราคา

ถ้า ราคา ไม่ได้รับตัวแปรจะได้รับการกำหนดค่าสตริง null ทั้งหมด ค่า รับการขยายตัวหนอนพารามิเตอร์และการขยายตัวแปรการแทนที่คำสั่งการขยายตัวทางคณิตศาสตร์และการลบข้อความ ถ้าตัวแปรมีจำนวนเต็ม ตั้งค่าแอตทริบิวต์แล้ว ราคา ขึ้นอยู่กับการขยายตัวทางคณิตศาสตร์แม้ว่าจะไม่ใช้การขยายตัว $ ((… )) การแยกคำไม่ใช้ยกเว้นข้อยกเว้น'$@' ตามที่อธิบายไว้ในพารามิเตอร์พิเศษ. การขยายเส้นทางไม่ได้ทำ งบการกำหนดอาจปรากฏเป็นข้อขัดแย้งกับประกาศ, เรียงพิมพ์, ส่งออก, อ่านเท่านั้น, และ ในประเทศ คำสั่ง builtin

พารามิเตอร์ตำแหน่ง

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

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

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

เปลือกถือว่าหลายพารามิเตอร์พิเศษ พารามิเตอร์เหล่านี้สามารถอ้างอิงได้เท่านั้น ไม่อนุญาตให้มอบหมายงานแก่พวกเขา

  • *: ขยายไปยังพารามิเตอร์ตำแหน่งโดยเริ่มต้นจากหนึ่ง เมื่อการขยายตัวเกิดขึ้นภายในเครื่องหมายคำพูดคู่จะขยายเป็นคำเดียวที่มีค่าของพารามิเตอร์แต่ละตัวคั่นด้วยอักขระตัวแรกของไอเอฟเอ ตัวแปรพิเศษ นั่นคือ, "$*"เทียบเท่ากับ"$1$2"ที่ ค เป็นตัวแรกของค่าของไอเอฟเอ ตัวแปร. ถ้าไอเอฟเอ ไม่มีการตั้งค่าพารามิเตอร์จะถูกคั่นด้วยช่องว่าง ถ้าไอเอฟเอ เป็นโมฆะพารามิเตอร์จะเข้าร่วมโดยไม่แทรกแซงตัวคั่น
  • @: ขยายไปยังพารามิเตอร์ตำแหน่งโดยเริ่มต้นจากหนึ่ง เมื่อการขยายตัวเกิดขึ้นภายในเครื่องหมายคำพูดคู่แต่ละพารามิเตอร์จะขยายเป็นคำที่แยกจากกัน นั่นคือ, "$@"เทียบเท่ากับ"$1' '$2"… เมื่อไม่มีพารามิเตอร์ตำแหน่ง"$@"และ$@ขยายไปไม่มีอะไร (พวกเขาจะถูกเอาออก)
  • #: ขยายไปยังหมายเลขของพารามิเตอร์ตำแหน่งในรูปแบบทศนิยม
  • ?: ขยายไปสู่สถานะของท่อนำหน้าที่ทำงานล่าสุดเมื่อเร็ว ๆ นี้
  • -: ขยายไปยังค่าสถานะปัจจุบันตามที่ระบุไว้ในคำร้องโดยชุด builtin หรือชุดที่กำหนดโดยเชลล์เองเช่น-ผม ตัวเลือก
  • $: ขยายเป็นรหัสกระบวนการของเชลล์ ใน subshell () จะขยายไปยัง ID กระบวนการของเชลล์ปัจจุบันไม่ใช่ subshell
  • !: ขยายไปยัง ID กระบวนการของคำสั่งพื้นหลัง (asynchronous) ที่รันเมื่อเร็ว ๆ นี้
  • 0ขยายชื่อของเชลล์หรือเชลล์สคริปต์ นี่คือชุดที่เริ่มต้นเปลือก ถ้าทุบตี เป็น invoked กับไฟล์ของคำสั่ง,$0 ถูกตั้งค่าเป็นชื่อของไฟล์นั้น ถ้าทุบตี เริ่มต้นด้วย-c จากนั้น$0 ถูกตั้งค่าเป็นอาร์กิวเมนต์แรกหลังจากสตริงที่จะถูกเรียกใช้ถ้ามีอยู่ มิฉะนั้นจะถูกตั้งเป็นชื่อไฟล์ที่ใช้เรียกทุบตีตามที่ระบุโดยอาร์กิวเมนต์เป็นศูนย์
  • _: ในการเริ่มต้นของเชลล์ให้ตั้งชื่อไฟล์สัมบูรณ์ของเชลล์หรือเชลล์สคริปต์ที่ถูกดำเนินการโดยส่งผ่านรายการอาร์กิวเมนต์ ต่อจากนั้นจะขยายไปยังอาร์กิวเมนต์สุดท้ายไปยังคำสั่งก่อนหน้านี้หลังจากการขยาย ตั้งค่าเป็นชื่อไฟล์ทั้งหมดของคำสั่งแต่ละคำสั่งและวางไว้ในสภาพแวดล้อมที่ส่งออกไปยังคำสั่งนั้น เมื่อตรวจสอบเมลพารามิเตอร์นี้จะเก็บชื่อของไฟล์เมลที่กำลังตรวจสอบอยู่