ชื่อ
sh - คำสั่งล่าม ( เปลือก )
สรุป
sh [- / + aCefnuvxIimqsVEbc ] [- o longname ] -words [ เป้าหมาย ... ]
รายละเอียด
Sh เป็นล่ามคำสั่งมาตรฐานสำหรับระบบ เวอร์ชันปัจจุบันของ SH กำลังอยู่ระหว่างการเปลี่ยนแปลงเพื่อให้สอดคล้องกับข้อกำหนด POSIX 1003.2 และ 1003.2a สำหรับเปลือก รุ่นนี้มีคุณลักษณะหลายอย่างที่ทำให้ดูเหมือนกันในบางแง่มุมของเปลือก Korn แต่ก็ไม่ใช่โคลนเปลือกของ Korn (ดูที่ ksh (1)) เฉพาะคุณสมบัติที่กำหนดโดย POSIX บวกส่วนขยาย Berkeley เพียงไม่กี่ชิ้นเท่านั้นที่รวมอยู่ในเปลือกนี้ เราคาดว่า POSIX จะ ปฏิบัติตามเวลา 4.4 BSD ได้รับการปล่อยตัว หน้าคนนี้ไม่ได้ตั้งใจที่จะสอนหรือข้อกำหนดที่สมบูรณ์ของเปลือก
ภาพรวม
เชลล์เป็นคำสั่ง ที่อ่านบรรทัดจากไฟล์หรือเทอร์มินัลแปลความหมายเหล่านี้และโดยทั่วไปจะใช้คำสั่งอื่น ๆ เป็นโปรแกรมที่รันเมื่อผู้ใช้เข้าสู่ระบบ (แม้ว่าผู้ใช้สามารถเลือกเชลล์ที่แตกต่างกันได้โดยใช้คำสั่ง chsh (1)) เปลือกใช้ภาษาที่มีโครงสร้างการควบคุมการไหลของข้อมูลสิ่งอำนวยความสะดวกของมาโครที่มีคุณสมบัติหลากหลายนอกเหนือจากการจัดเก็บข้อมูลพร้อมด้วยประวัติและความสามารถในการแก้ไขบรรทัด ประกอบด้วยคุณลักษณะมากมายที่จะช่วยให้การใช้งานแบบโต้ตอบและมีข้อได้เปรียบที่ภาษาตีความเป็นเรื่องธรรมดาสำหรับการใช้งานแบบโต้ตอบและแบบไม่โต้ตอบ (เชลล์สคริปต์) นั่นคือคำสั่งสามารถพิมพ์โดยตรงไปยังเปลือกที่ทำงานหรือสามารถใส่ลงในไฟล์และไฟล์สามารถดำเนินการได้โดยตรงโดยเปลือก
การภาวนา
ถ้าอาร์กิวเมนต์ไม่มีอยู่และถ้าอินพุทมาตรฐานของเชลล์ถูกเชื่อมต่อกับเทอร์มินัล (หรือถ้ามีการตั้งค่าแฟล็ก - i ไว้) และตัวเลือก - c ไม่มีอยู่เปลือกจะถือว่าเป็น เชลล์ แบบโต้ตอบ ปลั๊กอินแบบโต้ตอบจะแจ้งให้ทราบล่วงหน้าก่อนคำสั่งแต่ละคำสั่งและจัดการกับข้อผิดพลาดในการเขียนโปรแกรมและ คำสั่ง ต่างกัน (ตามที่อธิบายไว้ด้านล่าง) เมื่อเริ่มต้นครั้งแรกเปลือกตรวจสอบอาร์กิวเมนต์ 0 และถ้ามันเริ่มต้นด้วยการรีบ `- 'เปลือกยังถือว่าเป็นเปลือกเข้าสู่ระบบ โดยปกติระบบจะทำโดยอัตโนมัติเมื่อผู้ใช้ล็อกอินเข้าสู่ระบบเปลือกแรกจะอ่านคำสั่งจากแฟ้ม / etc / profile และ .profile ถ้ามีอยู่ ถ้าตัวแปรสภาพแวดล้อม ENV ถูกตั้งค่าไว้ในการเข้าสู่เชลล์หรือถูกตั้งค่าไว้ใน .profile ของเชลล์ล็อกอินเปลือกจะอ่านคำสั่งจากไฟล์ที่ระบุใน ENV ดังนั้นผู้ใช้ควรวางคำสั่งที่จะสั่งให้ทำเฉพาะที่ เวลาล็อกอินในแฟ้ม. profile และคำสั่งที่ใช้สำหรับเปลือกภายในไฟล์ ENV ในการกำหนดตัวแปร ENV ให้กับไฟล์บางไฟล์ให้วางบรรทัดต่อไปนี้ไว้ในโปรไฟล์ .profile ของไดเรกทอรีบ้านของคุณ
ENV = $ HOME / .shinit; ส่งออก ENV
แทน '`.shinit' ' ชื่อไฟล์ที่ คุณต้องการ เนื่องจากไฟล์ ENV ถูกอ่านสำหรับการอุทธรณ์ทุกครั้งของเชลล์รวมทั้งสคริปต์เชลล์และเปลือกที่ไม่โต้ตอบปลั๊กอินต่อไปนี้จะเป็นประโยชน์สำหรับการ จำกัด คำสั่งในไฟล์ ENV เพื่อการ invocations แบบอินเทอร์ วางคำสั่งภายใน `` case '' และ `` esac '' ด้านล่าง (คำสั่งเหล่านี้จะอธิบายในภายหลัง):
กรณี $ - in * i *)
# คำสั่ง สำหรับการใช้งานเชิงโต้ตอบเท่านั้น
...
esac
ถ้าอาร์กิวเมนต์บรรทัดคำสั่งนอกเหนือจากตัวเลือกได้รับการระบุแล้วเชลล์จะถือว่าอาร์กิวเมนต์แรกเป็นชื่อของไฟล์ที่จะอ่านคำสั่ง (เชลล์สคริปต์) และอาร์กิวเมนต์ที่เหลือจะถูกตั้งค่าเป็นพารามิเตอร์ตำแหน่งของเชลล์ ($ 1 , $ 2 เป็นต้น) มิฉะนั้น shell จะอ่านคำสั่งจากอินพุตมาตรฐาน
การประมวลผลรายการอาร์กิวเมนต์
ตัวอักษรทั้งหมดของตัวอักษรเดียวมีชื่อที่ตรงกันซึ่งสามารถใช้เป็นอาร์กิวเมนต์ให้กับตัวเลือก o ได้ ชื่อชุดมีไว้ถัดจากตัวเลือกตัวอักษรเดียวในคำอธิบายด้านล่าง การระบุเส้นประ - "" จะเปลี่ยนตัวเลือกในขณะที่ใช้เครื่องหมายบวก "+" จะปิดใช้ตัวเลือก คุณสามารถตั้งค่าตัวเลือกต่อไปนี้จากบรรทัดคำสั่งหรือด้วย builtin (1) (อธิบายในภายหลัง)
- allexport
ส่งออกตัวแปรทั้งหมดที่กำหนดให้ (UNIMPLEMENTED for 4.4alpha)
-c
อ่านคำสั่งจากบรรทัดคำสั่ง จะไม่มีการอ่านคำสั่งจากอินพุตมาตรฐาน
-C noclobber
อย่าเขียนทับไฟล์ที่มีอยู่ด้วย ``> '' (UNIMPLEMENTED for 4.4alpha)
-e errexit
หากไม่โต้ตอบให้ออกทันทีหากยังไม่ได้รับคำสั่งใด ๆ สถานะออกของคำสั่งจะถูกพิจารณาว่าได้รับการทดสอบอย่างชัดเจนถ้าคำสั่งถูกใช้เพื่อควบคุม if elif ในขณะที่ หรือ จนกว่า หรือถ้าคำสั่งเป็นโอเปอเรเตอร์ด้านซ้ายของตัวดำเนินการ `` และ '' หรือ `` || ''
-f noglob
ปิดการใช้งานการขยาย เส้นทาง
- n noexec
ถ้าไม่โต้ตอบอ่านคำสั่ง แต่ไม่ได้ดำเนินการพวกเขา ซึ่งจะเป็นประโยชน์สำหรับการตรวจสอบไวยากรณ์ของเชลล์สคริปต์
-u nounset
เขียนข้อความถึงข้อผิดพลาดมาตรฐานเมื่อพยายามขยายตัวแปรที่ไม่ได้ตั้งค่าไว้และถ้าเปลือกไม่โต้ตอบให้ออกทันที (UNIMPLEMENTED for 4.4alpha)
- verbose
เปลือกเขียนอินพุทของข้อผิดพลาดมาตรฐานตามที่อ่าน มีประโยชน์สำหรับการดีบัก
x xtrace
เขียนคำสั่งแต่ละคำสั่งเป็น ข้อผิดพลาดมาตรฐาน (นำหน้าด้วยเครื่องหมาย `+ 'ก่อนที่จะดำเนินการ) มีประโยชน์สำหรับการดีบัก
-q เงียบไฟล์รายละเอียด
ถ้าไม่มีการตั้งค่าตัวเลือก - v หรือ - x อย่าใช้เมื่ออ่านไฟล์เริ่มต้นแฟ้มเหล่านี้เป็น / etc / profile .profile และไฟล์ที่ระบุโดยตัวแปรสภาพแวดล้อม ENV
ฉันไม่ สนใจ
ไม่สนใจ EOF จากข้อมูลเมื่อมีการโต้ตอบ
-i โต้ตอบ
บังคับให้เปลือกทำงานโต้ตอบ
จอภาพ -m
เปิดการควบคุมงาน (ตั้งโดยอัตโนมัติเมื่อโต้ตอบ)
-stdin
อ่านคำสั่งจาก อินพุตมาตรฐาน (ตั้งค่าโดยอัตโนมัติถ้าไม่มีอาร์กิวเมนต์ไฟล์อยู่) ตัวเลือกนี้ไม่มีผลเมื่อตั้งค่าหลังจากที่เชลล์ได้เริ่มทำงานแล้ว (เช่นกับชุด (1))
-V vi
เปิดใช้งานตัวแก้ไขบรรทัดคำสั่ง vi (1) ในตัว (ปิดใช้งาน - E ถ้าได้ตั้งค่าไว้)
-E emacs
เปิดใช้งานตัวแก้ไขบรรทัดคำสั่ง emacs (1) ในตัว (ปิดใช้งาน - V ถ้าได้ตั้งค่าไว้)
- b แจ้ง
เปิดใช้การแจ้งเตือนแบบอะซิงโครนัสสำหรับการทำงานในพื้นหลัง (UNIMPLEMENTED for 4.4alpha)
โครงสร้างคำศัพท์
เปลือกอ่านข้อมูลในแง่ของเส้นจากไฟล์และแบ่งออกเป็นคำที่ช่องว่าง (ช่องว่างและแท็บ) และที่ลำดับบางอย่างของตัวอักษรที่มีลักษณะพิเศษของเปลือกเรียกว่า "ผู้ประกอบการ" "มีสองประเภทของผู้ประกอบการ: (ความหมายของพวกเขาจะกล่าวถึงในภายหลัง) ต่อไปนี้เป็นรายการของผู้ประกอบการ:
"ผู้ควบคุม:"
& && (); ;; | ||
"ผู้ดำเนินการเปลี่ยนเส้นทาง:"
<>> | << >> <&> & << - <>
quoting
Quoting ใช้เพื่อลบความหมายพิเศษของอักขระหรือคำบางคำในเชลล์เช่นตัวดำเนินการช่องว่างหรือคำหลัก การอ้างถึงสามประเภทคือการจับคู่ราคาเดียวการจับคู่ราคาคู่และเครื่องหมายทับขวา
ทับขวา
เครื่องหมายทับขวาจะสงวนความหมายที่แท้จริงของตัวอักษรต่อไปนี้ยกเว้นบรรทัดใหม่ Aq เครื่องหมายทับขวาก่อนบรรทัดใหม่ Aq จะถือว่าเป็นส่วนต่อเนื่องของบรรทัด
คำคมเดี่ยว
การใส่อักขระในเครื่องหมายคำพูดแบบเดี่ยวช่วยรักษาความหมายที่แท้จริงของอักขระทั้งหมด (ยกเว้นคำพูดแบบเดี่ยวทำให้ไม่สามารถใส่เครื่องหมายคำพูดเดียวในสตริงที่ยกมาได้)
คำพูดคู่
อักขระที่ปิดล้อมภายในเครื่องหมายคำพูดคู่จะสงวนความหมายที่แท้จริงของอักขระทั้งหมดยกเว้นเครื่องหมายหลังดอลลาร์ ($) () และเครื่องหมายทับขวา (\) เครื่องหมายทับขวาภายในเครื่องหมายคำพูดแบบคู่เป็นเรื่องแปลก ๆ ในอดีตและใช้แทนอักขระต่อไปนี้เท่านั้น:
$ `\
มิฉะนั้นก็ยังคงเป็นตัวอักษร
คำสงวน
คำที่สงวนไว้คือคำที่มีความหมายพิเศษสำหรับเชลล์และเป็นที่ยอมรับในตอนต้นของบรรทัดและหลังตัวดำเนินการควบคุม ต่อไปนี้เป็นคำสงวน:
! Ta elif Ta fi Ta ขณะที่ Ta กรณี
อื่น ๆ Ta for Ta then Ta Ta Ta
ทำตา ทำตาจนตาถ้าตา esac
ความหมายของพวกเขาจะกล่าวถึงในภายหลัง
นามแฝง
นามแฝงเป็นชื่อและค่าที่สอดคล้องกันโดยใช้คำสั่ง นามแฝง (1) เมื่อใดก็ตามที่คำสงวนอาจเกิดขึ้น (ดูด้านบน) และหลังจากตรวจสอบคำสงวนแล้วเชลล์จะตรวจสอบคำเพื่อดูว่าตรงกับนามแฝงหรือไม่ ถ้าไม่มีก็จะแทนที่ในกระแสอินพุตด้วยค่าของมัน ตัวอย่างเช่นถ้ามีนามแฝงที่เรียกว่า `` lf '' มีค่า `` ls -F '' แล้วใส่ข้อมูล:
lf foobar
จะกลายเป็น
ls -F foobar
นามแฝงเป็นวิธีที่สะดวกสำหรับผู้ใช้ที่ไร้เดียงสาที่จะสร้างคำสั่งชวเลขสำหรับคำสั่งโดยไม่ต้องเรียนรู้วิธีสร้างฟังก์ชันด้วยอาร์กิวเมนต์ นอกจากนี้ยังสามารถใช้เพื่อสร้างรหัสคลุมเครือ lexically การใช้นี้ไม่ได้รับการสนับสนุน
คำสั่ง
เปลือกอธิบายคำที่อ่านตามภาษาข้อกำหนดที่อยู่นอกขอบเขตของหน้าคนนี้ (ดู BNF ในเอกสาร POSIX 1003.2) แม้ว่าบรรทัดแรกจะถูกอ่านและถ้าคำแรกของบรรทัด (หรือหลังโอเปอเรเตอร์ตัวควบคุม) ไม่ใช่คำสงวนแล้ว shell ก็รู้จักคำสั่งง่ายๆ มิฉะนั้นอาจได้รับการยอมรับคำสั่งที่ซับซ้อนหรือสิ่งก่อสร้างพิเศษอื่น ๆ
คำสั่งง่ายๆ
หากมีการรู้จักคำสั่งง่ายๆเปลือกจะดำเนินการต่อไปนี้:
- คำนำหน้าของรูปแบบ `` name = value '' ถูกตัดออกและกำหนดให้กับสภาพแวดล้อมของคำสั่งง่ายๆ ผู้ให้บริการการเปลี่ยนเส้นทางและอาร์กิวเมนต์ของตน (ตามที่อธิบายไว้ด้านล่าง) จะถูกตัดออกและบันทึกไว้สำหรับการประมวลผล
- คำที่เหลือจะขยายตามที่อธิบายไว้ในส่วนที่เรียกว่า `` Expansions '' และคำแรกที่เหลือจะถือว่าเป็นชื่อคำสั่งและคำสั่งจะอยู่ คำที่เหลือจะถือว่าเป็นอาร์กิวเมนต์ของคำสั่ง ถ้าไม่มีชื่อคำสั่งเกิดขึ้น `` name = value '' การกำหนดตัวแปรที่ได้รับการยอมรับในข้อ 1 ส่งผลต่อเชลล์ปัจจุบัน
- การเปลี่ยนเส้นทางจะดำเนินการตามที่อธิบายไว้ในส่วนถัดไป
การเปลี่ยนเส้นทาง
การเปลี่ยนเส้นทางจะใช้เพื่อเปลี่ยนตำแหน่งที่คำสั่งอ่านข้อมูลเข้าหรือส่งออก โดยทั่วไปการเปลี่ยนเส้นทางเปิดปิดหรือทำซ้ำการอ้างอิงที่มีอยู่ไปยังไฟล์ รูปแบบโดยรวมที่ใช้สำหรับการเปลี่ยนเส้นทางคือ:
[n] ไฟล์ redir-op
ที่ redir-op เป็นหนึ่งในผู้ดำเนินการเปลี่ยนเส้นทางที่กล่าวถึงก่อนหน้านี้ ต่อไปนี้เป็นรายการการเปลี่ยนเส้นทางที่เป็นไปได้ Bq n เป็นจำนวนที่เลือกได้เช่นเดียวกับใน `3 '(ไม่ใช่' Bq 3 'ซึ่งหมายถึง descriptor ไฟล์
[n]> ไฟล์
เปลี่ยนเส้นทางเอาท์พุทมาตรฐาน (หรือ n) ไปยังแฟ้ม
[n]> | ไฟล์
เหมือนกัน แต่แทนที่ตัวเลือก C
[n] >> ไฟล์
ผนวกเอาต์พุตมาตรฐาน (หรือ n) เพื่อเก็บไฟล์
[n] <ไฟล์
เปลี่ยนเส้นทางการป้อนข้อมูลมาตรฐาน (หรือ n) จากไฟล์
[n1] <& n2
อินพุตมาตรฐานที่ซ้ำกัน (หรือ n1) จาก descriptor ไฟล์ n2
[n] <& -
ปิดการป้อนข้อมูลมาตรฐาน (หรือ n)
[n1]> & n2
เอาต์พุตมาตรฐานที่ซ้ำกัน (หรือ n1) จาก n2
[n]> & -
ปิดเอาต์พุตมาตรฐาน (หรือ n)
[n] <> ไฟล์
เปิดไฟล์สำหรับอ่านและเขียนข้อมูลในอินพุตมาตรฐาน (หรือ n)
การเปลี่ยนเส้นทางต่อไปนี้มักเรียกว่า `` นี่เอกสาร ''
[n] << ตัวคั่น
ที่นี่ข้อความ doc ...
คั่น
ข้อความทั้งหมดในบรรทัดถัดไปถึงตัวคั่นจะถูกบันทึกไว้และให้คำสั่งในการป้อนข้อมูลมาตรฐานหรือตัวบอกไฟล์ n หากมีการระบุไว้ ถ้าตัวคั่นตามที่ระบุไว้ในบรรทัดเริ่มต้นถูกยกมาแล้วข้อความ here-doc จะได้รับการปฏิบัติตามตัวอักษรอย่างอื่นมิฉะนั้นข้อความจะขึ้นอยู่กับการขยายพารามิเตอร์การแทนที่คำสั่งและการขยายตัวทางคณิตศาสตร์ (ตามที่อธิบายไว้ในส่วน "การขยาย") 'ถ้าโอเปอเรเตอร์เป็น `` << -' 'แทน `` <<' 'จากนั้นแท็บชั้นนำในเอกสาร doc นี้จะถูกตัดออก
การค้นหาและการดำเนินการ
มีคำสั่งสามแบบ ได้แก่ ฟังก์ชัน shell คำสั่ง builtin และโปรแกรมปกติ - และค้นหาคำสั่ง (ตามชื่อ) ตามลำดับนั้น พวกเขาแต่ละคนจะถูกประหารชีวิตในลักษณะที่ต่างออกไป
พารามิเตอร์เชลล์ทั้งหมด (ยกเว้น $ 0 ซึ่งยังคงไม่เปลี่ยนแปลง) ถูกตั้งค่าเป็นอาร์กิวเมนต์ของฟังก์ชันเชลล์ ตัวแปรที่ถูกวางไว้อย่างชัดเจนในสภาวะแวดล้อมของคำสั่ง (โดยการวางการกำหนดให้กับฟังก์ชันเหล่านี้ก่อนชื่อฟังก์ชัน) จะถูกสร้างขึ้นภายในฟังก์ชันและตั้งค่าเป็นค่าที่กำหนด จากนั้นคำสั่งที่ระบุในคำจำกัดความฟังก์ชันจะถูกดำเนินการ พารามิเตอร์ตำแหน่งจะคืนค่าเป็นค่าเดิมเมื่อคำสั่งเสร็จสิ้น ทั้งหมดนี้เกิดขึ้นภายในเปลือกปัจจุบัน
เชลล์ builtins จะถูกดำเนินการภายในสู่เชลล์โดยไม่ต้องพลิกโฉมกระบวนการใหม่
มิฉะนั้นถ้าชื่อคำสั่งไม่ตรงกับฟังก์ชั่นหรือ builtin คำสั่งจะค้นหาเป็นโปรแกรมปกติในระบบแฟ้ม (ตามที่อธิบายไว้ในส่วนถัดไป) เมื่อรันโปรแกรมปกติเปลือกจะรันโปรแกรมโดยส่งอาร์กิวเมนต์และสภาพแวดล้อมไปยังโปรแกรม หากโปรแกรมไม่ได้เป็นไฟล์ปฏิบัติการปกติ (เช่นถ้าไม่ได้เริ่มต้นด้วย "magic number" ที่มีการแทน ASCII คือ "#!" ดังนั้น execve (2) จะส่งกลับ Er ENOEXEC แล้ว) shell จะตีความโปรแกรมใน a subshell เปลือกลูกน้อยจะเริ่มต้นใหม่ในกรณีนี้เพื่อให้ผลกระทบจะเหมือนกับว่ามีการเรียกใช้เชลล์ใหม่เพื่อจัดการกับสคริปต์เชลล์ ad-hoc ยกเว้นว่าตำแหน่งของคำสั่งแฮชที่อยู่ในเชลล์ของแม่จะจำได้โดย เด็ก.
โปรดทราบว่าเวอร์ชันก่อนหน้าของเอกสารนี้และซอร์สโค้ดเองที่ทำให้เข้าใจผิดและไม่ต่อเนื่องอ้างถึงสคริปต์เชลล์โดยไม่มีหมายเลขมายากลเป็น "กระบวนงานเชลล์"
การค้นหาเส้นทาง
เมื่อค้นหาคำสั่ง shell ก่อนจะดูว่ามีฟังก์ชัน shell โดยใช้ชื่อดังกล่าวหรือไม่ จากนั้นจะมองหาคำสั่ง builtin โดยใช้ชื่อนั้น ถ้าไม่พบคำสั่งที่สร้างขึ้นหนึ่งในสองสิ่งเกิดขึ้น:
- ชื่อคำสั่งที่มีเครื่องหมายทับจะถูกดำเนินการโดยไม่ต้องทำการค้นหาใด ๆ
- เชลล์ค้นหาแต่ละรายการใน PATH ตาม ลำดับสำหรับคำสั่ง ค่าของตัวแปร PATH ควรเป็นชุดรายการที่คั่นด้วยเครื่องหมายทวิภาค แต่ละรายการประกอบด้วยชื่อไดเรกทอรี ไดเร็กทอรีปัจจุบันอาจถูกระบุโดยปริยายโดยใช้ชื่อไดเร็กทอรีว่างหรืออย่างชัดเจนภายในช่วงเวลาเดียว
Command Exit Status
คำสั่งแต่ละคำมีสถานะทางออกที่สามารถมีอิทธิพลต่อพฤติกรรมของคำสั่งเชลล์อื่น ๆ ได้ กระบวนทัศน์คือคำสั่งออกมาพร้อมกับศูนย์สำหรับความปกติหรือความสำเร็จและไม่ใช่ศูนย์สำหรับความล้มเหลวข้อผิดพลาดหรือข้อบ่งชี้ที่ไม่ถูกต้อง หน้าคนสำหรับแต่ละคำสั่งควรระบุรหัสทางออกต่างๆและความหมาย นอกจากนี้คำสั่ง builtin ส่งกลับรหัสออกเช่นเดียวกับฟังก์ชันเชลล์ดำเนินการ
คำสั่งที่ซับซ้อน
คำสั่งที่ซับซ้อนคือการรวมกันของคำสั่งง่ายๆกับตัวควบคุมหรือคำสงวนพร้อมกันในการสร้างคำสั่งที่มีขนาดใหญ่ขึ้น โดยทั่วไปคำสั่งคือหนึ่งในต่อไปนี้:
- คำสั่งง่ายๆ
- ท่อ
- รายการหรือสารประกอบรายการ
- คำสั่งผสม
- นิยามฟังก์ชัน
สถานะทางออกของคำสั่งคือคำสั่งง่ายๆที่ดำเนินการโดยคำสั่งสุดท้าย
ท่อ
ท่อเป็นลำดับหนึ่งหรือหลายคำสั่งที่คั่นด้วยตัวควบคุมโอเปอเรเตอร์ เอาต์พุตมาตรฐานของคำสั่งทั้งหมด แต่คำสั่งสุดท้ายถูกเชื่อมต่อกับอินพุตมาตรฐานของคำสั่งถัดไป เอาท์พุทมาตรฐานของคำสั่งสุดท้ายถูกสืบทอดมาจากเชลล์ตามปกติ
รูปแบบของท่อคือ:
[!] command1 [| command2 ... ]
เอาต์พุตมาตรฐานของ command1 เชื่อมต่อกับอินพุตมาตรฐานของ command2 อินพุตมาตรฐานเอาท์พุทมาตรฐานหรือทั้งสองคำสั่งจะถูกกำหนดให้เป็นไปตามท่อก่อนการเปลี่ยนเส้นทางที่ระบุโดยผู้ให้บริการการเปลี่ยนเส้นทางซึ่งเป็นส่วนหนึ่งของคำสั่ง
ถ้าท่อไม่ได้อยู่ในพื้นหลัง (อธิบายไว้ในภายหลัง) เชลล์รอคำสั่งทั้งหมดให้เสร็จสมบูรณ์
ถ้าคำสงวนไว้! ไม่นำหน้าท่อสถานะออกเป็นสถานะทางออกของคำสั่งสุดท้ายที่ระบุไว้ในท่อ มิฉะนั้นสถานะออกเป็นตรรกะไม่ของสถานะออกของคำสั่งสุดท้าย นั่นคือถ้าคำสั่งสุดท้ายส่งกลับเป็นศูนย์สถานะทางออกคือ 1; ถ้าคำสั่งสุดท้ายส่งกลับค่ามากกว่าศูนย์สถานะทางออกจะเป็นศูนย์
เนื่องจากการกำหนดค่าท่อของอินพุตมาตรฐานหรือเอาต์พุตมาตรฐานหรือทั้งสองอย่างเกิดขึ้นก่อนการเปลี่ยนเส้นทางคุณสามารถแก้ไขได้โดยการเปลี่ยนเส้นทาง ตัวอย่างเช่น:
$ command1 2> & 1 | Command2
ส่งออกทั้งมาตรฐานและข้อผิดพลาดมาตรฐานของ command1 ไปยังอินพุตมาตรฐานของ command2
A; หรือ terminator
โปรดสังเกตว่าแตกต่างจากเปลือกหอยอื่น ๆ แต่ละกระบวนการในท่อเป็นเด็กของเปลือก invoking (ยกเว้นกรณีที่เป็น builtin เปลือกซึ่งในกรณีนี้จะดำเนินการในเปลือกปัจจุบัน - แต่ผลกระทบใด ๆ ที่มีต่อสิ่งแวดล้อมจะถูกเช็ด)
คำสั่งพื้นหลัง -
ถ้าคำสั่งถูกยกเลิกโดยตัวควบคุมโอเปอเรเตอร์ (&) เปลือกจะรันคำสั่ง asynchronously - นั่นคือเปลือกไม่รอให้คำสั่งเสร็จสิ้นก่อนที่จะรันคำสั่งถัดไป
รูปแบบการเรียกใช้คำสั่งในพื้นหลังคือ:
command1 & [command2 & ... ]
ถ้าเชลล์ไม่โต้ตอบอินพุตมาตรฐานของคำสั่งแบบอะซิงโครนัสถูกตั้งค่าเป็น / dev / null
รายการ - พูดโดยทั่วไป
รายการคือลำดับของศูนย์หรือมากกว่าคำสั่งที่คั่นด้วยบรรทัดใหม่เครื่องหมายอัฒภาคหรือเครื่องหมายอัศเจรีย์และอาจถูกยกเลิกโดยหนึ่งในสามตัวนี้ คำสั่งในรายการจะถูกดำเนินการตามลำดับที่เขียนไว้ ถ้ามีคำสั่งตามด้วยเครื่องหมายอัชเชอร์เปลือกจะเริ่มคำสั่งและดำเนินการกับคำสั่งถัดไปทันที มิฉะนั้นจะรอคำสั่งให้ยุติก่อนที่จะดำเนินการต่อไป
ผู้ประกอบการวงจรรายชื่อสั้น
`` && '' และ `` || 'เป็นโอเปอเรเตอร์ AND หรือ OR `` && 'รันคำสั่งแรกแล้วรันคำสั่งที่สองและออกจากสถานะ exit ของคำสั่งแรกเป็นศูนย์ `` || '' จะคล้ายกัน แต่รันคำสั่งที่สองและออกจากสถานะ exit ของคำสั่งแรกคือไม่ใช่ศูนย์ `` && '' และ `` || '' ทั้งสองมีลำดับความสำคัญเท่ากัน
โครงสร้างควบคุมการไหล - ถ้าในขณะที่สำหรับกรณี
ไวยากรณ์ของคำสั่ง If คือ
ถ้ารายการ
แล้วรายการ
[รายการ elif
แล้วรายการ] ...
[รายการอื่น]
Fi
ไวยากรณ์ของคำสั่ง while คือ
ในขณะที่รายการ
ทำรายการ
เสร็จแล้ว
ทั้งสองรายการจะถูกทำซ้ำ ๆ ในขณะที่สถานะการออกจากรายการแรกเป็นศูนย์ คำสั่งจนกว่าจะเหมือนกัน แต่มีคำจนกระทั่งในขณะที่ซึ่งทำให้มันซ้ำจนกว่าสถานะทางออกของรายการแรกเป็นศูนย์
ไวยากรณ์ของคำสั่ง for คือ
สำหรับตัวแปรในคำ ...
ทำรายการ
เสร็จแล้ว
คำที่ถูกขยายจากนั้นรายการจะถูกดำเนินการซ้ำ ๆ พร้อมกับตัวแปรที่กำหนดให้กับแต่ละคำในทางกลับกัน ทำและทำอาจถูกแทนที่ด้วย `` {'' และ ``} ''
ไวยากรณ์ของคำสั่งแบ่งและดำเนินการต่อคือ
แบ่ง [num]
ต่อ [num]
Break จะยุติเลขภายในสุดสำหรับหรือในขณะที่ลูป ดำเนินการต่อโดยทำซ้ำซ้ำกันของวงด้านในสุด เหล่านี้ใช้เป็นคำสั่ง builtin
ไวยากรณ์ของคำสั่ง case คือ
คำในกรณี
รูปแบบ) รายการ ;;
...
esac
รูปแบบสามารถเป็นรูปแบบได้มากกว่าหนึ่งรูปแบบ (ดูรูปแบบเชลล์ที่อธิบายไว้ในภายหลัง) โดยคั่นด้วยอักขระ `` '
จัดกลุ่มคำสั่งด้วยกัน
คำสั่งอาจถูกจัดกลุ่มโดยการเขียนอย่างใดอย่างหนึ่ง
(รายการ)
หรือ
{list;
ครั้งแรกของคำสั่งเหล่านี้จะดำเนินการใน subshell คำสั่ง Builtin ที่ถูกจัดกลุ่มลงใน (รายการ) จะไม่มีผลกับเชลล์ปัจจุบัน แบบฟอร์มที่สองไม่ได้ทำให้ส้อมเปลือกอีกครั้งเพื่อให้มีประสิทธิภาพมากขึ้นเล็กน้อย การจัดกลุ่มคำสั่งด้วยวิธีนี้จะช่วยให้คุณสามารถเปลี่ยนเส้นทางเอาท์พุทได้ราวกับว่าเป็นหนึ่งโปรแกรม:
{printf สวัสดี; printf world \ n ";}> ทักทาย
ฟังก์ชั่น
ไวยากรณ์ของนิยามฟังก์ชันคือ
ชื่อ () คำสั่ง
คำจำกัดความของฟังก์ชันคือคำสั่งปฏิบัติการ เมื่อดำเนินการมันจะติดตั้งฟังก์ชันชื่อชื่อและส่งกลับสถานะการออกจากศูนย์ คำสั่งนี้เป็นรายการที่ล้อมรอบระหว่าง `` '' และ ``} ''
ตัวแปรอาจได้รับการบอกกล่าวให้เป็นฟังก์ชันภายในโดยใช้คำสั่งภายในเครื่อง นี้ควรปรากฏเป็นคำสั่งแรกของฟังก์ชันและไวยากรณ์คือ
ตัวแปรท้องถิ่น -] ...
Local ถูกใช้เป็นคำสั่ง builtin
เมื่อตัวแปรถูกสร้างขึ้นภายในจะรับค่าเริ่มต้นและแฟล็กที่ส่งออกและอ่านได้จากตัวแปรที่มีชื่อเดียวกันในขอบเขตโดยรอบถ้ามี มิฉะนั้นตัวแปรจะถูกยกเลิกการเริ่มต้น เปลือกใช้การกำหนดขอบเขตแบบไดนามิกดังนั้นถ้าคุณสร้างตัวแปร x local เพื่อทำหน้าที่ f ซึ่งจะเรียกใช้ฟังก์ชัน g การอ้างอิงไปยังตัวแปร x ที่สร้างขึ้นภายใน g จะอ้างถึงตัวแปร x ที่ประกาศไว้ภายใน f ไม่ใช่ตัวแปรระดับโลกที่ชื่อ x .
พารามิเตอร์เฉพาะพิเศษที่สามารถทำได้ในท้องถิ่นคือ `` - '' `` `'`' `'` ``' `local 'ตัวเลือกใด ๆ ที่เปลือกที่มีการเปลี่ยนแปลงผ่านคำสั่งชุดภายในฟังก์ชันที่จะเรียกคืนไปยังค่าเดิมของพวกเขาเมื่อกลับมาทำงาน
ไวยากรณ์ของคำสั่ง return คือ
กลับ [exitstatus
จะยุติการทำงานในปัจจุบัน การส่งคืนถูกใช้เป็นคำสั่ง builtin
ตัวแปรและพารามิเตอร์
เปลือกเก็บชุดของพารามิเตอร์ พารามิเตอร์ที่แสดงด้วยชื่อเรียกว่าตัวแปร เมื่อเริ่มต้นเปลือกจะเปลี่ยนตัวแปรสภาพแวดล้อมทั้งหมดให้เป็นตัวแปรเชลล์ ตัวแปรใหม่สามารถตั้งค่าได้โดยใช้แบบฟอร์ม
ชื่อ = ค่า
ตัวแปรที่กำหนดโดยผู้ใช้จะต้องมีชื่อที่ประกอบไปด้วยตัวอักษรตัวเลขและเครื่องหมายขีดล่างเท่านั้นซึ่งส่วนแรกต้องไม่เป็นตัวเลข พารามิเตอร์สามารถระบุด้วยตัวเลขหรืออักขระพิเศษตามที่อธิบายด้านล่าง
พารามิเตอร์ตำแหน่ง
พารามิเตอร์ตำแหน่งเป็นพารามิเตอร์ที่ระบุด้วยตัวเลข (n> 0) เชลล์กำหนดค่าเริ่มต้นเหล่านี้เป็นค่าอาร์กิวเมนต์บรรทัดคำสั่งที่ทำตามชื่อของเชลล์สคริปต์ ชุดที่ตั้ง (1) ยังสามารถใช้เพื่อตั้งค่าหรือรีเซ็ตได้
พารามิเตอร์พิเศษ
พารามิเตอร์พิเศษคือพารามิเตอร์ที่แสดงด้วยอักขระพิเศษใด ๆ ต่อไปนี้ ค่าของพารามิเตอร์จะแสดงอยู่ถัดจากอักขระ
* * * *
ขยายไปยังพารามิเตอร์ตำแหน่งจากจุดเริ่มต้น เมื่อการขยายตัวเกิดขึ้นภายใน สตริงที่ ยกมาสองครั้งจะขยายเป็นฟิลด์เดียวที่มีค่าของพารามิเตอร์แต่ละตัวคั่นด้วยอักขระตัวแรกของตัวแปร IFS หรือโดย
แอท
ขยายไปยังพารามิเตอร์ตำแหน่งจากจุดเริ่มต้น เมื่อการขยายตัวเกิดขึ้นภายในเครื่องหมายคำพูดสองครั้งแต่ละพารามิเตอร์ตำแหน่งจะขยายเป็นอาร์กิวเมนต์ที่แยกต่างหาก ถ้าไม่มีพารามิเตอร์ตำแหน่งการขยายตัวของ @ สร้างอาร์กิวเมนต์เป็นศูนย์แม้ว่าจะมีการยกมาสองครั้งก็ตาม สิ่งนี้โดยทั่วไปหมายถึงตัวอย่างเช่นถ้า $ 1 เป็น `` abc '' และ $ 2 เป็น `` def ghi '' แล้ว Qq $ @ ขยายไปสองข้อขัดแย้ง:
abc def ghi
#
ขยายไปยังหมายเลขของพารามิเตอร์ตำแหน่ง
?
ขยายไปสู่สถานะทางออกของท่อล่าสุด
- (ยัติภังค์)
ขยายไปยังแฟล็กตัวเลือกปัจจุบัน (ชื่อตัวเลือกตัวอักษรเดียวที่รวมเป็นสตริง) ตามที่ระบุไว้ในคำร้องโดยคำสั่ง builtin ชุดหรือโดยปริยายโดยเปลือก
$
ขยายไปยัง ID กระบวนการของเชลล์ที่อ้างถึง Subshell ยังคงมีค่าเท่ากับ $ เป็นค่าเริ่มต้น
!
ขยายไปยัง ID กระบวนการของคำสั่งพื้นหลังล่าสุดที่ดำเนินการจากเชลล์ปัจจุบัน สำหรับกระบวนการวางท่อรหัสกระบวนการคือคำสั่งสุดท้ายของท่อ
0 (ศูนย์)
ขยายไปยังชื่อของเชลล์หรือเชลล์สคริปต์
การขยายคำ
ประโยคนี้อธิบายการขยายต่างๆที่ทำขึ้นในคำ ไม่ใช่การขยายทั้งหมดในทุกคำตามที่อธิบายไว้ในภายหลัง
การขยายตัวหน่วงการขยายพารามิเตอร์การแทนที่คำสั่งการขยายเลขคณิตและการลบคำพูดที่เกิดขึ้นภายในคำเดียวจะขยายไปยังฟิลด์เดียว เป็นเพียงการแบ่งฟิลด์หรือการขยายพา ธ ที่สามารถสร้างหลายฟิลด์จากคำเดียวได้ ข้อยกเว้นเดียวกับกฎนี้คือการขยายตัวของพารามิเตอร์พิเศษ @ ภายในเครื่องหมายคำพูดสองครั้งตามที่ได้อธิบายไว้ข้างต้น
ลำดับของการขยายคำคือ:
- การขยายตัวหนอนตัวขยายตัวพารามิเตอร์การทดแทนคำสั่งการขยายตัวทางคณิตศาสตร์ (ทั้งหมดนี้เกิดขึ้นพร้อมกัน)
- การแบ่งฟิลด์จะดำเนินการในฟิลด์ที่สร้างขึ้นโดยขั้นตอน (1) เว้นแต่ตัวแปร IFS จะเป็นค่าว่าง
- การขยายเส้นทาง (ยกเว้นการตั้งค่า - f )
- การลบคำแนะนำ
อักขระ $ ใช้เพื่อแนะนำการขยายพารามิเตอร์การแทนที่คำสั่งหรือการประเมินเลขคณิต
การขยายตัวหนอน (แทนที่ไดเรกทอรีบ้านของผู้ใช้)
คำที่ขึ้นต้นด้วยอักขระทิลเดอ (~) ที่ไม่มีการอ้างอิงจะอยู่ภายใต้การขยายไทิลด์ อักขระทั้งหมดที่มีเครื่องหมายทับ (/) หรือคำท้ายคำจะถือว่าเป็นชื่อผู้ใช้และถูกแทนที่ด้วยไดเรกทอรีภายในของผู้ใช้ หากชื่อผู้ใช้หายไป (เช่นเดียวกับใน ~ / foobar) เครื่องหมายทับจะถูกแทนที่ด้วยค่าของตัวแปร HOME (ไดเรกทอรีบ้านของผู้ใช้ปัจจุบัน)
การขยายค่าพารามิเตอร์
รูปแบบสำหรับการขยายพารามิเตอร์มีดังนี้:
ซึ่งนิพจน์ประกอบด้วยอักขระทั้งหมดจนกว่าจะมีการจับคู่ ``} '' '`` `` ``' 'ใด ๆ ที่ถูกหนีออกโดยเครื่องหมายทับขวาหรือภายในสตริงที่ยกมาและอักขระในการขยายตัวทางคณิตศาสตร์แบบฝังตัวการแทนที่คำสั่งและการขยายตัวแปรจะไม่ถูกตรวจสอบในการกำหนด จับคู่ ``} ''
รูปแบบที่ง่ายที่สุดสำหรับการขยายพารามิเตอร์คือ:
ค่าถ้ามีพารามิเตอร์ถูกแทนที่
ชื่อพารามิเตอร์หรือสัญลักษณ์สามารถใส่ไว้ในเครื่องหมายวงเล็บซึ่งเป็นตัวเลือกยกเว้นพารามิเตอร์ตำแหน่งที่มีมากกว่าหนึ่งหลักหรือเมื่อมีพารามิเตอร์ตามด้วยอักขระที่สามารถตีความได้ว่าเป็นส่วนหนึ่งของชื่อ หากมีการขยายพารามิเตอร์เกิดขึ้นภายในเครื่องหมายคำพูดคู่:
- การขยายเส้นทางจะไม่ดำเนินการกับผลลัพธ์ของการขยาย
- การแยกฟิลด์ไม่ได้ทำกับผลลัพธ์ของการขยายตัวยกเว้น @
นอกจากนี้ยังสามารถปรับเปลี่ยนพารามิเตอร์ได้โดยใช้รูปแบบใดรูปแบบหนึ่งดังต่อไปนี้
ใช้ค่าเริ่มต้น หากพารามิเตอร์ถูก unset หรือ null การขยายคำจะถูกแทนที่; มิฉะนั้นค่าของพารามิเตอร์จะถูกแทนที่
กำหนดค่าเริ่มต้น ถ้าพารามิเตอร์ถูก unset หรือ null การขยายคำจะถูกกำหนดให้กับพารามิเตอร์ ในทุกกรณีค่าสุดท้ายของพารามิเตอร์จะถูกแทนที่ สามารถกำหนดได้เฉพาะตัวแปรไม่ใช่พารามิเตอร์ตำแหน่งหรือพารามิเตอร์พิเศษเท่านั้น
ระบุข้อผิดพลาดถ้า Null หรือ Unset ถ้าพารามิเตอร์ถูก unset หรือ null การขยายคำ (หรือข้อความที่ระบุว่าไม่มีการตั้งค่าไว้ถ้า word ถูกละไว้) จะถูกเขียนลงในข้อผิดพลาดมาตรฐานและ shell ออกจากสถานะ exit มิฉะนั้นค่าของพารามิเตอร์จะถูกแทนที่ ปลั๊กอินแบบโต้ตอบไม่จำเป็นต้องออก
ใช้ค่าทางเลือก ถ้าพารามิเตอร์ถูก unset หรือ null, null จะถูกแทนที่; มิฉะนั้นการขยายคำจะถูกแทนที่
ในการขยายค่าพารามิเตอร์ที่แสดงไว้ก่อนหน้านี้ให้ใช้เครื่องหมายทวิภาคในผลลัพธ์รูปแบบในการทดสอบพารามิเตอร์ที่ไม่ได้ตั้งค่าหรือเป็นโมฆะ การละเลยผลของลำไส้ใหญ่ในการทดสอบสำหรับพารามิเตอร์ที่ถูกลบเท่านั้น
ความยาวสายอักขระ ความยาวในตัวอักษรของค่าของพารามิเตอร์
การขยายตัวพารามิเตอร์สี่ชนิดต่อไปนี้มีไว้สำหรับการประมวลผล substring ในแต่ละกรณีสัญกรณ์การจับคู่รูปแบบ (ดูรูปแบบเชลล์) แทนที่จะเป็นสัญกรณ์นิพจน์ปกติจะใช้ในการประเมินรูปแบบ ถ้าพารามิเตอร์เป็น * หรือ @ ผลลัพธ์ของการขยายคือไม่ระบุ การใส่สตริงการขยายพารามิเตอร์ทั้งหมดในเครื่องหมายคำพูดสองครั้งจะไม่ทำให้อักขระรูปแบบทั้งสี่แบบต่อไปนี้ถูกยกมาในขณะที่อักขระ quoting ภายในเครื่องหมายวงเล็บมีผลนี้
ลบรูปแบบ Suffix ที่เล็กที่สุด คำขยายเพื่อสร้างรูปแบบ การขยายพารามิเตอร์จะส่งผลให้พารามิเตอร์มีส่วนที่เล็กที่สุดของส่วนต่อท้ายที่ตรงกับรูปแบบที่ถูกลบ
ลบรูปแบบส่วนต่อท้ายที่ใหญ่ที่สุด คำขยายเพื่อสร้างรูปแบบ การขยายพารามิเตอร์จะส่งผลให้พารามิเตอร์มีส่วนที่ใหญ่ที่สุดของส่วนต่อท้ายที่ตรงกับรูปแบบที่ถูกลบ
ลบรูปแบบคำนำหน้าที่เล็กที่สุด คำขยายเพื่อสร้างรูปแบบ การขยายพารามิเตอร์จะส่งผลให้พารามิเตอร์มีส่วนที่เล็กที่สุดของคำนำหน้าที่ตรงกับรูปแบบที่ถูกลบ
ลบรูปแบบคำนำหน้าที่ใหญ่ที่สุด คำขยายเพื่อสร้างรูปแบบ การขยายพารามิเตอร์จะส่งผลให้พารามิเตอร์มีส่วนที่ใหญ่ที่สุดของคำนำหน้าตรงกับรูปแบบที่ถูกลบ
การทดแทนคำสั่ง
การแทนที่คำสั่ง จะช่วยให้เอาต์พุตของคำสั่งที่จะแทนที่ในตำแหน่งของชื่อคำสั่งเอง การแทนที่คำสั่งเกิดขึ้นเมื่อมีคำสั่งล้อมรอบดังนี้:
$ (คำสั่ง)
หรือ Po "backquoted" รุ่น Pc:
`command`
เชลล์ขยายการแทนที่คำสั่งด้วยการรันคำสั่งในสภาพแวดล้อมแบบย่อยและแทนที่คำสั่งแทนด้วยเอาต์พุตมาตรฐานของคำสั่งลบซีเควนซ์ของ
การขยายตัวทางคณิตศาสตร์
การขยายตัวทางคณิตศาสตร์เป็นกลไกในการประเมินการคำนวณเลขคณิตและการแทนค่าของมัน รูปแบบสำหรับการขยายตัวทางคณิตศาสตร์มีดังนี้:
$ ((expression))
นิพจน์จะถือว่าเหมือนกับอยู่ในเครื่องหมายคำพูดสองครั้งยกเว้นว่าคำพูดสองครั้งภายในนิพจน์ไม่ได้รับการปฏิบัติเป็นพิเศษ เปลือกขยายโทเค็นทั้งหมดในนิพจน์สำหรับการขยายพารามิเตอร์การแทนที่คำสั่งและการลบใบเสนอราคา
ถัดไปเปลือกถือว่าสิ่งนี้เป็นนิพจน์เลขคณิตและเปลี่ยนค่าของนิพจน์
การแบ่งพื้นที่ว่าง (การแยกสนาม)
หลังจากการขยายพารามิเตอร์การแทนที่คำสั่งและการขยายตัวทางคณิตศาสตร์เปลือกจะสแกนผลลัพธ์ของการขยายและการแทนที่ที่ไม่ได้เกิดขึ้นในคำพูดสองคำสำหรับการแบ่งฟิลด์และหลายฟิลด์อาจส่งผล
เปลือกถือว่าอักขระแต่ละตัวของ IFS เป็นตัวคั่นและใช้ตัวคั่นเพื่อแยกผลลัพธ์ของการขยายพารามิเตอร์และการแทนที่คำสั่งลงในฟิลด์
การขยายเส้นทาง (การสร้างชื่อแฟ้ม)
ถ้าไม่มีการตั้งค่าสถานะ - f การ สร้างชื่อไฟล์จะดำเนินการหลังจากการแยกคำแล้วเสร็จ คำแต่ละคำถูกมองว่าเป็นชุดรูปแบบโดยคั่นด้วยเครื่องหมายทับ กระบวนการขยายตัวจะแทนที่คำที่มีชื่อของไฟล์ที่มีอยู่ทั้งหมดที่มีชื่อสามารถสร้างได้โดยการแทนที่แต่ละรูปแบบด้วยสตริงที่ตรงกับรูปแบบที่ระบุ มีสองข้อ จำกัด ในเรื่องนี้ประการแรกรูปแบบไม่สามารถจับคู่สตริงที่มีเครื่องหมายทับและสองรูปแบบไม่สามารถจับคู่สตริงที่ขึ้นต้นด้วยช่วงยกเว้นอักขระตัวแรกของรูปแบบเป็นช่วง ส่วนถัดไปจะอธิบายถึงรูปแบบที่ใช้สำหรับการขยายเส้นทางทั้งสองแบบและคำสั่ง case (1)
รูปแบบเชลล์
รูปแบบประกอบด้วยอักขระปกติซึ่งตรงกับตัวเองและเมตาแท็ก ตัวเมตาดาต้าคือ ``! '' `` `` `? '' และ` `['' ตัวละครเหล่านี้สูญเสียความหมายพิเศษของพวกเขาหากพวกเขาถูกยกมา เมื่อใช้คำสั่งหรือตัวแปรแทนและเครื่องหมายดอลลาร์หรือเครื่องหมายคำพูดย้อนกลับจะไม่ถูกยกมาสองครั้งค่าของตัวแปรหรือผลลัพธ์ของคำสั่งจะได้รับการสแกนสำหรับอักขระเหล่านี้และจะกลายเป็นเมตาดาต้า
เครื่องหมายดอกจัน (`` * '') ตรงกับสตริงของอักขระใด ๆ เครื่องหมายคำถามตรงกับอักขระตัวใดตัวหนึ่ง วงเล็บซ้าย (`` ['') แนะนำคลาสอักขระ การสิ้นสุดของคลาสอักขระจะถูกระบุด้วย a (``) '') หากไม่มี `` '' '' หายไปแล้ว '' ['' ตรงกับ `` ['' แทนที่จะแนะนำคลาสตัวอักษร ชั้นอักขระตรงกับตัวอักษรใด ๆ ระหว่างวงเล็บเหลี่ยม ช่วงของอักขระอาจถูกระบุโดยใช้เครื่องหมายลบ ชั้นอักขระอาจเสริมด้วยการทำเครื่องหมายอัศเจรีย์ตัวอักษรตัวแรกของคลาสอักขระ
เมื่อต้องการรวม `` '' 'ในคลาสอักขระให้เป็นอักขระตัวแรกที่ปรากฏ (หลัง ``!' 'ถ้ามี) หากต้องการรวมเครื่องหมายลบให้ใช้อักขระตัวแรกและตัวสุดท้ายแทน
builtins
ส่วนนี้จะแสดงคำสั่ง builtin ซึ่งเป็น builtin เนื่องจากต้องดำเนินการบางอย่างที่ไม่สามารถดำเนินการได้ด้วยกระบวนการที่แยกต่างหาก นอกจากคำสั่งเหล่านี้แล้วยังมีคำสั่งอื่น ๆ อีกหลายคำที่อาจจะสร้างขึ้นสำหรับประสิทธิภาพ (เช่น echo 1)
:
คำสั่ง null ที่ส่งกลับค่าการออก 0 (true)
. ไฟล์
คำสั่งในแฟ้มที่ระบุจะอ่านและดำเนินการโดยเปลือก
นามแฝง [ name [ = สตริง ... ]]
ถ้ามีระบุ ชื่อ = เชลล์กำหนดชื่อนามแฝงด้วย สตริง ค่าหากมีการระบุ ชื่อ เพียงอย่างเดียวจะมีการพิมพ์ ชื่อ นามแฝง ด้วยอาร์กิวเมนต์ไม่มีตัวพิมพ์ นามแฝง พิมพ์ชื่อและค่าของนามแฝงที่กำหนดไว้ทั้งหมด (ดู unalias)
bg [ งาน] ...
ดำเนินการต่องานที่ระบุ (หรืองานปัจจุบันถ้าไม่มีงานที่ได้รับ) ในพื้นหลัง
อาร์กิวเมนต์คำสั่ง ...
ดำเนินการคำสั่ง builtin ที่ระบุ (ซึ่งจะเป็นประโยชน์เมื่อคุณมีฟังก์ชัน shell ที่มีชื่อเหมือนกับคำสั่ง builtin)
cd [ ไดเรกทอรี ]
เปลี่ยนเป็นไดเร็กทอรีที่ระบุ (ค่าดีฟอลต์ $ HOME) ถ้ารายการ CDPATH ปรากฏขึ้นในสภาวะแวดล้อมของคำสั่ง cd หรือตัวแปร CDPATH ของเชลล์ถูกตั้งค่าไว้และชื่อไดเรกทอรีไม่ได้เริ่มต้นด้วยเครื่องหมายทับแล้วไดเรกทอรีที่ระบุใน CDPATH จะถูกค้นหา สำหรับไดเร็กทอรีที่ระบุ รูปแบบของ CDPATH เหมือนกับของ PATH ใน ปลั๊กอิน แบบโต้ตอบคำสั่ง cd จะพิมพ์ชื่อของไดเร็กทอรีที่เปลี่ยนไปเป็นจริงถ้าแตกต่างจากชื่อที่ผู้ใช้ให้ ซึ่งอาจแตกต่างกันเนื่องจากกลไก CDPATH ใช้หรือเนื่องจากมีการข้ามลิงก์สัญลักษณ์
สตริง Eval ...
เชื่อมต่ออาร์กิวเมนต์ทั้งหมดกับช่องว่าง จากนั้นแยกวิเคราะห์และดำเนินการคำสั่งอีกครั้ง
exec [ อาร์กิวเมนต์คำสั่ง ... ]
ระบบจะแทนที่กระบวนการเชลล์ด้วยโปรแกรมที่ระบุ (ซึ่งจะต้องเป็นโปรแกรมจริงไม่ใช่ builtin หรือฟังก์ชันของเชลล์) การเปลี่ยนเส้นทางคำสั่ง exec จะถูกทำเครื่องหมายเป็นแบบถาวรเพื่อไม่ให้ยกเลิกคำสั่ง exec เมื่อเสร็จสิ้นคำสั่ง
ออก [ exitstatus ]
ยุติกระบวนการเชลล์ ถ้า exitstatus ได้รับมันจะใช้เป็นสถานะทางออกของเปลือก; มิฉะนั้นสถานะออกจากคำสั่งก่อนหน้านี้จะถูกใช้
ชื่อการ ส่งออก ...
ส่งออก -p
ชื่อที่ระบุจะถูกส่งออกเพื่อให้ปรากฏในสภาวะแวดล้อมของคำสั่งที่ตามมา วิธีเดียวที่จะยกเลิกการเอ็กซ์พอร์ตตัวแปรคือยกเลิกการตั้งค่า เปลือกช่วยให้ค่าของตัวแปรที่จะตั้งค่าในเวลาเดียวกันมันจะถูกส่งออกโดยการเขียน
ชื่อการส่งออก = ค่า
ไม่มีอาร์กิวเมนต์คำสั่ง export จะแสดงชื่อของตัวแปรที่ส่งออกทั้งหมด ด้วยตัวเลือก - p ที่ ระบุเอาต์พุตจะได้รับการจัดรูปแบบอย่างเหมาะสมสำหรับการใช้งานที่ไม่โต้ตอบ
fc [- อี เอดิเตอร์ ] [ ก่อน [ สุดท้าย ]]
fc -l [- ไม่มี ] [ ก่อน [ สุดท้าย ]]
fc -s [ เก่า = ใหม่ ] [ ก่อน ]
รายการตัวช่วยสร้าง fc หรือแก้ไขและดำเนินการใหม่คำสั่งที่ป้อนไว้ก่อนหน้านี้ไปยังเชลล์แบบโต้ตอบ
e-editor
ใช้ตัวแก้ไขชื่อโดย editor เพื่อแก้ไขคำสั่ง สตริงของตัวแก้ไขเป็นชื่อคำสั่งโดยขึ้นอยู่กับการค้นหาผ่านทางตัวแปร PATH ค่าในตัวแปร FCEDIT ใช้เป็นค่าดีฟอลต์เมื่อ - e ไม่ได้ระบุไว้ ถ้า FCEDIT เป็น null หรือ unset ค่าของตัวแปร EDITOR จะถูกใช้ ถ้า EDITOR เป็น null หรือ unset จะใช้ ed (1) เป็นตัวแก้ไข
-l (ell)
แสดงรายการคำสั่งแทนที่จะเรียกใช้ตัวแก้ไขในแฟ้มเหล่านั้น คำสั่งจะถูกเขียนขึ้นในลำดับที่ระบุด้วยตัวถูกดำเนินการครั้งแรกและครั้งสุดท้ายเมื่อได้รับผลกระทบจาก - r ด้วยคำสั่งแต่ละคำที่มีหมายเลขคำสั่ง
-n
ระงับหมายเลขคำสั่งเมื่อแสดงรายการด้วย -l
-r
กลับคำสั่งของคำสั่งที่ระบุไว้ (ด้วย - l หรือถูกแก้ไข (ไม่รวมถึง - l หรือ - s)
-s
Re-execute คำสั่งโดยไม่เรียกใช้ตัวแก้ไข
เป็นครั้งแรก
สุดท้าย
เลือกคำสั่งเพื่อแสดงรายการหรือแก้ไข จำนวนคำสั่งก่อนหน้าซึ่งสามารถเข้าถึงได้กำหนดโดยค่าของ ตัวแปร HISTSIZE ค่าของ first หรือ last หรือทั้งสองอย่างเป็นค่าใดค่าหนึ่งต่อไปนี้:
[+] จำนวน
จำนวนบวกที่แสดงหมายเลขคำสั่ง หมายเลขคำสั่งสามารถแสดงด้วยตัวเลือก - l
-จำนวน
หมายเลขทศนิยมที่เป็นลบซึ่งแทนคำสั่งที่ได้รับการดำเนินการจำนวนคำสั่งก่อนหน้านี้ ยกตัวอย่างเช่น -1 คือคำสั่งก่อนหน้านี้ทันที
เชือก
สตริงที่ระบุคำสั่งที่เพิ่งป้อนมากที่สุดที่ขึ้นต้นด้วยสตริงนั้น หากโอเปอรแรนดโอเปอรแรนด new = ไมไดระบุดวย - s รูปแบบสตริงของโอเปอรแรนดตัวแรกไมสามารถมีเครื่องหมาย
ตัวแปรสภาพแวดล้อมต่อไปนี้มีผลต่อการทำงานของ fc:
FCEDIT
ชื่อของบรรณาธิการที่จะใช้
HISTSIZE
จำนวนคำสั่งก่อนหน้าที่สามารถเข้าถึงได้
fg [ งาน ]
ย้ายงานที่ระบุหรืองานปัจจุบันไปที่เบื้องหน้า
getopts optstring var
คำสั่ง getopts POSIX เพื่อไม่ให้สับสนกับ Bell Labs ซึ่งเป็น getopt (1)
อาร์กิวเมนต์แรกควรเป็นชุดของตัวอักษรแต่ละตัวซึ่งอาจเป็นตัวเลือกตามด้วยเครื่องหมายจุดคู่เพื่อระบุว่าตัวเลือกต้องมีอาร์กิวเมนต์ ตัวแปรที่ระบุถูกตั้งค่าเป็นตัวเลือกการแยกวิเคราะห์
คำสั่ง getopts เลิกใช้อรรถประโยชน์ getopt (1) ที่เก่ากว่าเนื่องจากมีการจัดการอาร์กิวเมนต์ที่มีช่องว่าง
ตัวเลือก getopts อาจถูกใช้เพื่อขอรับตัวเลือกและอาร์กิวเมนต์จากรายการพารามิเตอร์ เมื่อเรียกใช้ getopts จะกำหนดค่าของตัวเลือกถัดไปจากสตริงตัวเลือกในรายการในตัวแปรเชลล์ที่ระบุโดย var และเป็นดัชนีในตัวแปร shell OPTIND เมื่อเปลือกถูกเรียกใช้ OPTIND จะเริ่มต้นเป็น 1 สำหรับแต่ละตัวเลือกที่ต้องการ อาร์กิวเมนต์ getopts builtin จะวางไว้ในตัวแปร shell OPTARG ถ้าตัวเลือกไม่ได้รับอนุญาตสำหรับใน optstring แล้ว OPTARG จะถูกยกเลิกการตั้งค่า
optstring เป็นสตริงของตัวเลือกตัวอักษรที่เป็นที่ยอมรับ ถ้ามีตัวอักษรตามด้วยเครื่องหมายจุดคู่ตัวเลือกนี้คาดว่าจะมีอาร์กิวเมนต์ซึ่งอาจหรือไม่สามารถแยกออกจากช่องว่างได้ ถ้าไม่พบตัวเลือกที่คาดไว้ getopts จะตั้งตัวแปร var เป็น ``? '' getopts จะยกเลิกการตั้งค่า OPTARG และเขียนผลลัพธ์เป็นข้อผิดพลาดมาตรฐาน โดยระบุลำไส้ใหญ่เป็นตัวอักษรตัวแรกของ optstring ข้อผิดพลาดทั้งหมดจะถูกละเลย
ค่าที่ไม่ใช่ศูนย์จะถูกส่งกลับเมื่อถึงตัวเลือกสุดท้าย getopts จะตั้งค่า var เป็นตัวเลือกพิเศษ `` - '' มิฉะนั้นมันจะตั้งค่าเป็น ``? ''
ส่วนรหัสต่อไปนี้แสดงวิธีที่หนึ่งอาจดำเนินการอาร์กิวเมนต์สำหรับคำสั่งที่สามารถใช้ตัวเลือก [a] และ [b] และตัวเลือก [c] ซึ่งต้องใช้อาร์กิวเมนต์
ขณะ getopts abc: f
ทำ
กรณี $ f ใน
a | b) flag = $ f ;;
c) carg = $ OPTARG ;;
\?) echo $ USAGE; ออก 1 ;;
esac
เสร็จแล้ว
shift `expr $ OPTIND - 1`
รหัสนี้จะยอมรับข้อใดข้อหนึ่งต่อไปนี้เป็นค่าที่เทียบเท่า:
ไฟล์ไฟล์ cmd-acarg
cmd -a-c ไฟล์ไฟล์ arg
cmd -carg -a file file
cmd -a -carg - ไฟล์ไฟล์
คำสั่ง hash -rv ...
เปลือกเก็บรักษาตารางแฮชซึ่งจดจำตำแหน่งของคำสั่ง โดยไม่มีข้อโต้แย้งคำสั่ง hash จะ พิมพ์เนื้อหาของตารางนี้ คอมเมนต์ที่ยังไม่ได้รับการตรวจสอบตั้งแต่คำสั่ง cd ล่าสุดถูกทำเครื่องหมายด้วยเครื่องหมายดอกจัน เป็นไปได้ที่รายการเหล่านี้จะไม่ถูกต้อง
ด้วยอาร์กิวเมนต์คำสั่ง hash จะลบคำสั่งที่ระบุออกจากตารางแฮช (เว้นแต่จะเป็นฟังก์ชัน) จากนั้นหาตำแหน่งเหล่านั้น เมื่อใช้ตัวเลือก - v แฮชจะพิมพ์ตำแหน่งของคำสั่งตามที่พบ ตัวเลือก - r ทำให้คำสั่ง hash ลบรายการทั้งหมดในตารางแฮชยกเว้นฟังก์ชั่น
jobid [ งาน ]
พิมพ์รหัสกระบวนการของกระบวนการในงาน ถ้าอาร์กิวเมนต์ งาน ถูกละเว้นงานปัจจุบันจะถูกใช้
งาน
คำสั่งนี้จะแสดงกระบวนการเบื้องหลังทั้งหมดซึ่งเป็นลูกของกระบวนการเชลล์ในปัจจุบัน
พิมพ์ไดเร็กทอรีปัจจุบัน คำสั่ง builtin อาจแตกต่างจากโปรแกรมที่มีชื่อเดียวกันเนื่องจากคำสั่ง builtin จะจดจำไดเร็กตอรี่ปัจจุบันแทนที่จะทำการ recomputing ใหม่ทุกครั้ง ทำให้เร็วขึ้น อย่างไรก็ตามถ้ามีการเปลี่ยนชื่อไดเร็กทอรีปัจจุบันเวอร์ชัน pwd ภายใน จะพิมพ์ชื่อเดิมของไดเร็กทอรี
อ่าน [- p prompt ] [- r ] ตัวแปร ...
พรอมต์จะพิมพ์ถ้าระบุตัวเลือก -p และอินพุตมาตรฐานคือเทอร์มินัล จากนั้นจะมีการอ่านบรรทัดจากอินพุตมาตรฐาน บรรทัดใหม่ท้ายจะถูกลบออกจากบรรทัดและบรรทัดจะแบ่งตามที่อธิบายไว้ในส่วนการแยกคำด้านบนและชิ้นส่วนจะถูกกำหนดให้กับตัวแปรตามลำดับ ต้องระบุตัวแปรอย่างน้อยหนึ่งรายการ ถ้ามีชิ้นมากกว่าตัวแปรชิ้นส่วนที่เหลือ (พร้อมกับตัวอักษรใน IFS ที่แยกพวกเขา) จะถูกกำหนดให้กับตัวแปรสุดท้าย หากมีตัวแปรมากกว่าชิ้นตัวแปรที่เหลือจะถูกกำหนดเป็นสตริงว่าง ตัว อ่านที่อ่านได้ จะระบุถึงความสำเร็จเว้นแต่ว่าจะพบ EOF บนอินพุตซึ่งในกรณีนี้จะส่งคืนความล้มเหลว
โดยค่าเริ่มต้นเว้นแต่ตัวเลือก - r จะระบุเครื่องหมายทับขวา \ "\ '" จะทำหน้าที่เป็นอักขระ Escape เพื่อให้ตัวอักษรต่อไปนี้ได้รับการปฏิบัติตามตัวอักษร ถ้าเครื่องหมายแบ็กสแลชเป็นบรรทัดใหม่เครื่องหมายแบ็กสแลชและบรรทัดใหม่จะถูกลบ
ชื่อ อ่านได้อย่างเดียว ...
อ่านได้อย่างเดียว -p
ชื่อที่ระบุจะถูกทำเครื่องหมายเป็นแบบอ่านอย่างเดียวดังนั้นจึงไม่สามารถแก้ไขหรือลบข้อมูลได้ในภายหลัง เปลือกช่วยให้ค่าของตัวแปรที่จะตั้งค่าในเวลาเดียวกันมันถูกทำเครื่องหมายว่า อ่านได้เฉพาะ โดยการเขียน
readonly name = value
อาร์กิวเมนต์ไม่มีคำสั่ง readonly แสดงชื่อของตัวแปรอ่านทั้งหมด ด้วยตัวเลือก - p ที่ ระบุเอาต์พุตจะได้รับการจัดรูปแบบอย่างเหมาะสมสำหรับการใช้งานที่ไม่โต้ตอบ
ตั้งค่า [{- options | ตัวเลือก + - arg ... ]
คำสั่ง set ทำหน้าที่แตกต่างกันสามแบบ
ไม่มีอาร์กิวเมนต์จะแสดงค่าของตัวแปรเชลล์ทั้งหมด
หากมีการกำหนดตัวเลือกจะกำหนดค่าสถานะของตัวเลือกที่ระบุหรือล้างข้อมูลตามที่อธิบายไว้ในส่วนที่เรียกว่า Sx Argument List Processing
การใช้คำสั่ง set ครั้งที่สามคือการตั้งค่าของพารามิเตอร์ตำแหน่งให้เป็นอาร์กิวเมนต์ที่ระบุ หากต้องการเปลี่ยนพารามิเตอร์ตำแหน่งโดยไม่ต้องเปลี่ยนตัวเลือกใด ๆ ให้ใช้ `` - '' เป็นอาร์กิวเมนต์แรกที่ตั้งค่า หากไม่มี args คำสั่ง set จะลบพารามิเตอร์ positional ทั้งหมด (เทียบเท่ากับการรัน `` shift $ # '')
ค่าตัวแปร
กำหนดค่าให้ตัวแปร (โดยทั่วไปจะเป็นการดีกว่าที่จะเขียนตัวแปร = value แทนที่จะใช้ setvar setvar มีวัตถุประสงค์เพื่อใช้ในฟังก์ชันที่กำหนดค่าให้กับตัวแปรที่มีชื่อเป็นพารามิเตอร์)
กะ [ n ]
Shift พารามิเตอร์ตำแหน่ง n ครั้ง การ เปลี่ยน จะตั้งค่าเป็น 1 ถึง 2 ดอลลาร์ มูลค่า 2 เหรียญ ต่อมูลค่า 3 เหรียญ และอื่น ๆ โดยลดค่าของ $ # เป็นชิ้นเดียว ถ้า n มีค่ามากกว่าจำนวนพารามิเตอร์ตำแหน่ง การเปลี่ยน จะออกข้อความแสดงข้อผิดพลาดและออกจากพร้อมกับสถานะการส่งกลับ 2
ครั้ง
พิมพ์จำนวนผู้ใช้และเวลาของระบบสำหรับเปลือกและสำหรับกระบวนการที่เรียกใช้จากเปลือก สถานะการส่งคืนคือ 0
สัญญาณ การดำเนินการ กับดัก ...
ทำให้เปลือกสามารถแยกวิเคราะห์และดำเนินการเมื่อได้รับสัญญาณใด ๆ ที่ระบุ สัญญาณจะระบุโดยหมายเลขสัญญาณ ถ้า สัญญาณ เป็น 0 การดำเนินการจะดำเนินการเมื่อเปลือกออก การกระทำ อาจเป็นโมฆะหรือ `` - '' อดีตทำให้สัญญาณที่ระบุจะถูกละเว้นและหลังทำให้เกิดการดำเนินการเริ่มต้นที่จะต้องดำเนินการ เมื่อเชลล์ปิดสแนป ช็อ ตจะรีเซ็ตสัญญาณที่ถูกขัง (แต่ไม่ได้ละเลย) ไปเป็นการกระทำเริ่มต้น คำสั่ง trap ไม่มีผลต่อสัญญาณที่ถูกละเลยเมื่อเข้าสู่ shell
พิมพ์ [ name ... ]
ตีความชื่อแต่ละคำสั่งและพิมพ์ความละเอียดของการค้นหาคำสั่ง ความละเอียดที่เป็นไปได้คือ: คำหลักของเชลล์นามแฝง เชลล์ builtin คำสั่งนามแฝงที่ติดตามและไม่พบ สำหรับนามแฝงนามแฝงการขยายจะพิมพ์; สำหรับคำสั่งและการติดตามแทนชื่อพา ธ ที่สมบูรณ์ของคำสั่งจะถูกพิมพ์ออกมา
ulimit [- H -S ] [- a -tfdscmlpn [ ค่า ]]
สอบถามหรือตั้งค่าขีด จำกัด ที่แข็งหรืออ่อนในกระบวนการหรือกำหนดวงเงินใหม่ ทางเลือกระหว่างขีด จำกัด ยาก (ซึ่งไม่มีกระบวนการใดได้รับอนุญาตให้ละเมิดและไม่อาจยกขึ้นได้เมื่อถูกลด) และขีด จำกัด อ่อน (ซึ่งเป็นเหตุให้กระบวนการที่จะถูกส่งสัญญาณ แต่ไม่จำเป็นต้องถูกฆ่าและอาจถูกยกขึ้น) ด้วย ธงเหล่านี้:
-H
ตั้งหรือสอบถามเกี่ยวกับข้อ จำกัด ยาก
-S
ตั้งหรือสอบถามเกี่ยวกับข้อ จำกัด อ่อน ถ้าไม่ระบุ - H หรือ - S จะมีการแสดงขีด จำกัด แบบอ่อนหรือตั้งค่าขีด จำกัด ไว้ หากระบุทั้งคู่จะมีผู้ชนะคนสุดท้าย
ขีด จำกัด ที่จะสอบปากคำหรือตั้งค่าจากนั้นจะถูกเลือกโดยการระบุค่าสถานะใด ๆ เหล่านี้:
-a
แสดงขีด จำกัด ปัจจุบันทั้งหมด
t-
แสดงหรือตั้งค่าขีด จำกัด เวลา CPU (เป็นวินาที)
-f
แสดงหรือตั้งค่าขีด จำกัด ของไฟล์ที่ใหญ่ที่สุดที่สามารถสร้างได้ (ในบล็อค 512 ไบต์)
-d
แสดงหรือตั้งค่าขีด จำกัด ของขนาดข้อมูลของกระบวนการ (เป็นกิโลไบต์)
-s
แสดงหรือตั้งค่าขีด จำกัด ของขนาดสแต็คของกระบวนการ (เป็นกิโลไบต์)
-c
แสดงหรือตั้งค่าขีด จำกัด ของขนาดการถ่ายโอนข้อมูลหลักที่ใหญ่ที่สุดที่สามารถผลิตได้ (ในบล็อค 512 ไบต์)
-m
แสดงหรือตั้งค่าขีด จำกัด ของหน่วยความจำกายภาพทั้งหมดที่สามารถใช้งานได้โดยกระบวนการ (เป็นกิโลไบต์)
-l
แสดงหรือตั้งค่าขีด จำกัด ว่าหน่วยความจำสามารถทำกระบวนการใดได้บ้างด้วย mlock (2) (เป็น กิโลไบต์ )
-p
แสดงหรือตั้งค่าขีด จำกัด เกี่ยวกับจำนวนกระบวนการที่ผู้ใช้รายนี้สามารถทำได้พร้อมกัน
-n
แสดงหรือตั้งค่าขีด จำกัด สำหรับไฟล์จำนวนที่สามารถเปิดได้พร้อมกัน
ถ้าไม่มีการระบุสิ่งเหล่านี้จะเป็นขีด จำกัด ของขนาดไฟล์ที่แสดงหรือตั้งค่า ถ้ามีการระบุค่าขีด จำกัด จะถูกกำหนดเป็นตัวเลขนั้น มิฉะนั้นวงเงินปัจจุบันจะปรากฏขึ้น
ขีด จำกัด ของกระบวนการโดยพลการสามารถแสดงหรือตั้งค่าได้โดยใช้ยูทิลิตี sysctl (8)
umask [ mask ]
ตั้งค่า umask (ดู umask (2)) เป็นค่าฐานแปดที่ระบุ ถ้าอาร์กิวเมนต์ถูกละเว้นค่า umask จะถูกพิมพ์ออกมา
unalias [- a ] [ ชื่อ ]
ถ้ามีการระบุ ชื่อ เปลือกเอาชื่อที่ ถ้า มีการ ระบุ - a จะลบชื่อแทนทั้งหมด
ยกเลิกการตั้ง ชื่อ ...
ตัวแปรและฟังก์ชันที่ระบุไม่มีการตั้งค่าและไม่ได้รับการรายงาน หากชื่อที่ระบุสอดคล้องกับทั้งตัวแปรและฟังก์ชันทั้งสองตัวแปรและฟังก์ชันจะถูกยกเลิกการทำ
รอ [ งาน ]
รอให้งานที่ระบุเสร็จสิ้นและส่งคืนสถานะทางออกของกระบวนการสุดท้ายในงาน ถ้าอาร์กิวเมนต์ถูกละเว้นรอให้งานทั้งหมดเสร็จสิ้นและส่งคืนสถานะการออกจากศูนย์
การแก้ไขบรรทัดคำสั่ง
เมื่อ sh ถูกใช้งานจากเทอร์มินัลคำสั่งปัจจุบันและประวัติคำสั่ง (ดู fc ใน Sx Builtins) สามารถแก้ไขได้โดยใช้การแก้ไขบรรทัดคำสั่ง vi-mode โหมดนี้ใช้คำสั่งที่อธิบายไว้ด้านล่างคล้ายกับส่วนย่อยที่อธิบายไว้ในหน้า man vi คำสั่ง `set '-o vi ช่วยให้สามารถแก้ไขรูปแบบ vi และใส่ sh ลงในโหมดแทรก vi เมื่อเปิดใช้งาน vi-mode sh สามารถสลับระหว่างโหมดแทรกและโหมดคำสั่ง บรรณาธิการไม่ได้อธิบายไว้เต็มในที่นี้ แต่จะอยู่ในเอกสารภายหลัง คล้ายกับ vi: การพิมพ์ Aq ESC จะโยนคุณเข้าสู่โหมดสั่งคำสั่ง VI การกดปุ่ม Aq return ขณะที่อยู่ในโหมดคำสั่งจะส่งผ่านสายไปยังเชลล์
สำคัญ: ใช้ คำสั่ง man ( % man ) เพื่อดูว่าคำสั่งถูกใช้อย่างไรในคอมพิวเตอร์เครื่องใดเครื่องหนึ่งของคุณ