Tro - Lệnh Linux - Lệnh Unix

TÊN

trình thông dịch lệnh sh ( shell )

TÓM TẮC

sh [- / + aCefnuvxIimqsVEbc ] [- o longname ] -words [ target ... ]

SỰ MIÊU TẢ

Sh là trình thông dịch lệnh chuẩn cho hệ thống. Phiên bản hiện tại của sh đang trong quá trình được thay đổi để phù hợp với thông số kỹ thuật POSIX 1003.2 và 1003.2a cho trình bao. Phiên bản này có nhiều tính năng mà làm cho nó xuất hiện tương tự trong một số khía cạnh cho vỏ Korn, nhưng nó không phải là một bản sao vỏ Korn (xem ksh (1)). Chỉ các tính năng được chỉ định bởi POSIX cộng với một vài phần mở rộng Berkeley, đang được tích hợp vào trình bao này. Chúng tôi mong đợi sự phù hợp POSIX theo thời gian 4.4 BSD được phát hành. Trang người đàn ông này không có ý định là một hướng dẫn hoặc một đặc tả đầy đủ của trình bao.

Tổng quan

Shell là một lệnh đọc các dòng từ một tệp hoặc thiết bị đầu cuối, diễn giải chúng và thường thực hiện các lệnh khác. Đây là chương trình đang chạy khi người dùng đăng nhập vào hệ thống (mặc dù người dùng có thể chọn một trình bao khác với lệnh chsh (1)). Shell thực hiện một ngôn ngữ có cấu trúc điều khiển luồng, một cơ sở macro cung cấp nhiều tính năng ngoài việc lưu trữ dữ liệu, cùng với các khả năng biên tập và biên tập được xây dựng sẵn. Nó kết hợp nhiều tính năng để hỗ trợ việc sử dụng tương tác và có lợi thế là ngôn ngữ diễn giải là phổ biến cho cả việc sử dụng tương tác và không tương tác (các kịch bản shell). Nghĩa là, các lệnh có thể được gõ trực tiếp vào shell đang chạy hoặc có thể được đưa vào một tệp và tệp có thể được thực hiện trực tiếp bởi trình bao.

Yêu cầu

Nếu không có args và nếu đầu vào tiêu chuẩn của vỏ được kết nối với một thiết bị đầu cuối (hoặc nếu cờ - i được thiết lập), và tùy chọn - c không có, vỏ được coi là một trình bao tương tác. Một trình vỏ tương tác thường nhắc nhở trước mỗi lệnh và xử lý các lỗi lập trình và lệnh khác nhau (như được mô tả bên dưới). Khi lần đầu tiên bắt đầu, shell kiểm tra đối số 0, và nếu nó bắt đầu bằng dấu gạch ngang `- 'thì shell cũng được coi là một shell đăng nhập. Điều này thường được thực hiện tự động bởi hệ thống khi người dùng lần đầu tiên đăng nhập. Một shell đăng nhập đầu tiên đọc lệnh từ các tập tin / etc / profile và .profile nếu chúng tồn tại. Nếu biến môi trường ENV được thiết lập trên mục nhập vào một shell, hoặc được đặt trong .profile của một shell đăng nhập, shell tiếp theo đọc các lệnh từ tệp có tên trong ENV Do đó, người dùng nên đặt các lệnh sẽ chỉ được thực hiện tại thời gian đăng nhập trong tệp .profile và các lệnh được thực hiện cho mọi trình bao bên trong tệp ENV . Để đặt biến ENV cho một số tệp, hãy đặt dòng sau vào tệp .profile của thư mục chính của bạn

ENV = $ HOME / .shinit; xuất ENV

thay thế cho `` .shinit '' bất kỳ tên tập tin nào bạn muốn. Vì tệp ENV được đọc cho mọi lời gọi của trình bao, bao gồm các kịch bản shell và các shell không tương tác, mô hình sau đây rất hữu ích cho việc hạn chế các lệnh trong tệp ENV đối với các lời gọi tương tác. Đặt các lệnh trong `` case '' và `` esac '' bên dưới (các lệnh này được mô tả sau):

case $ - in * i *)

# lệnh chỉ sử dụng tương tác

...

esac

Nếu các đối số dòng lệnh bên cạnh các tùy chọn đã được chỉ định, thì shell xử lý đối số đầu tiên là tên của một tệp để đọc lệnh (một kịch bản lệnh shell) và các đối số còn lại được đặt làm tham số vị trí của trình bao ($ 1) , 2 đô la, v.v.) Nếu không, trình bao sẽ đọc các lệnh từ đầu vào tiêu chuẩn của nó.

Xử lý danh sách đối số

Tất cả các tùy chọn chữ cái duy nhất có một tên tương ứng có thể được sử dụng như một đối số cho tùy chọn - o . Tên set - o được cung cấp bên cạnh tùy chọn chữ cái duy nhất trong phần mô tả bên dưới. Chỉ định dấu gạch ngang `` - '' sẽ bật tùy chọn, trong khi sử dụng dấu cộng `` + '' sẽ tắt tùy chọn. Các tùy chọn sau có thể được thiết lập từ dòng lệnh hoặc với bộ dựng sẵn (1) (được mô tả sau).

-a allexport

Xuất tất cả các biến được gán cho. (BỎ PHẢI cho 4.4alpha)

-c

Đọc các lệnh từ dòng lệnh. Không có lệnh nào được đọc từ đầu vào tiêu chuẩn.

-C noclobber

Không ghi đè lên các tệp hiện có bằng ``> '' (KHÔNG BỊ PHẢI cho 4.4alpha)

-e errexit

Nếu không tương tác, hãy thoát ngay lập tức nếu bất kỳ lệnh chưa được kiểm tra nào bị lỗi. Trạng thái thoát của lệnh được coi là được kiểm tra một cách rõ ràng nếu lệnh được sử dụng để kiểm soát nếu elif trong hoặc cho đến khi hoặc nếu lệnh là toán hạng bên trái của toán tử `` && '' hoặc `` || ''.

-f noglob

Tắt mở rộng tên đường dẫn .

-n noexec

Nếu không tương tác, hãy đọc các lệnh nhưng không thực thi chúng. Điều này rất hữu ích để kiểm tra cú pháp của các kịch bản lệnh shell.

-u danh từ

Viết một thông báo tới lỗi tiêu chuẩn khi cố gắng mở rộng một biến không được thiết lập và nếu trình bao không tương tác, hãy thoát ngay lập tức. (BỎ PHẢI cho 4.4alpha)

-v verbose

Shell ghi đầu vào của nó vào lỗi tiêu chuẩn khi nó được đọc. Hữu ích để gỡ lỗi.

-x xtrace

Viết mỗi lệnh vào lỗi chuẩn (trước bởi một `+ 'trước khi nó được thực hiện. Có ích để gỡ lỗi.

-q quietprofile

Nếu các tùy chọn - v hoặc - x đã được thiết lập, không áp dụng chúng khi đọc tệp khởi tạo, đây là / etc / profile .profile và tệp được chỉ định bởi biến môi trường ENV .

-Tôi bỏ qua

Bỏ qua EOF từ đầu vào khi tương tác.

-i tương tác

Buộc vỏ hoạt động tương tác.

-m màn hình

Bật điều khiển công việc (đặt tự động khi tương tác).

-s stdin

Đọc lệnh từ đầu vào tiêu chuẩn (đặt tự động nếu không có đối số tệp). Tùy chọn này không có hiệu lực khi được đặt sau khi trình bao đã bắt đầu chạy (tức là với tập hợp (1)).

