เถ้า - ลินุกซ์สั่ง - คำสั่ง Unix

ชื่อ

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 ก็รู้จักคำสั่งง่ายๆ มิฉะนั้นอาจได้รับการยอมรับคำสั่งที่ซับซ้อนหรือสิ่งก่อสร้างพิเศษอื่น ๆ

คำสั่งง่ายๆ

หากมีการรู้จักคำสั่งง่ายๆเปลือกจะดำเนินการต่อไปนี้:

  1. คำนำหน้าของรูปแบบ `` name = value '' ถูกตัดออกและกำหนดให้กับสภาพแวดล้อมของคำสั่งง่ายๆ ผู้ให้บริการการเปลี่ยนเส้นทางและอาร์กิวเมนต์ของตน (ตามที่อธิบายไว้ด้านล่าง) จะถูกตัดออกและบันทึกไว้สำหรับการประมวลผล
  2. คำที่เหลือจะขยายตามที่อธิบายไว้ในส่วนที่เรียกว่า `` Expansions '' และคำแรกที่เหลือจะถือว่าเป็นชื่อคำสั่งและคำสั่งจะอยู่ คำที่เหลือจะถือว่าเป็นอาร์กิวเมนต์ของคำสั่ง ถ้าไม่มีชื่อคำสั่งเกิดขึ้น `` name = value '' การกำหนดตัวแปรที่ได้รับการยอมรับในข้อ 1 ส่งผลต่อเชลล์ปัจจุบัน
  3. การเปลี่ยนเส้นทางจะดำเนินการตามที่อธิบายไว้ในส่วนถัดไป

การเปลี่ยนเส้นทาง

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