-V vi

Bật trình soạn thảo dòng lệnh vi (1) được tích hợp sẵn (vô hiệu hóa - E nếu nó đã được thiết lập).

-E emacs

Bật trình soạn thảo dòng lệnh (1) emacs (vô hiệu hóa - V nếu nó đã được thiết lập).

-b thông báo

Bật thông báo không đồng bộ về hoàn thành công việc nền. (BỎ PHẢI cho 4.4alpha)

Cấu trúc Lexical

Shell đọc đầu vào theo các dòng từ một tệp và phân tách nó thành các từ ở khoảng trống (khoảng trống và các tab) và tại một số chuỗi ký tự đặc biệt cho trình bao được gọi là `` toán tử '' Có hai loại toán tử: các toán tử điều khiển và toán tử chuyển hướng (ý nghĩa của chúng được thảo luận sau). Sau đây là danh sách các toán tử:

"Các toán tử điều khiển:"

& && (); ;; | ||

"Nhà điều hành chuyển hướng:"

<>> | << >> <&> & << - <>

Báo giá

Trích dẫn được sử dụng để loại bỏ ý nghĩa đặc biệt của một số ký tự hoặc từ nhất định đối với trình bao, chẳng hạn như toán tử, khoảng trống hoặc từ khóa. Có ba loại trích dẫn: các dấu nháy đơn phù hợp, dấu ngoặc kép phù hợp và dấu gạch chéo ngược.

Dấu gạch chéo ngược

Dấu gạch chéo ngược duy trì nghĩa đen của ký tự sau, ngoại trừ dòng mới Aq. Một dấu gạch chéo ngược trước một dòng mới Aq được coi là một sự tiếp tục dòng.

Dấu nháy đơn

Việc bao gồm các ký tự trong các dấu ngoặc đơn duy trì nghĩa đen của tất cả các ký tự (trừ các dấu nháy đơn, làm cho nó không thể đặt dấu nháy đơn trong một chuỗi được trích dẫn một lần).

Dấu ngoặc kép

Các dấu gạch chéo ngược bên trong dấu ngoặc kép là lịch sử kỳ quặc, và chỉ trích dẫn các ký tự sau đây:

$ `\

Nếu không thì nó vẫn là chữ.

Từ dành riêng

Các từ dành riêng là các từ có ý nghĩa đặc biệt đối với trình bao và được nhận ra ở đầu dòng và sau toán tử điều khiển. Sau đây là các từ dành riêng:

! Ta elif Ta fi Ta trong khi Ta case

khác Ta cho Ta thì Ta {Ta}

do Ta thực hiện Ta cho đến Ta nếu Ta esac

Ý nghĩa của chúng được thảo luận sau.

Bí danh

Bí danh là tên và giá trị tương ứng được đặt bằng cách sử dụng lệnh xây dựng bí danh (1). Bất cứ khi nào một từ dành riêng có thể xảy ra (xem ở trên), và sau khi kiểm tra các từ dành riêng, vỏ sẽ kiểm tra từ để xem nó có khớp với một bí danh hay không. Nếu có, nó sẽ thay thế nó trong luồng đầu vào với giá trị của nó. Ví dụ, nếu có một bí danh được gọi là `` lf '' với giá trị `` ls -F '' thì đầu vào:

lf foobar

sẽ trở thành

ls -F foobar

Bí danh cung cấp một cách thuận tiện cho người dùng ngây thơ để tạo shorthands cho các lệnh mà không cần phải học cách tạo các hàm với các đối số. Chúng cũng có thể được sử dụng để tạo mã tối nghĩa lexically. Việc sử dụng này không được khuyến khích.

Lệnh

Trình bao diễn dịch các từ mà nó đọc theo một ngôn ngữ, đặc điểm kỹ thuật trong đó nằm ngoài phạm vi của trang người đàn ông này (tham khảo BNF trong tài liệu POSIX 1003.2). Về cơ bản, một dòng được đọc và nếu từ đầu tiên của dòng (hoặc sau một toán tử điều khiển) không phải là một từ dành riêng, thì trình vỏ đã nhận ra một lệnh đơn giản. Nếu không, một lệnh phức tạp hoặc một số cấu trúc đặc biệt khác có thể đã được nhận diện.

Lệnh đơn giản

Nếu một lệnh đơn giản đã được nhận diện, trình bao sẽ thực hiện các hành động sau:

  1. Các từ dẫn đầu của biểu mẫu `` name = value '' bị loại bỏ và gán cho môi trường của lệnh đơn giản. Các toán tử chuyển hướng và các đối số của chúng (như được mô tả bên dưới) được loại bỏ và lưu để xử lý.
  2. Các từ còn lại được mở rộng như được mô tả trong phần được gọi là `` Mở rộng '' và từ còn lại đầu tiên được coi là tên lệnh và lệnh được đặt. Các từ còn lại được coi là các đối số của lệnh. Nếu không có tên lệnh nào được tạo ra, thì các phép gán biến `` name = value '' được công nhận trong mục 1 sẽ ảnh hưởng đến trình bao hiện tại.
  3. Chuyển hướng được thực hiện như được mô tả trong phần tiếp theo.

Chuyển hướng

Chuyển hướng được sử dụng để thay đổi nơi một lệnh đọc đầu vào của nó hoặc gửi đầu ra của nó. Nói chung, chuyển hướng mở, đóng hoặc sao chép tham chiếu hiện tại sang tệp. Định dạng tổng thể được sử dụng để chuyển hướng là:

[n] tệp chuyển hướng

trong đó redir-op là một trong những toán tử chuyển hướng được đề cập trước đó. Sau đây là danh sách các chuyển hướng có thể có. Bq n là một số tùy chọn, như trong `3 '(không phải` Bq 3' có nghĩa là một bộ mô tả tập tin.

[n]> tệp

Chuyển hướng đầu ra tiêu chuẩn (hoặc n) thành tệp.

[n]> | tập tin

Tương tự, nhưng ghi đè tùy chọn - C.

[n] >> tệp

Nối đầu ra tiêu chuẩn (hoặc n) vào tệp.

[n]

Chuyển hướng đầu vào tiêu chuẩn (hoặc n) từ tệp.

[n1] <& n2

Đầu vào tiêu chuẩn trùng lặp (hoặc n1) từ bộ mô tả tệp n2.

[n] <& -

Đóng đầu vào tiêu chuẩn (hoặc n).

[n1]> & n2

Đầu ra tiêu chuẩn trùng lặp (hoặc n1) từ n2.

[n]> & -

Đóng đầu ra tiêu chuẩn (hoặc n).

[n] <> tệp

Mở tệp để đọc và ghi trên đầu vào tiêu chuẩn (hoặc n).

Chuyển hướng sau thường được gọi là `` tài liệu tại đây ''

[n] << dấu phân tách

ở đây-doc-văn bản ...

dấu phân cách

Tất cả văn bản trên các dòng liên tiếp lên đến dấu phân tách được lưu lại và có sẵn cho lệnh trên đầu vào tiêu chuẩn, hoặc bộ mô tả tập tin n nếu nó được chỉ định. Nếu dấu phân cách như được chỉ định trên dòng đầu tiên được trích dẫn, thì văn bản ở đây được xử lý theo nghĩa đen, nếu không văn bản phải được mở rộng tham số, thay thế lệnh và mở rộng số học (như được mô tả trong phần 'Mở rộng') 'Nếu toán tử là `` << -' 'thay vì `` <<' 'thì các tab dẫn đầu trong văn bản tài liệu ở đây sẽ bị loại bỏ.

Tìm kiếm và thực thi

Có ba loại lệnh: các hàm shell, các lệnh dựng sẵn và các chương trình bình thường - và lệnh được tìm kiếm (theo tên) theo thứ tự đó. Chúng được thực hiện theo một cách khác.

Khi một hàm hệ vỏ được thực hiện, tất cả các tham số vị trí vỏ (ngoại trừ $ 0, không thay đổi) được đặt thành các đối số của hàm hệ vỏ. Các biến được đặt rõ ràng trong môi trường của lệnh (bằng cách đặt các gán cho chúng trước tên hàm) được tạo cục bộ cho hàm và được đặt thành các giá trị đã cho. Sau đó, lệnh được đưa ra trong định nghĩa hàm được thực hiện. Các tham số vị trí được khôi phục về giá trị ban đầu của chúng khi lệnh hoàn thành. Tất cả điều này xảy ra trong trình bao hiện tại.

Shell nội trang được thực thi bên trong shell, mà không sinh ra một quá trình mới.

Nếu không, nếu tên lệnh không khớp với hàm hoặc nội trang dựng sẵn, lệnh sẽ được tìm kiếm như một chương trình bình thường trong hệ thống tệp (như được mô tả trong phần tiếp theo). Khi một chương trình bình thường được thực hiện, trình bao chạy chương trình, truyền các đối số và môi trường cho chương trình. Nếu chương trình không phải là một tệp thực thi bình thường (ví dụ, nếu nó không bắt đầu bằng "số ma thuật" có biểu diễn ASCII là "#!", Do đó thực hiện (2) trả về Er ENOEXEC sau đó) trình bao sẽ diễn giải chương trình trong một subshell. Shell con sẽ tự khởi động lại trong trường hợp này, do đó hiệu ứng sẽ như thể một shell mới được gọi để xử lý kịch bản shell đặc biệt, ngoại trừ vị trí của các lệnh băm nằm trong shell cha sẽ được ghi nhớ bởi đứa trẻ.

Lưu ý rằng các phiên bản trước của tài liệu này và mã nguồn chính nó một cách sai lạc và không thường xuyên tham chiếu đến một kịch bản lệnh shell mà không có một số ma thuật như là một "thủ tục trình bao".

Tìm kiếm đường dẫn

Khi định vị một lệnh, shell đầu tiên sẽ xem xét nó có hàm shell trong tên đó hay không. Sau đó, nó sẽ tìm một lệnh nội trang bằng tên đó. Nếu không tìm thấy lệnh nội trang, một trong hai điều sau sẽ xảy ra:

  1. Các tên lệnh có chứa dấu gạch chéo được thực hiện đơn giản mà không thực hiện bất kỳ tìm kiếm nào.
  2. Shell tìm kiếm mỗi mục trong PATH lần lượt cho lệnh. Giá trị của biến PATH phải là một loạt các mục được phân tách bằng dấu hai chấm. Mỗi mục bao gồm tên thư mục. Thư mục hiện tại có thể được chỉ định ngầm bởi một tên thư mục trống, hoặc một cách rõ ràng bởi một khoảng thời gian duy nhất.

Trạng thái thoát lệnh

Mỗi lệnh có một trạng thái thoát có thể ảnh hưởng đến hành vi của các lệnh shell khác. Các mô hình là một lệnh thoát với số không cho bình thường hoặc thành công, và khác không cho thất bại, lỗi, hoặc một dấu hiệu sai. Trang người dùng cho mỗi lệnh phải cho biết các mã thoát khác nhau và ý nghĩa của chúng. Ngoài ra, các lệnh nội trang trả về các mã thoát, cũng như một hàm hệ vỏ thực hiện.

Lệnh phức tạp

Lệnh phức tạp là sự kết hợp các lệnh đơn giản với các toán tử điều khiển hoặc các từ dành riêng, cùng nhau tạo ra một lệnh phức tạp lớn hơn. Nói chung, một lệnh là một trong những điều sau đây:

  • lệnh đơn giản
  • đường ống
  • danh sách hoặc danh sách hợp chất
  • lệnh ghép
  • chức năng độ nét

Trừ khi có quy định khác, trạng thái thoát của lệnh là lệnh cuối cùng được thực thi bởi lệnh.

Đường ống

Đường ống là một chuỗi gồm một hoặc nhiều lệnh được phân tách bởi toán tử điều khiển |. Đầu ra tiêu chuẩn của tất cả, nhưng lệnh cuối cùng được kết nối với đầu vào tiêu chuẩn của lệnh tiếp theo. Đầu ra tiêu chuẩn của lệnh cuối cùng được thừa hưởng từ trình bao, như thường lệ.

Định dạng cho một đường ống là:

[!] command1 [| command2 ...]

Đầu ra tiêu chuẩn của command1 được kết nối với đầu vào chuẩn của lệnh2. Đầu vào tiêu chuẩn, đầu ra tiêu chuẩn hoặc cả hai lệnh được coi là được chỉ định bởi đường ống trước khi bất kỳ chuyển hướng nào được chỉ định bởi các toán tử chuyển hướng là một phần của lệnh.

Nếu đường ống không ở chế độ nền (được thảo luận sau), thì vỏ chờ tất cả các lệnh hoàn thành.

Nếu từ dành riêng! không đứng trước đường ống, trạng thái thoát là trạng thái thoát của lệnh cuối cùng được chỉ định trong đường ống. Nếu không, trạng thái thoát là NOT hợp lý của trạng thái thoát của lệnh cuối cùng. Tức là, nếu lệnh cuối cùng trả về 0, trạng thái thoát là 1; nếu lệnh cuối cùng trả về lớn hơn 0, trạng thái thoát là không.

Do việc gán đường ống của đầu vào tiêu chuẩn hoặc đầu ra tiêu chuẩn hoặc cả hai diễn ra trước khi chuyển hướng, nó có thể được sửa đổi bằng cách chuyển hướng. Ví dụ:

$ command1 2> & 1 | command2

gửi cả đầu ra tiêu chuẩn và lỗi chuẩn của lệnh1 đến đầu vào chuẩn của lệnh2.

A; hoặc terminator làm cho danh sách AND-OR trước (được mô tả tiếp theo) được thực hiện tuần tự; a & gây ra việc thực thi không đồng bộ của danh sách AND-OR trước đó.

Lưu ý rằng không giống như một số shell khác, mỗi tiến trình trong pipeline là một child của shell gọi (trừ khi nó là shell, trong trường hợp nó thực thi trong shell hiện tại - nhưng bất kỳ hiệu ứng nào nó có trên môi trường bị xóa).

Lệnh nền -

Nếu một lệnh được kết thúc bởi toán tử điều khiển và (&), trình bao thực hiện lệnh không đồng bộ - tức là, trình bao sẽ không chờ lệnh kết thúc trước khi thực hiện lệnh tiếp theo.

Định dạng để chạy lệnh trong nền là:

command1 & [command2 & ...]

Nếu hệ vỏ không tương tác, đầu vào chuẩn của lệnh không đồng bộ được đặt thành / dev / null

Danh sách - Nói chung

Một danh sách là một dãy số không hoặc nhiều lệnh được phân tách bằng các dòng mới, dấu chấm phẩy hoặc ký hiệu và được tùy chọn chấm dứt bằng một trong ba ký tự này. Các lệnh trong một danh sách được thực hiện theo thứ tự chúng được viết. Nếu lệnh được theo sau bởi dấu và, trình bao bắt đầu lệnh và ngay lập tức tiếp tục lệnh tiếp theo; nếu không nó chờ lệnh chấm dứt trước khi tiếp tục lệnh tiếp theo.