[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 โดยใช้ชื่อนั้น ถ้าไม่พบคำสั่งที่สร้างขึ้นหนึ่งในสองสิ่งเกิดขึ้น:

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

Command Exit Status

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

คำสั่งที่ซับซ้อน

คำสั่งที่ซับซ้อนคือการรวมกันของคำสั่งง่ายๆกับตัวควบคุมหรือคำสงวนพร้อมกันในการสร้างคำสั่งที่มีขนาดใหญ่ขึ้น โดยทั่วไปคำสั่งคือหนึ่งในต่อไปนี้:

สถานะทางออกของคำสั่งคือคำสั่งง่ายๆที่ดำเนินการโดยคำสั่งสุดท้าย

ท่อ

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

รูปแบบของท่อคือ:

[!] command1 [| command2 ... ]

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

ถ้าท่อไม่ได้อยู่ในพื้นหลัง (อธิบายไว้ในภายหลัง) เชลล์รอคำสั่งทั้งหมดให้เสร็จสมบูรณ์

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

เนื่องจากการกำหนดค่าท่อของอินพุตมาตรฐานหรือเอาต์พุตมาตรฐานหรือทั้งสองอย่างเกิดขึ้นก่อนการเปลี่ยนเส้นทางคุณสามารถแก้ไขได้โดยการเปลี่ยนเส้นทาง ตัวอย่างเช่น:

$ command1 2> & 1 | Command2

ส่งออกทั้งมาตรฐานและข้อผิดพลาดมาตรฐานของ command1 ไปยังอินพุตมาตรฐานของ command2

A; หรือ terminator ทำให้รายการ AND-OR- ก่อนหน้า (อธิบายต่อไป) จะถูกดำเนินการตามลำดับ a และทำให้เกิดการทำงานแบบอะซิงโครนัสของรายการ AND-OR-ก่อนหน้า

โปรดสังเกตว่าแตกต่างจากเปลือกหอยอื่น ๆ แต่ละกระบวนการในท่อเป็นเด็กของเปลือก 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 หรือโดย ถ้าไม่มีการตั้งค่า IFS

แอท

ขยายไปยังพารามิเตอร์ตำแหน่งจากจุดเริ่มต้น เมื่อการขยายตัวเกิดขึ้นภายในเครื่องหมายคำพูดสองครั้งแต่ละพารามิเตอร์ตำแหน่งจะขยายเป็นอาร์กิวเมนต์ที่แยกต่างหาก ถ้าไม่มีพารามิเตอร์ตำแหน่งการขยายตัวของ @ สร้างอาร์กิวเมนต์เป็นศูนย์แม้ว่าจะมีการยกมาสองครั้งก็ตาม สิ่งนี้โดยทั่วไปหมายถึงตัวอย่างเช่นถ้า $ 1 เป็น `` abc '' และ $ 2 เป็น `` def ghi '' แล้ว Qq $ @ ขยายไปสองข้อขัดแย้ง:

abc def ghi

#

ขยายไปยังหมายเลขของพารามิเตอร์ตำแหน่ง

?

ขยายไปสู่สถานะทางออกของท่อล่าสุด

- (ยัติภังค์)

ขยายไปยังแฟล็กตัวเลือกปัจจุบัน (ชื่อตัวเลือกตัวอักษรเดียวที่รวมเป็นสตริง) ตามที่ระบุไว้ในคำร้องโดยคำสั่ง builtin ชุดหรือโดยปริยายโดยเปลือก

$

ขยายไปยัง ID กระบวนการของเชลล์ที่อ้างถึง Subshell ยังคงมีค่าเท่ากับ $ เป็นค่าเริ่มต้น

!

ขยายไปยัง ID กระบวนการของคำสั่งพื้นหลังล่าสุดที่ดำเนินการจากเชลล์ปัจจุบัน สำหรับกระบวนการวางท่อรหัสกระบวนการคือคำสั่งสุดท้ายของท่อ

0 (ศูนย์)

ขยายไปยังชื่อของเชลล์หรือเชลล์สคริปต์

การขยายคำ

ประโยคนี้อธิบายการขยายต่างๆที่ทำขึ้นในคำ ไม่ใช่การขยายทั้งหมดในทุกคำตามที่อธิบายไว้ในภายหลัง

การขยายตัวหน่วงการขยายพารามิเตอร์การแทนที่คำสั่งการขยายเลขคณิตและการลบคำพูดที่เกิดขึ้นภายในคำเดียวจะขยายไปยังฟิลด์เดียว เป็นเพียงการแบ่งฟิลด์หรือการขยายพา ธ ที่สามารถสร้างหลายฟิลด์จากคำเดียวได้ ข้อยกเว้นเดียวกับกฎนี้คือการขยายตัวของพารามิเตอร์พิเศษ @ ภายในเครื่องหมายคำพูดสองครั้งตามที่ได้อธิบายไว้ข้างต้น

ลำดับของการขยายคำคือ:

  1. การขยายตัวหนอนตัวขยายตัวพารามิเตอร์การทดแทนคำสั่งการขยายตัวทางคณิตศาสตร์ (ทั้งหมดนี้เกิดขึ้นพร้อมกัน)
  2. การแบ่งฟิลด์จะดำเนินการในฟิลด์ที่สร้างขึ้นโดยขั้นตอน (1) เว้นแต่ตัวแปร IFS จะเป็นค่าว่าง
  3. การขยายเส้นทาง (ยกเว้นการตั้งค่า - f )
  4. การลบคำแนะนำ

อักขระ $ ใช้เพื่อแนะนำการขยายพารามิเตอร์การแทนที่คำสั่งหรือการประเมินเลขคณิต

การขยายตัวหนอน (แทนที่ไดเรกทอรีบ้านของผู้ใช้)

คำที่ขึ้นต้นด้วยอักขระทิลเดอ (~) ที่ไม่มีการอ้างอิงจะอยู่ภายใต้การขยายไทิลด์ อักขระทั้งหมดที่มีเครื่องหมายทับ (/) หรือคำท้ายคำจะถือว่าเป็นชื่อผู้ใช้และถูกแทนที่ด้วยไดเรกทอรีภายในของผู้ใช้ หากชื่อผู้ใช้หายไป (เช่นเดียวกับใน ~ / foobar) เครื่องหมายทับจะถูกแทนที่ด้วยค่าของตัวแปร HOME (ไดเรกทอรีบ้านของผู้ใช้ปัจจุบัน)

การขยายค่าพารามิเตอร์

รูปแบบสำหรับการขยายพารามิเตอร์มีดังนี้:

ซึ่งนิพจน์ประกอบด้วยอักขระทั้งหมดจนกว่าจะมีการจับคู่ ``} '' '`` `` ``' 'ใด ๆ ที่ถูกหนีออกโดยเครื่องหมายทับขวาหรือภายในสตริงที่ยกมาและอักขระในการขยายตัวทางคณิตศาสตร์แบบฝังตัวการแทนที่คำสั่งและการขยายตัวแปรจะไม่ถูกตรวจสอบในการกำหนด จับคู่ ``} ''