Toán tử danh sách ngắn mạch

`` && '' và `` || '' là toán tử AND-OR. `` && '' thực hiện lệnh đầu tiên, và sau đó thực hiện lệnh thứ hai, tức là trạng thái thoát của lệnh đầu tiên là số không. `` || '' là tương tự, nhưng thực hiện lệnh thứ hai iff trạng thái thoát của lệnh đầu tiên là nonzero. `` && '' và `` || '' đều có cùng mức ưu tiên.

Flow-Control Constructs - nếu, trong khi, cho, trường hợp

Cú pháp của lệnh if là

nếu danh sách
sau đó liệt kê
[danh sách elif
sau đó liệt kê] ...
[danh sách khác]
fi

Cú pháp của lệnh while là

trong khi danh sách
lập danh sách
làm xong

Hai danh sách được thực hiện nhiều lần trong khi trạng thái thoát của danh sách đầu tiên là số không. Lệnh cho đến tương tự, nhưng có từ đó cho đến khi thay đổi, cho phép nó lặp lại cho đến khi trạng thái thoát của danh sách đầu tiên bằng không.

Cú pháp của lệnh for là

cho biến trong từ ...
lập danh sách
làm xong

Các từ được mở rộng, và sau đó danh sách được thực hiện nhiều lần với biến được đặt thành từng từ. làm và thực hiện có thể được thay thế bằng `` {'' và ``} ''

Cú pháp của lệnh break và continue là

break [num]
tiếp tục [num]

Phá vỡ chấm dứt số trong cùng cho hoặc trong khi vòng lặp. Tiếp tục tiếp tục với lần lặp tiếp theo của vòng lặp trong cùng. Chúng được thực hiện như các lệnh nội trang.

Cú pháp của lệnh case là

trường hợp từ trong
mẫu) ;;;
...
esac

Mẫu có thể thực sự là một hoặc nhiều mẫu (xem Các mẫu Shell được mô tả sau), được phân tách bằng ký tự `` ''.

Nhóm các lệnh cùng nhau

Các lệnh có thể được nhóm lại bằng cách viết

(danh sách)

hoặc là

{ danh sách;

Việc đầu tiên trong số này thực hiện các lệnh trong một subshell. Các lệnh nội trang được nhóm thành một (danh sách) sẽ không ảnh hưởng đến trình bao hiện tại. Các hình thức thứ hai không ngã ba vỏ khác như vậy là hơi hiệu quả hơn. Việc nhóm các lệnh với nhau theo cách này cho phép bạn chuyển hướng đầu ra của chúng như thể chúng là một chương trình:

{printf hello; printf world \ n ";}> lời chào

Chức năng

Cú pháp của định nghĩa hàm là

lệnh name ()

Định nghĩa hàm là một câu lệnh thực thi; khi được thực hiện, nó sẽ cài đặt một hàm có tên và trả về trạng thái thoát của số không. Lệnh này thường là một danh sách nằm giữa `` {'' và ``} ''

Các biến có thể được khai báo là cục bộ cho một hàm bằng cách sử dụng một lệnh cục bộ. Điều này sẽ xuất hiện dưới dạng câu lệnh đầu tiên của hàm và cú pháp là

local [variable | -] ...

Địa phương được thực hiện như một lệnh nội trang.

Khi một biến được tạo cục bộ, nó kế thừa giá trị ban đầu và cờ được xuất và chỉ đọc từ biến có cùng tên trong phạm vi xung quanh, nếu có. Nếu không, biến ban đầu không được đặt. Hệ vỏ sử dụng phạm vi động, để nếu bạn biến biến x thành địa phương thành hàm f, sau đó gọi hàm g, tham chiếu đến biến x được tạo bên trong g sẽ tham chiếu biến x được khai báo bên trong f, chứ không phải biến toàn cầu có tên x .

Tham số đặc biệt duy nhất có thể được thực hiện cục bộ là `` - '' Đặt `` - '' địa phương bất kỳ tùy chọn trình bao nào được thay đổi thông qua lệnh set bên trong hàm để được khôi phục về giá trị ban đầu của chúng khi hàm trả về.

Cú pháp của lệnh return là

trở về [exitstatus

Nó chấm dứt chức năng hiện đang thực hiện. Trả về được thực hiện như một lệnh nội trang.

Các biến và tham số

Shell duy trì một tập hợp các tham số. Một tham số được biểu thị bằng một tên được gọi là một biến. Khi khởi động, trình bao biến tất cả các biến môi trường thành các biến shell. Có thể đặt các biến mới bằng cách sử dụng biểu mẫu

name = value

Các biến do người dùng đặt phải có tên chỉ bao gồm chữ cái, chữ số và dấu gạch dưới - tên đầu tiên không được là số. Một tham số cũng có thể được biểu thị bằng một số hoặc một ký tự đặc biệt như được giải thích dưới đây.

Tham số vị trí

Tham số vị trí là một tham số được biểu thị bằng một số (n> 0). Shell đặt các giá trị ban đầu này thành các giá trị của các đối số dòng lệnh của nó theo tên của kịch bản lệnh shell. Bộ dựng sẵn (1) cũng có thể được sử dụng để đặt hoặc đặt lại chúng.

Thông số đặc biệt

Tham số đặc biệt là tham số được biểu thị bằng một trong các ký tự đặc biệt sau. Giá trị của tham số được liệt kê bên cạnh ký tự của nó.

*

Mở rộng đến các tham số vị trí, bắt đầu từ một tham số. Khi mở rộng xảy ra trong một chuỗi kép được trích dẫn, nó mở rộng đến một trường đơn lẻ với giá trị của mỗi tham số được phân cách bằng ký tự đầu tiên của biến IFS , hoặc bởi một nếu IFS không được đặt.

@

Mở rộng đến các tham số vị trí, bắt đầu từ một tham số. Khi mở rộng xảy ra trong dấu ngoặc kép, mỗi tham số vị trí mở rộng dưới dạng đối số riêng biệt. Nếu không có tham số vị trí, việc mở rộng @ tạo ra các đối số bằng không, ngay cả khi @ được trích dẫn kép. Điều này về cơ bản có nghĩa là, ví dụ, nếu $ 1 là `` abc '' và $ 2 là `` def ghi '' thì Qq $ @ mở rộng thành hai đối số:

abc def write

#

Mở rộng đến số tham số vị trí.

?

Mở rộng đến trạng thái thoát của đường ống mới nhất.

- (Dấu gạch nối.)

Mở rộng đến các cờ tùy chọn hiện tại (các tên tùy chọn một chữ cái được nối vào một chuỗi) như được chỉ định trên lời gọi, bởi lệnh nội trang đã thiết lập, hoặc ngầm bởi trình bao.

$

Mở rộng đến ID tiến trình của trình bao được gọi. Một subshell giữ nguyên giá trị của $ là cha mẹ của nó.

!

Mở rộng đến ID tiến trình của lệnh nền gần đây nhất được thực thi từ trình bao hiện tại. Đối với một đường ống, ID tiến trình là lệnh của lệnh cuối cùng trong đường ống.

0 (Zero.)

Mở rộng đến tên của shell hoặc shell script.

Mở rộng từ

Mệnh đề này mô tả các mở rộng khác nhau được thực hiện trên các từ. Không phải tất cả các mở rộng đều được thực hiện trên mọi từ, như được giải thích sau.

Khai triển dấu ngã, mở rộng tham số, thay thế lệnh, mở rộng số học và xóa bỏ trích dẫn xảy ra trong một từ đơn lẻ mở rộng đến một trường đơn lẻ. Nó chỉ là phân tách trường hoặc mở rộng tên đường dẫn mà có thể tạo nhiều trường từ một từ duy nhất. Ngoại lệ duy nhất cho quy tắc này là việc mở rộng tham số đặc biệt @ trong dấu ngoặc kép, như được mô tả ở trên.

Thứ tự mở rộng từ là:

  1. Mở rộng dấu ngã, Mở rộng tham số, Thay thế lệnh, Mở rộng số học (tất cả những điều này xảy ra cùng một lúc).
  2. Phân tách trường được thực hiện trên các trường được tạo ra bởi bước (1) trừ khi biến IFS là null.
  3. Mở rộng tên đường dẫn (trừ khi set - f có hiệu lực).
  4. Trích dẫn xóa.

Ký tự $ được sử dụng để giới thiệu mở rộng tham số, thay thế lệnh hoặc đánh giá số học.

Mở rộng dấu ngã (thay thế thư mục chính của người dùng)

Một từ bắt đầu bằng ký tự dấu ngã chưa được trích dẫn (~) sẽ bị mở rộng dấu ngã. Tất cả các ký tự lên đến dấu gạch chéo (/) hoặc cuối của từ được coi là tên người dùng và được thay thế bằng thư mục chính của người dùng. Nếu tên người dùng bị thiếu (như trong ~ / foobar) dấu ngã được thay thế bằng giá trị của biến HOME (thư mục chính của người dùng hiện tại).

Mở rộng tham số

Định dạng để mở rộng tham số như sau:

trong đó biểu thức bao gồm tất cả các ký tự cho đến khi ``} '' Bất kỳ ``} '' thoát bằng dấu gạch chéo ngược hoặc trong chuỗi được trích dẫn và các ký tự trong phần mở rộng số học được nhúng, thay thế lệnh và mở rộng biến, không được kiểm tra trong việc xác định khớp ``} ''

Dạng đơn giản nhất để mở rộng tham số là:

Giá trị, nếu có, của tham số được thay thế.

Tên hoặc ký hiệu tham số có thể được đặt trong dấu ngoặc, không bắt buộc, ngoại trừ các tham số vị trí có nhiều hơn một chữ số hoặc khi tham số được theo sau bởi một ký tự có thể được hiểu là một phần của tên. Nếu mở rộng tham số xảy ra bên trong dấu ngoặc kép:

  1. Mở rộng tên đường dẫn không được thực hiện trên các kết quả của việc mở rộng.
  2. Phân tách trường không được thực hiện trên kết quả của việc mở rộng, ngoại trừ @.

Ngoài ra, việc mở rộng tham số có thể được sửa đổi bằng cách sử dụng một trong các định dạng sau.

Sử dụng giá trị mặc định. Nếu tham số không được đặt hoặc null, việc mở rộng từ được thay thế; nếu không, giá trị của tham số được thay thế.

Gán Giá trị Mặc định. Nếu tham số không được đặt hoặc null, thì việc mở rộng từ được gán cho tham số. Trong mọi trường hợp, giá trị cuối cùng của tham số được thay thế. Chỉ các biến, không tham số vị trí hoặc tham số đặc biệt, có thể được chỉ định theo cách này.

Chỉ ra Lỗi nếu Null hoặc Unset. Nếu tham số không được đặt hoặc null, việc mở rộng từ (hoặc một thông báo cho biết nó không được đặt nếu từ bị bỏ qua) được ghi vào lỗi tiêu chuẩn và trình bao thoát với trạng thái thoát không phải. Nếu không, giá trị của tham số được thay thế. Một trình vỏ tương tác không cần thoát.

Sử dụng Giá trị thay thế. Nếu tham số là unset hoặc null, null được thay thế; nếu không, việc mở rộng từ được thay thế.

Trong các mở rộng tham số được hiển thị trước đó, việc sử dụng dấu hai chấm trong kết quả định dạng trong một thử nghiệm cho một tham số không được đặt hoặc null; thiếu sót của kết quả đại tràng trong một thử nghiệm cho một tham số mà chỉ là không được đặt.

Chiều dài chuỗi. Độ dài ký tự của giá trị của tham số.

Bốn loại mở rộng tham số sau đây cung cấp cho việc xử lý chuỗi con. Trong mỗi trường hợp, ký hiệu khớp mẫu (xem Mẫu vỏ), thay vì ký hiệu cụm từ thông dụng, được sử dụng để đánh giá các mẫu. Nếu tham số là * hoặc @, kết quả của việc mở rộng là không xác định. Việc bao bọc chuỗi mở rộng tham số đầy đủ trong dấu ngoặc kép không gây ra bốn loại ký tự mẫu sau đây được trích dẫn, trong khi các ký tự trích dẫn trong dấu ngoặc có hiệu ứng này.

Loại bỏ mẫu Suffix nhỏ nhất. Từ được mở rộng để tạo ra một mẫu. Việc mở rộng tham số sau đó dẫn đến tham số, với phần nhỏ nhất của hậu tố phù hợp với mẫu bị xóa.

Loại bỏ mẫu Suffix lớn nhất. Từ được mở rộng để tạo ra một mẫu. Việc mở rộng tham số sau đó dẫn đến tham số, với phần lớn nhất của hậu tố phù hợp với mẫu bị xóa.

Loại bỏ mẫu tiền tố nhỏ nhất. Từ được mở rộng để tạo ra một mẫu. Việc mở rộng tham số sau đó dẫn đến tham số, với phần nhỏ nhất của tiền tố khớp với mẫu bị xóa.

Loại bỏ mẫu tiền tố lớn nhất. Từ được mở rộng để tạo ra một mẫu. Việc mở rộng tham số sau đó dẫn đến tham số, với phần lớn nhất của tiền tố khớp với mẫu bị xóa.

Lệnh thay thế

Lệnh thay thế cho phép đầu ra của một lệnh được thay thế thay cho tên của lệnh. Lệnh thay thế xảy ra khi lệnh được kèm theo như sau:

$ (lệnh)

hoặc Po `` backquoted '' phiên bản Pc:

`lệnh`

Shell mở rộng lệnh thay thế bằng cách thực thi lệnh trong môi trường subshell và thay thế lệnh thay thế bằng đầu ra tiêu chuẩn của lệnh, loại bỏ các chuỗi của một hoặc nhiều s ở cuối thay thế. (Nhúng s trước khi kết thúc đầu ra không được loại bỏ; tuy nhiên, trong khi tách trường, chúng có thể được dịch thành , tùy thuộc vào giá trị của IFS và trích dẫn có hiệu lực.)

Mở rộng số học

Mở rộng số học cung cấp một cơ chế để đánh giá một biểu thức số học và thay thế giá trị của nó. Định dạng để mở rộng số học như sau:

$ ((biểu thức))

Biểu thức được xử lý như thể nó có trong dấu ngoặc kép, ngoại trừ một dấu ngoặc kép bên trong biểu thức không được xử lý đặc biệt. Shell mở rộng tất cả các thẻ trong biểu thức cho việc mở rộng tham số, thay thế lệnh và trích xuất báo giá.

Tiếp theo, trình xử lý coi đây là biểu thức số học và thay thế giá trị của biểu thức.