รูปแบบที่ง่ายที่สุดสำหรับการขยายพารามิเตอร์คือ:

ค่าถ้ามีพารามิเตอร์ถูกแทนที่

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

  1. การขยายเส้นทางจะไม่ดำเนินการกับผลลัพธ์ของการขยาย
  2. การแยกฟิลด์ไม่ได้ทำกับผลลัพธ์ของการขยายตัวยกเว้น @

นอกจากนี้ยังสามารถปรับเปลี่ยนพารามิเตอร์ได้โดยใช้รูปแบบใดรูปแบบหนึ่งดังต่อไปนี้

ใช้ค่าเริ่มต้น หากพารามิเตอร์ถูก unset หรือ null การขยายคำจะถูกแทนที่; มิฉะนั้นค่าของพารามิเตอร์จะถูกแทนที่

กำหนดค่าเริ่มต้น ถ้าพารามิเตอร์ถูก unset หรือ null การขยายคำจะถูกกำหนดให้กับพารามิเตอร์ ในทุกกรณีค่าสุดท้ายของพารามิเตอร์จะถูกแทนที่ สามารถกำหนดได้เฉพาะตัวแปรไม่ใช่พารามิเตอร์ตำแหน่งหรือพารามิเตอร์พิเศษเท่านั้น

ระบุข้อผิดพลาดถ้า Null หรือ Unset ถ้าพารามิเตอร์ถูก unset หรือ null การขยายคำ (หรือข้อความที่ระบุว่าไม่มีการตั้งค่าไว้ถ้า word ถูกละไว้) จะถูกเขียนลงในข้อผิดพลาดมาตรฐานและ shell ออกจากสถานะ exit มิฉะนั้นค่าของพารามิเตอร์จะถูกแทนที่ ปลั๊กอินแบบโต้ตอบไม่จำเป็นต้องออก

ใช้ค่าทางเลือก ถ้าพารามิเตอร์ถูก unset หรือ null, null จะถูกแทนที่; มิฉะนั้นการขยายคำจะถูกแทนที่

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

ความยาวสายอักขระ ความยาวในตัวอักษรของค่าของพารามิเตอร์

การขยายตัวพารามิเตอร์สี่ชนิดต่อไปนี้มีไว้สำหรับการประมวลผล substring ในแต่ละกรณีสัญกรณ์การจับคู่รูปแบบ (ดูรูปแบบเชลล์) แทนที่จะเป็นสัญกรณ์นิพจน์ปกติจะใช้ในการประเมินรูปแบบ ถ้าพารามิเตอร์เป็น * หรือ @ ผลลัพธ์ของการขยายคือไม่ระบุ การใส่สตริงการขยายพารามิเตอร์ทั้งหมดในเครื่องหมายคำพูดสองครั้งจะไม่ทำให้อักขระรูปแบบทั้งสี่แบบต่อไปนี้ถูกยกมาในขณะที่อักขระ quoting ภายในเครื่องหมายวงเล็บมีผลนี้

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

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

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

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

การทดแทนคำสั่ง

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

$ (คำสั่ง)

หรือ Po "backquoted" รุ่น Pc:

`command`

เชลล์ขยายการแทนที่คำสั่งด้วยการรันคำสั่งในสภาพแวดล้อมแบบย่อยและแทนที่คำสั่งแทนด้วยเอาต์พุตมาตรฐานของคำสั่งลบซีเควนซ์ของ ใหม่อย่างน้อยหนึ่งบรรทัดที่ตอนท้ายของการทดแทน (ฝังตัว s ก่อนสิ้นสุดการแสดงผลจะไม่ถูกเอาออกอย่างไรก็ตามในระหว่างการแบ่งฟิลด์อาจมีการแปลเป็น s ขึ้นอยู่กับค่าของ IFS และ quoting ที่มีผล)

การขยายตัวทางคณิตศาสตร์

การขยายตัวทางคณิตศาสตร์เป็นกลไกในการประเมินการคำนวณเลขคณิตและการแทนค่าของมัน รูปแบบสำหรับการขยายตัวทางคณิตศาสตร์มีดังนี้:

$ ((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 ) เพื่อดูว่าคำสั่งถูกใช้อย่างไรในคอมพิวเตอร์เครื่องใดเครื่องหนึ่งของคุณ