Phân tách không gian trắng (Phân tách trường)

Sau khi mở rộng tham số, thay thế lệnh và mở rộng số học, vỏ sẽ quét kết quả mở rộng và các thay thế không xảy ra trong ngoặc kép để tách trường và nhiều trường có thể xảy ra.

Shell xử lý từng ký tự của IFS như một dấu phân cách và sử dụng các dấu tách để phân tách các kết quả của việc mở rộng tham số và thay thế lệnh vào các trường.

Mở rộng tên đường dẫn (Tạo tên tệp)

Trừ khi cờ - f được đặt, quá trình tạo tên tệp được thực hiện sau khi tách từ được hoàn tất. Mỗi từ được xem như một loạt các mẫu, được phân cách bằng dấu gạch chéo. Quá trình mở rộng thay thế từ bằng tên của tất cả các tệp hiện có có tên được tạo bằng cách thay thế mỗi mẫu bằng một chuỗi khớp với mẫu được chỉ định. Có hai hạn chế về điều này: đầu tiên, một mẫu không thể khớp với một chuỗi có dấu gạch chéo và thứ hai, một mẫu không thể khớp với chuỗi bắt đầu bằng dấu chấm trừ khi ký tự đầu tiên của mẫu là dấu chấm. Phần tiếp theo mô tả các mẫu được sử dụng cho cả hai mở rộng Pathname và lệnh case (1).

Mẫu vỏ

Một mẫu bao gồm các ký tự bình thường, phù hợp với chính chúng và các ký tự meta. Các ký tự meta là ``! '' `` * '' ``? '' Và `` ['' Những ký tự này mất ý nghĩa đặc biệt của chúng nếu chúng được trích dẫn. Khi lệnh hoặc thay thế biến được thực hiện và dấu đô la hoặc dấu ngoặc kép không được trích dẫn kép, giá trị của biến hoặc đầu ra của lệnh được quét cho các ký tự này và chúng được chuyển thành siêu ký tự.

Dấu sao (`` * '') khớp với bất kỳ chuỗi ký tự nào. Dấu chấm hỏi khớp với bất kỳ ký tự đơn nào. Một khung bên trái (`` ['') giới thiệu một lớp nhân vật. Sự kết thúc của lớp ký tự được biểu thị bằng dấu (``] '') nếu thiếu ``] '' thì `` ['' khớp với `` ['' thay vì giới thiệu một lớp ký tự. Một lớp nhân vật khớp với bất kỳ ký tự nào giữa các dấu ngoặc vuông. Có thể chỉ định một loạt các ký tự bằng dấu trừ. Lớp nhân vật có thể được bổ sung bằng cách tạo dấu chấm than là ký tự đầu tiên của lớp nhân vật.

Để bao gồm một ``] '' trong một lớp nhân vật, làm cho nó là ký tự đầu tiên được liệt kê (sau khi ``! '' Nếu có). Để bao gồm dấu trừ, hãy đặt ký tự đầu tiên hoặc cuối cùng được liệt kê

Nội trang

Phần này liệt kê các lệnh nội trang dựng sẵn vì chúng cần thực hiện một số thao tác không thể thực hiện được bằng một tiến trình riêng biệt. Thêm vào đó, có một số lệnh khác có thể được xây dựng cho hiệu quả (ví dụ echo 1).

:

Một lệnh null trả về giá trị thoát 0 (true).

. tập tin

Các lệnh trong tệp được chỉ định được đọc và thi hành bởi trình bao.

alias [ name [ = string ... ]]

Nếu name = string được chỉ định, shell định nghĩa tên bí danh với chuỗi giá trị Nếu chỉ tên được chỉ định, giá trị của tên bí danh được in. Không có đối số, bí danh được xây dựng in các tên và giá trị của tất cả các bí danh đã xác định (xem unalias)

bg [ công việc] ...

Tiếp tục các công việc được chỉ định (hoặc công việc hiện tại nếu không có công việc nào được cung cấp) trong nền.

lệnh lệnh arg ...

Thực thi lệnh nội trang đã chỉ định. (Điều này rất hữu ích khi bạn có một hàm shell có cùng tên với lệnh nội trang.)

cd [ thư mục ]

Chuyển sang thư mục được chỉ định (mặc định $ HOME) Nếu một mục nhập cho CDPATH xuất hiện trong môi trường của lệnh cd hoặc biến shell CDPATH được đặt và tên thư mục không bắt đầu bằng dấu gạch chéo thì các thư mục được liệt kê trong CDPATH sẽ được tìm kiếm cho thư mục được chỉ định. Định dạng của CDPATH giống như của PATH Trong một trình bao tương tác, lệnh cd sẽ in ra tên của thư mục mà nó thực sự chuyển sang nếu nó khác với tên mà người dùng đã cung cấp. Đây có thể là khác nhau vì cơ chế CDPATH đã được sử dụng hoặc bởi vì một liên kết tượng trưng đã được vượt qua.

eval chuỗi ...

Nối tất cả các đối số với dấu cách. Sau đó, phân tích lại và thực hiện lệnh.

exec [ command arg ... ]

Trừ khi lệnh được bỏ qua, quá trình shell được thay thế bằng chương trình được chỉ định (mà phải là một chương trình thực, không phải là một hàm dựng sẵn hoặc hàm shell). Bất kỳ chuyển hướng nào trên lệnh exec được đánh dấu là vĩnh viễn, để chúng không được hoàn tác khi lệnh exec kết thúc.

thoát [ exitstatus ]

Chấm dứt quá trình vỏ. Nếu exitstatus được cho, nó được sử dụng như trạng thái thoát của vỏ; nếu không thì tình trạng thoát của lệnh trên được sử dụng.

tên xuất ...

xuất khẩu -p

Các tên được chỉ định được xuất để chúng xuất hiện trong môi trường của các lệnh tiếp theo. Cách duy nhất để hủy xuất một biến là bỏ đặt nó. Shell cho phép giá trị của một biến được đặt cùng một lúc nó được xuất ra bằng cách viết

export name = value

Không có đối số, lệnh xuất liệt kê tên của tất cả các biến đã xuất. Với tùy chọn - p xác định đầu ra sẽ được định dạng phù hợp để sử dụng không tương tác.

fc [- e editor ] [ đầu tiên [ last ]]

fc -l [- nr ] [ đầu tiên [ cuối ]]

fc -s [ cũ = mới ] [ trước ]

Danh sách dựng sẵn fc hoặc chỉnh sửa và thực thi lại, các lệnh được nhập trước đó vào một trình bao tương tác.

-bộ biên tập

Sử dụng trình chỉnh sửa được đặt tên bởi trình chỉnh sửa để chỉnh sửa các lệnh. Chuỗi trình soạn thảo là một tên lệnh, tùy thuộc vào việc tìm kiếm thông qua biến PATH . Giá trị trong biến FCEDIT được sử dụng làm mặc định khi - e không được chỉ định. Nếu FCEDIT là null hoặc không được đặt, giá trị của biến EDITOR được sử dụng. Nếu EDITOR là null hoặc không được đặt, ed (1) được sử dụng làm trình chỉnh sửa.

-l (ell)

Liệt kê các lệnh thay vì gọi một trình soạn thảo trên chúng. Các lệnh được viết theo trình tự được chỉ ra bởi toán hạng đầu tiên và cuối cùng, như bị ảnh hưởng bởi - r với mỗi lệnh đứng trước số lệnh.

-n

Loại bỏ các số lệnh khi liệt kê bằng -l.

-r

Đảo ngược thứ tự của các lệnh được liệt kê (với - l hoặc được chỉnh sửa (không phải - l cũng không - s)

-S

Thực hiện lại lệnh mà không cần gọi trình soạn thảo.

Đầu tiên

Cuối cùng

Chọn các lệnh để liệt kê hoặc chỉnh sửa. Số lượng các lệnh trước đó có thể được truy cập được xác định bởi giá trị của biến HISTSIZE . Giá trị của đầu tiên hoặc cuối cùng hoặc cả hai là một trong các giá trị sau:

[+] số

Một số dương đại diện cho một số lệnh; số lệnh có thể được hiển thị với tùy chọn - l .

-con số

Một số thập phân âm đại diện cho lệnh đã được thực thi số lượng lệnh trước đó. Ví dụ, -1 là lệnh trước đó ngay lập tức.

chuỗi

Một chuỗi cho biết lệnh được nhập gần đây nhất bắt đầu bằng chuỗi đó. Nếu toán tử old = new cũng không được xác định bằng - s dạng chuỗi của toán hạng đầu tiên không thể chứa dấu bằng được nhúng.

Các biến môi trường sau ảnh hưởng đến việc thực thi fc:

FCEDIT

Tên của trình soạn thảo để sử dụng.

HISTSIZE

Số lượng lệnh trước đó có thể truy cập được.

fg [ job ]

Di chuyển công việc đã chỉ định hoặc công việc hiện tại sang nền trước.

getopts optstring var

Lệnh getopts POSIX , không bị nhầm lẫn với getopt của Bell Labs (1).

Đối số đầu tiên phải là một chuỗi các chữ cái, mỗi ký tự có thể được theo sau bởi dấu hai chấm để biểu thị rằng tùy chọn yêu cầu một đối số. Biến được chỉ định được đặt thành tùy chọn được phân tích cú pháp.

Lệnh getopts từ chối tiện ích getopt (1) cũ hơn do việc xử lý các đối số chứa khoảng trắng.

Các getopts nội trang có thể được sử dụng để có được các tùy chọn và các đối số của chúng từ một danh sách các tham số. Khi được gọi, getopts đặt giá trị của tùy chọn tiếp theo từ chuỗi tùy chọn trong danh sách trong biến shell được chỉ định bởi var và chỉ mục của nó trong biến shell OPTIND Khi trình bao được gọi, OPTIND được khởi tạo thành 1. Đối với mỗi tùy chọn yêu cầu một đối số, getopts được xây dựng sẽ đặt nó trong biến shell OPTARG Nếu một tùy chọn không được cho phép trong optstring thì OPTARG sẽ không được đặt.

optstring là chuỗi ký tự tùy chọn được nhận dạng. Nếu một chữ cái được theo sau bởi dấu hai chấm, tùy chọn được mong đợi có một đối số có thể hoặc không thể tách rời khỏi nó bằng khoảng trắng. Nếu một ký tự tùy chọn không được tìm thấy ở nơi mong đợi, getopts sẽ đặt biến var thành ``? '' Getopts sau đó sẽ không đặt OPTARG và ghi đầu ra thành lỗi chuẩn. Bằng cách chỉ định dấu hai chấm làm ký tự đầu tiên của tất cả các lỗi, tất cả các lỗi sẽ bị bỏ qua.

Một giá trị khác không được trả về khi tùy chọn cuối cùng đạt được. Nếu không có đối số còn lại, getopts sẽ đặt var thành tùy chọn đặc biệt, `` - '' nếu không, nó sẽ đặt var thành ``? ''

Đoạn mã sau đây cho thấy cách người ta có thể xử lý các đối số cho một lệnh có thể lấy các tùy chọn [a] và [b] và tùy chọn [c] yêu cầu đối số.

trong khi getopts abc: f
làm
trường hợp $ f trong
a | b) flag = $ f ;;
c) carg = $ OPTARG ;;
\?) echo $ USAGE; thoát 1 ;;
esac
làm xong
shift `expr $ OPTIND - 1`

Mã này sẽ chấp nhận bất kỳ điều nào sau đây là tương đương:

tập tin tệp cmd -acarg
tệp tệp cmd -a -c arg
tập tin cmd -carg -a
cmd -a -carg - tệp tệp

lệnh băm-rv ...

Shell duy trì một bảng băm ghi nhớ vị trí của các lệnh. Không có đối số nào, lệnh băm sẽ in ra nội dung của bảng này. Các mục chưa được xem xét kể từ lệnh cd cuối cùng được đánh dấu bằng dấu hoa thị; các mục này có thể không hợp lệ.

Với các đối số, lệnh băm loại bỏ các lệnh được chỉ định từ bảng băm (trừ khi chúng là các hàm) và sau đó định vị chúng. Với tùy chọn - v , băm sẽ in các vị trí của các lệnh khi tìm thấy chúng. Tùy chọn - r làm cho lệnh băm xóa tất cả các mục trong bảng băm ngoại trừ các hàm.

jobid [ job ]

In quá trình id của các quá trình trong công việc. Nếu đối số công việc bị bỏ qua, công việc hiện tại được sử dụng.

công việc

Lệnh này liệt kê tất cả các tiến trình nền là con của quá trình shell hiện tại.

pwd

In thư mục hiện tại. Lệnh nội trang có thể khác với chương trình cùng tên vì lệnh nội trang ghi nhớ thư mục hiện tại thay vì phải tính toán lại mỗi lần. Điều này làm cho nó nhanh hơn. Tuy nhiên, nếu thư mục hiện tại được đổi tên, phiên bản được tạo sẵn của pwd sẽ tiếp tục in tên cũ cho thư mục.

đọc [- p nhắc ] [- r ] biến ...

Dấu nhắc được in nếu tùy chọn - p được chỉ định và đầu vào tiêu chuẩn là đầu cuối. Sau đó, một dòng được đọc từ đầu vào tiêu chuẩn. Dòng mới sau bị xóa khỏi dòng và dòng được phân tách như được mô tả trong phần tách từ ở trên và các phần được gán cho các biến theo thứ tự. Phải chỉ định ít nhất một biến. Nếu có nhiều phần hơn biến, các phần còn lại (cùng với các ký tự trong IFS tách chúng) được gán cho biến cuối cùng. Nếu có nhiều biến hơn phần, các biến còn lại được gán chuỗi rỗng. Việc xây dựng đọc sẽ cho biết thành công trừ khi EOF gặp phải trên đầu vào, trong trường hợp thất bại được trả về.

Theo mặc định, trừ khi tùy chọn - r được chỉ định, dấu gạch chéo ngược `` \ '' hoạt động như một ký tự thoát, khiến ký tự sau được xử lý theo nghĩa đen. Nếu dấu gạch chéo ngược được theo sau bởi một dòng mới, dấu gạch chéo ngược và dòng mới sẽ bị xóa.

tên chỉ đọc ...

readonly -p

Các tên được chỉ định được đánh dấu là chỉ đọc, do đó chúng không thể được sửa đổi sau đó hoặc không được đặt. Shell cho phép giá trị của một biến được đặt cùng lúc nó được đánh dấu chỉ đọc bằng cách viết

readonly name = value

Không có đối số, lệnh chỉ đọc liệt kê tên của tất cả các biến chỉ đọc. Với tùy chọn - p xác định đầu ra sẽ được định dạng phù hợp để sử dụng không tương tác.

đặt [{- tùy chọn | + tùy chọn | - arg ... ]

Lệnh thiết lập thực hiện ba chức năng khác nhau.

Không có đối số, nó liệt kê các giá trị của tất cả các biến shell.

Nếu có các tùy chọn, nó đặt cờ tùy chọn được chỉ định, hoặc xóa chúng như được mô tả trong phần được gọi là Xử lý danh sách đối số Sx.

Việc sử dụng thứ ba của lệnh set là thiết lập các giá trị của các tham số vị trí của shell cho các arg được chỉ định. Để thay đổi các tham số vị trí mà không thay đổi bất kỳ tùy chọn nào, sử dụng `` - '' làm đối số đầu tiên cần thiết lập. Nếu không có args, lệnh set sẽ xóa tất cả các tham số vị trí (tương đương với việc thực thi `` shift $ #. ''

giá trị biến

Gán giá trị cho biến. (Nói chung tốt hơn là viết biến = giá trị thay vì sử dụng setvar setvar được dự định sẽ được sử dụng trong các hàm gán các giá trị cho các biến có tên được chuyển thành các tham số.)

shift [ n ]

Chuyển các thông số vị trí n lần. Sự dịch chuyển đặt giá trị 1 đô la thành giá trị là 2 đô la giá trị là 2 đô la với giá trị là 3 đô la và cứ tiếp tục như vậy, làm giảm giá trị của $ 1 một. Nếu n lớn hơn số tham số vị trí, shift sẽ phát ra thông báo lỗi và thoát với trạng thái trả về 2.

lần

In thời gian người dùng và hệ thống tích lũy cho trình bao và cho các tiến trình chạy từ trình bao. Trạng thái trả về là 0.

tín hiệu hành động bẫy ...

Gây ra vỏ để phân tích cú pháp và thực thi hành động khi nhận được bất kỳ tín hiệu nào được chỉ định. Các tín hiệu được xác định bằng số hiệu. Nếu tín hiệu0 thì hành động được thực thi khi trình bao thoát. hành động có thể là null hoặc `` - '' nguyên nhân gây ra tín hiệu được chỉ định bị bỏ qua và sau đó làm cho hành động mặc định được thực hiện. Khi vỏ dĩa ra khỏi một vỏ bọc, nó sẽ reset các tín hiệu bị mắc kẹt (nhưng không bị bỏ qua) đến hành động mặc định. Lệnh bẫy không ảnh hưởng đến các tín hiệu bị bỏ qua khi nhập vào trình bao.

nhập [ name ... ]

Giải thích từng tên như một lệnh và in độ phân giải của lệnh tìm kiếm. Các độ phân giải có thể là: shell keyword, alias, shell builtin , lệnh, bí danh theo dõi và không tìm thấy. Đối với bí danh, mở rộng bí danh được in; cho các lệnh và bí danh được theo dõi, tên đường dẫn đầy đủ của lệnh được in.

ulimit [- H -S ] [- a -tfdscmlpn [ giá trị ]]

Hỏi hoặc đặt giới hạn cứng hoặc mềm về quy trình hoặc đặt giới hạn mới. Sự lựa chọn giữa giới hạn cứng (không có quy trình nào được phép vi phạm và không được nâng lên khi nó đã bị hạ xuống) và giới hạn mềm (gây ra các quá trình được báo hiệu nhưng không nhất thiết phải bị giết và có thể được nâng lên) những lá cờ này:

-H

đặt hoặc hỏi về giới hạn cứng

-S

đặt hoặc hỏi về giới hạn mềm. Nếu không - H và - S được chỉ định, giới hạn mềm sẽ được hiển thị hoặc cả hai giới hạn được cài đặt. Nếu cả hai được chỉ định, người cuối cùng sẽ thắng.

Giới hạn để thẩm vấn hoặc thiết lập, sau đó, được chọn bằng cách chỉ định bất kỳ một trong các cờ này:

-a

hiển thị tất cả các giới hạn hiện tại

-t

hiển thị hoặc đặt giới hạn về thời gian CPU (tính bằng giây)

-f

hiển thị hoặc đặt giới hạn trên tệp lớn nhất có thể được tạo (trong khối 512 byte)

-d

hiển thị hoặc đặt giới hạn về kích thước phân đoạn dữ liệu của một quy trình (tính bằng kilobyte)

-S

hiển thị hoặc đặt giới hạn trên kích thước ngăn xếp của một quy trình (tính bằng kilobyte)

-c

hiển thị hoặc đặt giới hạn trên kích thước đổ lõi lớn nhất có thể được tạo (trong khối 512 byte)

-m

hiển thị hoặc đặt giới hạn trên tổng bộ nhớ vật lý có thể được sử dụng bởi một quá trình (tính bằng kilobyte)

-l

hiển thị hoặc đặt giới hạn về số lượng bộ nhớ mà một quá trình có thể khóa bằng mlock (2) (tính bằng kilobyte )

-p

hiển thị hoặc đặt giới hạn về số lượng quy trình mà người dùng này có thể có cùng một lúc

-n

hiển thị hoặc đặt giới hạn cho các tệp số mà quy trình có thể mở cùng một lúc

Nếu không có quy định nào trong số này được chỉ định, đó là giới hạn về kích thước tệp được hiển thị hoặc được đặt. Nếu giá trị được chỉ định, giới hạn được đặt thành số đó; nếu không giới hạn hiện tại được hiển thị.

Giới hạn của một quá trình tùy ý có thể được hiển thị hoặc thiết lập bằng cách sử dụng tiện ích sysctl (8).

umask [ mặt nạ ]

Đặt giá trị của umask (xem umask (2)) thành giá trị bát phân được chỉ định. Nếu đối số bị bỏ qua, giá trị umask được in.

unalias [- a ] [ tên ]

Nếu tên được chỉ định, vỏ sẽ loại bỏ bí danh đó. Nếu - a được chỉ định, tất cả bí danh sẽ bị xóa.

bỏ đặt tên ...

Các biến và hàm được chỉ định không được đặt và chưa được xuất hiện. Nếu tên đã cho tương ứng với cả biến và hàm, cả biến và hàm sẽ không được đặt.

đợi [ công việc ]

Đợi công việc được chỉ định hoàn thành và trả về trạng thái thoát của quá trình cuối cùng trong công việc. Nếu đối số bị bỏ qua, hãy đợi tất cả công việc để hoàn tất và trả về trạng thái thoát của số không.

Chỉnh sửa dòng lệnh

Khi sh được sử dụng tương tác từ một thiết bị đầu cuối, lệnh hiện tại và lịch sử lệnh (xem fc trong Sx Builtins) có thể được chỉnh sửa bằng cách sử dụng chế độ chỉnh sửa dòng lệnh vi-mode. Chế độ này sử dụng các lệnh, được mô tả dưới đây, tương tự như một tập hợp con của những người được mô tả trong trang người vi. Lệnh 'set' -o vi cho phép chỉnh sửa vi-mode và đặt sh vào chế độ chèn vi. Với chế độ vi được kích hoạt, sh có thể được chuyển giữa chế độ chèn và chế độ lệnh. Trình soạn thảo không được mô tả đầy đủ ở đây, nhưng sẽ có trong tài liệu sau. Nó tương tự như vi: gõ Aq ESC sẽ ném bạn vào chế độ lệnh lệnh VI. Hitting Aq trở lại trong khi ở chế độ lệnh sẽ chuyển dòng vào shell.

Quan trọng: Sử dụng lệnh man ( % man ) để xem cách một lệnh được sử dụng trên máy tính cụ thể của bạn.