Skip to main content

Linux - Unix Command: bash

Shell Các lệnh & Bài toán cơ bản (Có Thể 2024)

Shell Các lệnh & Bài toán cơ bản (Có Thể 2024)
Anonim

Lệnh Linux Bash là mộtshtrình thông dịch ngôn ngữ lệnh tương thích thực hiện các lệnh đọc từ đầu vào tiêu chuẩn hoặc từ một tệp.Bash cũng kết hợp các tính năng hữu ích từ vỏ Korn và C (kshcsh).

Tùy chọn Bash

Ngoài các tùy chọn vỏ ký tự đơn được ghi trong phần mô tả củabộ lệnh nội trang,bash diễn giải các tùy chọn sau khi được gọi:

  • -c chuỗi: Nếu-c tùy chọn là hiện tại, sau đó lệnh được đọc từ chuỗi . Nếu có các đối số sau chuỗi , chúng được gán cho các tham số vị trí, bắt đầu bằng$0.
  • -tôi: Nếu-tôi tùy chọn là hiện tại, vỏ là tương tác .
  • -l: Chế tạobash hành động như thể nó đã được gọi là một vỏ đăng nhập.
  • -r: Nếu-r tùy chọn có mặt, vỏ sẽ trở thành bị hạn chế.
  • -S: Nếu-S tùy chọn là hiện tại, hoặc nếu không có đối số vẫn còn sau khi xử lý tùy chọn, sau đó lệnh được đọc từ đầu vào tiêu chuẩn. Tùy chọn này cho phép thiết lập các thông số vị trí khi gọi một trình bao tương tác.
  • -D: Danh sách tất cả các chuỗi được trích dẫn kép được bắt đầu trước$ được in trên đầu ra tiêu chuẩn. Đây là những chuỗi có thể dịch ngôn ngữ khi ngôn ngữ hiện tại không phải làC hoặc làPOSIX. Điều này ngụ ý -n Tùy chọn; không có lệnh nào được thực thi.
  • - + O shopt_option : shopt_option là một trong các tùy chọn vỏ được chấp nhận bởishopt được xây dựng trong. Nếu shopt_option là món quà,-O đặt giá trị của tùy chọn đó và+ O unets nó. Nếu shopt_option không được cung cấp, tên và giá trị của các tùy chọn vỏ được chấp nhận bởishopt được in trên đầu ra tiêu chuẩn. Nếu tùy chọn gọi là + O, đầu ra được hiển thị ở định dạng có thể được sử dụng lại làm đầu vào.
  • --: A-- báo hiệu kết thúc tùy chọn và vô hiệu hóa xử lý tùy chọn thêm. Bất kỳ đối số nào sau-- được coi là tên tệp và đối số. Một đối số của- tương đương với--.

Bash cũng diễn giải một số tùy chọn đa ký tự. Các tùy chọn này phải xuất hiện trên dòng lệnh trước khi các tùy chọn ký tự đơn được nhận dạng:

  • --dump-po-strings: Tương đương với-D, nhưng đầu ra nằm trong GNU gettext po (định dạng tệp đối tượng di động).
  • --dump-strings: Tương đương với-D.
  • --Cứu giúp: Hiển thị thông báo sử dụng trên đầu ra tiêu chuẩn và thoát thành công.
  • --init-file: tập tin và --rcfile tập tin : Thực hiện các lệnh từ tập tin thay vì tệp khởi tạo cá nhân chuẩn ~ / .bashrc nếu trình bao tương tác.
  • --đăng nhập: Tương đương với-l.
  • --noediting: Không sử dụng GNUreadline thư viện để đọc các dòng lệnh khi trình bao tương tác.
  • --không có hồ sơ: Không đọc tệp khởi động toàn hệ thống / etc / profile hoặc bất kỳ tệp khởi tạo cá nhân nào ~ / .bash_profile , ~ / .bash_login , hoặc là ~ / .profile . Theo mặc định,bash đọc những tập tin này khi nó được gọi là một vỏ đăng nhập.
  • --norc: Không đọc và thực thi tệp khởi tạo cá nhân ~ / .bashrc nếu trình bao tương tác. Tùy chọn này được bật theo mặc định nếu trình bao được gọi làsh.
  • --posix: Thay đổi hành vi củabash nơi hoạt động mặc định khác với tiêu chuẩn POSIX để phù hợp với tiêu chuẩn ( chế độ posix ).
  • - không hạn chế: Vỏ bị hạn chế.
  • --rpm-require: Tạo danh sách các tệp được yêu cầu cho tập lệnh shell để chạy. Điều này ngụ ý '-n' và chịu sự hạn chế tương tự như kiểm tra lỗi thời gian biên dịch; Backticks, tests, và evals không được phân tích cú pháp để một số phụ thuộc có thể bị bỏ qua.
  • --verbose: Tương đương với-v.
  • --phiên bản: Hiển thị thông tin phiên bản cho phiên bản này củabash trên đầu ra tiêu chuẩn và thoát thành công.

Lập luận

Nếu các đối số vẫn còn sau khi xử lý tùy chọn và không phải là-c cũng không phải-S tùy chọn đã được cung cấp, đối số đầu tiên được giả định là tên của một tệp chứa các lệnh shell. Nếu bash được gọi theo cách này,$0 được đặt thành tên của tệp và các thông số vị trí được đặt thành các đối số còn lại.Bash đọc và thực hiện các lệnh từ tệp này; sau đó thoát ra.BashTrạng thái thoát là trạng thái thoát của lệnh cuối cùng được thực hiện trong tập lệnh. Nếu không có lệnh nào được thực thi, trạng thái thoát là 0. Một lần thử đầu tiên được thực hiện để mở tệp trong thư mục hiện tại và nếu không tìm thấy tệp, thì trình vỏ sẽ tìm kiếm các thư mục trongCON ĐƯỜNG cho kịch bản.

Yêu cầu

A đăng nhập shell là một ký tự đầu tiên của đối số là một-hoặc bắt đầu với--đăng nhập Tùy chọn.

An tương tác shell là một bắt đầu mà không có đối số không tùy chọn và không có-c tùy chọn có đầu vào và đầu ra tiêu chuẩn đều được kết nối với các đầu cuối như được xác định bởi sự ngu ngốc (3) hoặc bắt đầu với-tôi Tùy chọn.PS1 được đặt và $- bao gồm nếu bash tương tác, cho phép tập lệnh shell hoặc tệp khởi động để kiểm tra trạng thái này.

Các đoạn sau mô tả cách thứcbash thực hiện các tệp khởi động của nó. Nếu bất kỳ tệp nào tồn tại nhưng không thể đọc được,bash báo cáo lỗi. Dấu ngã được mở rộng trong tên tệp như được mô tả trong Tilde Expansion.

Khi nàobash được gọi là một shell đăng nhập tương tác hoặc là một shell không tương tác với--đăng nhập tùy chọn, trước tiên nó đọc và thực thi lệnh từ tệp / etc / profile , nếu tập tin đó tồn tại. Sau khi đọc tệp đó, nó tìm kiếm ~ / .bash_profile , ~ / .bash_login và ~ / .profile , theo thứ tự đó, đọc và thực hiện các lệnh từ lệnh đầu tiên tồn tại và có thể đọc được. Các--không có hồ sơ tùy chọn có thể được sử dụng khi vỏ được bắt đầu để ức chế hành vi này.

Khi một trình bao đăng nhập thoát,bash đọc và thực hiện lệnh từ tệp ~ / .bash_logout , nếu nó tồn tại.

Khi một trình bao tương tác không phải là một shell đăng nhập được khởi động,bash đọc và thực hiện lệnh từ ~ / .bashrc , nếu tập tin đó tồn tại. Điều này có thể bị ức chế bằng cách sử dụng--norc Tùy chọn. Các--rcfile tập tin tùy chọn sẽ bắt buộcbash đọc và thực thi lệnh từ tập tin thay vì ~ / .bashrc .

Khi nàobash được bắt đầu không tương tác - để chạy tập lệnh shell, ví dụ - nó sẽ tìm biếnBASH_ENV trong môi trường, mở rộng giá trị của nó nếu nó xuất hiện ở đó và sử dụng giá trị được mở rộng làm tên của tệp để đọc và thực thi.Bash hoạt động như thể lệnh sau đã được thực thi:

nếu -n "$ BASH_ENV"; sau đó . "$ BASH_ENV"; fi

nhưng giá trị củaCON ĐƯỜNG biến không được sử dụng để tìm kiếm tên tệp.

Nếubash được gọi với tênsh, nó cố bắt chước hành vi khởi động của các phiên bản lịch sửsh càng gần càng tốt, trong khi vẫn tuân theo tiêu chuẩn POSIX. Khi được gọi là shell đăng nhập tương tác hoặc một shell không tương tác với--đăng nhập tùy chọn, nó đầu tiên cố gắng đọc và thực thi các lệnh từ / etc / profile và ~ / .profile , theo thứ tự đó. Các--không có hồ sơ tùy chọn có thể được sử dụng để ức chế hành vi này. Khi được gọi là một trình bao tương tác với tên sh, bash tìm kiếm biếnENV, mở rộng giá trị của nó nếu nó được xác định và sử dụng giá trị được mở rộng làm tên của tệp để đọc và thực thi. Vì trình bao được gọi làsh không cố gắng đọc và thực hiện các lệnh từ bất kỳ tệp khởi động nào khác,--rcfile tùy chọn không có hiệu lực. Một shell không tương tác được gọi với tênsh không cố đọc bất kỳ tệp khởi động nào khác. Khi được gọi làsh, bash vào posix sau khi các tập tin khởi động được đọc.

Khi nàobash được bắt đầu vào posix chế độ, như với--posix tùy chọn dòng lệnh, nó tuân theo tiêu chuẩn POSIX cho các tệp khởi động. Trong chế độ này, các trình bao tương tác sẽ mở rộngENV biến và lệnh được đọc và thực thi từ tệp có tên là giá trị được mở rộng. Không có tệp khởi động nào khác được đọc.

Bash cố gắng xác định khi nào nó được chạy bởi trình bao da từ xa, thường rshd . Nếu bash xác định nó đang được điều hành bởi rshd , nó đọc và thực thi lệnh từ ~ / .bashrc , nếu tệp đó tồn tại và có thể đọc được. Nó sẽ không làm điều này nếu được gọi làsh. Các--norc tùy chọn có thể được sử dụng để ngăn chặn hành vi này và--rcfile tùy chọn có thể được sử dụng để buộc một tệp khác được đọc, nhưng rshd thường không gọi trình bao với các tùy chọn đó hoặc cho phép chúng được chỉ định.

Nếu trình bao được bắt đầu với id người dùng (nhóm) hiệu quả không bằng id người dùng thực (nhóm), và-p tùy chọn không được cung cấp, không có tệp khởi động nào được đọc, các hàm vỏ không được kế thừa từ môi trường,SHELLOPTS biến, nếu nó xuất hiện trong môi trường, bị bỏ qua, và id người dùng có hiệu lực được đặt thành id người dùng thực. Nếu-p tùy chọn được cung cấp tại lời gọi, hành vi khởi động giống nhau, nhưng id người dùng hiệu quả không được đặt lại.

Định nghĩa

Các định nghĩa sau được sử dụng trong phần còn lại của tài liệu này:

  • Chỗ trống: Một không gian hoặc tab.
  • Lời: Một chuỗi ký tự được coi là một đơn vị duy nhất của trình bao. Còn được gọi là mã thông báo.
  • Tên: A từ chỉ bao gồm các ký tự chữ và số và dấu gạch dưới, và bắt đầu bằng ký tự chữ cái hoặc dấu gạch dưới. Cũng được gọi làđịnh danh.
  • Metacharacter: Một ký tự, khi không được trích dẫn, phân tách các từ. Một trong những điều sau đây:| &; () <> tab không gian
  • Toán tử điều khiển: A mã thông báo thực hiện chức năng điều khiển. Nó là một trong những biểu tượng sau: || & && ; ;; ( ) |

Từ dành riêng

Từ dành riêng là những từ có ý nghĩa đặc biệt đối với vỏ. Các từ sau được ghi nhận là được đặt trước khi không được trích dẫn và hoặc là từ đầu tiên của một lệnh đơn giản hoặc từ thứ ba của mộttrường hợphoặc làcho chỉ huy:

! trường hợp làm elif khác esac fi cho chức năng nếu trong chọn sau đó cho đến khi trong thời gian {}

Shell Grammar: Các lệnh đơn giản

A lệnh đơn giản là một chuỗi các bài tập biến tùy chọn được theo sau bởichỗ trốngcác từ và chuyển hướng khác nhau và được chấm dứt bởi một -toán tử điều khiển . Từ đầu tiên chỉ định lệnh được thực hiện và được chuyển thành đối số bằng không. Các từ còn lại được chuyển làm đối số cho lệnh được gọi.

Giá trị trả về của một lệnh đơn giản là trạng thái thoát của nó hoặc 128+ n nếu lệnh được kết thúc bằng tín hiệu n .

Đường ống

A đường ống là một chuỗi gồm một hoặc nhiều lệnh được phân cách bởi ký tự|. Định dạng cho một đường ống là thời gian -p ! chỉ huy | command2 … .

Đầu ra tiêu chuẩn của chỉ huy được kết nối thông qua một đường ống đến đầu vào chuẩn của command2 . Kết nối này được thực hiện trước bất kỳ chuyển hướng nào được chỉ định bởi lệnh.

Nếu từ dành riêng! trước một đường ống, trạng thái thoát của đường ống đó là NOT hợp lý của trạng thái thoát của lệnh cuối cùng. Nếu không, trạng thái của đường dẫn là trạng thái thoát của lệnh cuối cùng. Shell đợi tất cả các lệnh trong đường ống để kết thúc trước khi trả về một giá trị.

Nếuthời gian từ dành riêng trước một đường ống, thời gian trôi qua cũng như thời gian của người dùng và hệ thống được tiêu thụ bởi thực thi của nó được báo cáo khi đường ống chấm dứt. Các-p tùy chọn thay đổi định dạng đầu ra thành định dạng được chỉ định bởi POSIX. CácTIMEFORMAT biến có thể được đặt thành chuỗi định dạng chỉ định cách hiển thị thông tin thời gian.

Mỗi lệnh trong một đường ống được thực hiện như một quá trình riêng biệt (ví dụ như trong một vỏ con).

Danh sách

A danh sách là một chuỗi của một hoặc nhiều đường ống được phân cách bởi một trong các toán tử;, &, &&, hoặc là||và tùy ý chấm dứt bởi một trong;, &, hoặc là.

Trong số các toán tử danh sách này,&&|| có quyền ưu tiên bằng nhau, tiếp theo là;&, có quyền ưu tiên bằng nhau.

Một chuỗi gồm một hoặc nhiều dòng mới có thể xuất hiện trong danh sách thay vì dấu chấm phẩy để phân tách các lệnh.

Nếu một lệnh được kết thúc bởi toán tử điều khiển&, shell thực hiện lệnh trong lý lịch trong một vỏ bọc. Shell không chờ lệnh kết thúc, và trạng thái trả về là 0. Lệnh được phân cách bởi một; được thực thi tuần tự; vỏ chờ đợi cho mỗi lệnh để chấm dứt lần lượt. Trạng thái trả về là trạng thái thoát của lệnh cuối cùng được thực hiện.

Các toán tử điều khiển&&|| biểu thị VÀ danh sách và danh sách OR, tương ứng. Danh sách AND có biểu mẫu

command1 && command2

command2 được thực hiện nếu và chỉ khi, command1 trả về trạng thái thoát bằng không.

Danh sách OR có biểu mẫu

command1 || command2

command2 được thực thi nếu và chỉ khi command1 trả về một trạng thái thoát khác không. Trạng thái trả về của danh sách AND và OR là trạng thái thoát của lệnh cuối cùng được thực thi trong danh sách.

Các lệnh hợp chất

A lệnh ghép là một trong những điều sau đây:

(danh sách) : danh sách được thực hiện trong một subshell. Các phép gán biến và các lệnh nội trang có ảnh hưởng đến môi trường của trình bao không còn hiệu lực sau khi lệnh hoàn tất. Trạng thái trả lại là trạng thái thoát của danh sách .

{ danh sách; } : danh sách được thực hiện đơn giản trong môi trường shell hiện tại. danh sách phải được chấm dứt bằng một dòng mới hoặc dấu chấm phẩy. Điều này được gọi là lệnh nhóm . Trạng thái trả lại là trạng thái thoát của danh sách . Lưu ý rằng không giống như metacharacters(), {} là Từ dành riêng và phải xảy ra khi một từ dành riêng được phép nhận ra. Vì chúng không gây ra ngắt lời, chúng phải được tách ra khỏi danh sách bởi khoảng trắng.

((biểu hiện)) : Các biểu hiện được đánh giá theo các quy tắc được mô tả trong Đánh giá số học. Nếu giá trị của biểu thức khác 0, trạng thái trả về là 0; nếu không trạng thái trả về là 1. Điều này hoàn toàn tương đương vớiđể cho ' biểu hiện '.

biểu hiện : Trả về trạng thái 0 hoặc 1 tùy thuộc vào việc đánh giá biểu thức điều kiện biểu hiện . Biểu thức bao gồm các bộ sơ yếu được mô tả dưới đây theo Biểu thức có điều kiện. Việc chia tách từ và mở rộng tên đường dẫn không được thực hiện trên các từ giữa; mở rộng dấu ngã, tham số và mở rộng biến, mở rộng số học, thay thế lệnh, thay thế tiến trình và loại bỏ trích dẫn được thực hiện.

Khi mà==!= các toán tử được sử dụng, chuỗi bên phải của toán tử được coi là một mẫu và được so khớp theo các quy tắc được mô tả trongKhớp mẫu. Giá trị trả về là 0 nếu chuỗi khớp hoặc không khớp với mẫu, tương ứng và 1 giá trị khác. Bất kỳ phần nào của mẫu có thể được trích dẫn để buộc nó được khớp như một chuỗi.

Biểu thức có thể được kết hợp bằng cách sử dụng các toán tử sau, được liệt kê theo thứ tự giảm dần ưu tiên:

  • (expression): Trả về giá trị của biểu hiện . Điều này có thể được sử dụng để ghi đè quyền ưu tiên bình thường của các toán tử.
  • ! expressio n: Đúng nếu biểu hiện là sai.
  • expression1 && expression2 : Đúng nếu cả hai expression1 và expression2 là đúng.
  • expression1 || expression2 : Đúng nếu expression1 hoặc là expression2 là đúng.

Các&&|| toán tử không đánh giá expression2 nếu giá trị của expression1 là đủ để xác định giá trị trả về của toàn bộ biểu thức điều kiện.

  • cho Tên trong từ ; làm danh sách ; làm xong: Danh sách các từ sautrong được mở rộng, tạo danh sách các mục. Biến Tên được đặt thành từng phần tử của danh sách này, và danh sách được thực thi mỗi lần. Nếutrong từ bị bỏ qua,cho lệnh thực thi danh sách một lần cho mỗi tham số vị trí được đặt. Trạng thái trả về là trạng thái thoát của lệnh cuối cùng thực hiện. Nếu mở rộng các mục sautrong kết quả trong một danh sách trống, không có lệnh nào được thực hiện và trạng thái trả về là 0.
  • cho (( expr1 ; expr2 ; expr3 )) ; làm danh sách ; làm xong: Đầu tiên, biểu thức số học expr1 được đánh giá theo các quy tắc được mô tả trongĐánh giá số học. Biểu thức số học expr2 sau đó được đánh giá liên tục cho đến khi nó được đánh giá bằng không. Mỗi lần expr2 đánh giá đến một giá trị khác 0, danh sách được thực hiện và biểu thức số học expr3 được đánh giá. Nếu bất kỳ biểu thức nào bị bỏ qua, nó hoạt động như thể nó đánh giá 1. Giá trị trả về là trạng thái thoát của lệnh cuối cùng trong danh sách được thực hiện hoặc giả nếu bất kỳ biểu thức nào không hợp lệ.
  • lựa chọn Tên trong từ ; làm danh sách ; làm xong: Danh sách các từ sautrong được mở rộng, tạo danh sách các mục. Tập hợp các từ được mở rộng được in trên lỗi tiêu chuẩn, mỗi từ đứng trước một số. Nếutrong từ được bỏ qua, các tham số vị trí được in. Các PS3 dấu nhắc sau đó được hiển thị và một dòng được đọc từ đầu vào tiêu chuẩn. Nếu dòng bao gồm một số tương ứng với một trong các từ được hiển thị, thì giá trị của Tên được đặt thành từ đó. Nếu dòng trống, các từ và lời nhắc sẽ hiển thị lại. Nếu EOF được đọc, lệnh hoàn thành. Bất kỳ giá trị nào khác đọc nguyên nhân Tên được đặt thành null. Dòng đọc được lưu trong biếnĐÁP LẠI. Các danh sách được thực hiện sau mỗi lần lựa chọn cho đến khiphá vỡ lệnh được thực hiện. Trạng thái thoát củalựa chọn là trạng thái thoát của lệnh cuối cùng được thực hiện trong danh sách hoặc không nếu không có lệnh nào được thực hiện.
  • trường hợp từ trong ( mẫu | mẫu : Atrường hợp lệnh mở rộng đầu tiên từ và cố gắng đối sánh nó với mỗi mẫu lần lượt, sử dụng cùng một quy tắc phù hợp để mở rộng tên đường dẫn. Khi một kết hợp được tìm thấy, tương ứng danh sách được thực hiện. Sau trận đấu đầu tiên, không có trận đấu nào tiếp theo được thử. Trạng thái thoát là không nếu không có mẫu nào phù hợp. Nếu không, đó là trạng thái thoát của lệnh cuối cùng được thực hiện trong danh sách .
  • nếu danh sách ; sau đó danh sách; và elif danh sách ; sau đó danh sách ; … khác danh sách ; fi: Cácnếu danh sách được thực hiện. Nếu trạng thái thoát của nó bằng 0,sau đó danh sách được thực hiện. Nếu không, mỗi elif danh sách được thực thi lần lượt, và nếu trạng thái thoát của nó bằng 0, thì tương ứngsau đó danh sách được thực hiện và lệnh hoàn thành. Nếu khôngkhác danh sách được thực hiện, nếu có. Trạng thái thoát là trạng thái thoát của lệnh cuối cùng được thực thi hoặc không nếu không có điều kiện nào được kiểm tra đúng.
  • trong khi danh sách ; làm danh sách ; làm xong cho đến danh sách ; làm danh sách ; làm xong: Cáctrong khi lệnh liên tục thực thilàm danh sách miễn là lệnh cuối cùng trong danh sách trả về trạng thái thoát bằng không. Cáccho đến lệnh giống hệt vớitrong khi lệnh, ngoại trừ việc thử nghiệm bị phủ nhận; cáclàm danh sách được thực thi miễn là lệnh cuối cùng trong danh sách trả về một trạng thái thoát khác không. Trạng thái thoát củatrong khicho đến lệnh là trạng thái thoát củalàm danh sách lệnh được thực thi, hoặc 0 nếu không có lệnh nào được thực hiện.
  • chức năng Tên () { danh sách ; }: Điều này định nghĩa một hàm có tên Tên . Các thân hình của hàm là danh sách các lệnh giữa {và}. Danh sách này được thực thi bất cứ khi nào Tên được chỉ định làm tên của một lệnh đơn giản. Trạng thái thoát của một hàm là trạng thái thoát của lệnh cuối cùng được thực hiện trong phần thân.

Bình luận

Trong một hệ vỏ không tương tác hoặc một trình bao tương tác, trong đó interactive_comments tùy chọn choshopt builtin được bật, một từ bắt đầu bằng# khiến từ đó và tất cả các ký tự còn lại trên dòng đó bị bỏ qua. Một trình bao tương tác không cóinteractive_comments tùy chọn được bật không cho phép nhận xét. Các interactive_comments tùy chọn được bật theo mặc định trong các trình tương tác.

Báo giá

Báo giá được sử dụng để loại bỏ ý nghĩa đặc biệt của một số ký tự hoặc từ nào đó thành shell. Trích dẫn có thể được sử dụng để vô hiệu hóa điều trị đặc biệt cho các ký tự đặc biệt, để ngăn chặn các từ dành riêng được nhận dạng như vậy, và để ngăn chặn việc mở rộng tham số.

Mỗi metacharacters được liệt kê ở trên theoĐịnh nghĩa có ý nghĩa đặc biệt đối với trình bao và phải được trích dẫn nếu nó đại diện cho chính nó.

Khi các tiện ích mở rộng lịch sử lệnh đang được sử dụng, mở rộng lịch sử nhân vật, thường!, phải được trích dẫn để ngăn chặn việc mở rộng lịch sử.

Có ba cơ chế trích dẫn: ký tự thoát , dấu nháy đơn và dấu ngoặc kép.

Dấu gạch chéo ngược không được trích dẫn () là ký tự thoát . Nó bảo toàn giá trị chữ của ký tự tiếp theo, ngoại trừ . Nếu một cặp xuất hiện và dấu gạch chéo ngược không được tự trích dẫn, được coi là sự tiếp tục dòng (nghĩa là nó được loại bỏ khỏi luồng đầu vào và bỏ qua một cách hiệu quả).

Việc bao gồm các ký tự trong dấu nháy đơn duy trì giá trị chữ của mỗi ký tự trong dấu ngoặc kép. Một trích dẫn duy nhất có thể không xảy ra giữa các dấu nháy đơn, ngay cả khi trước dấu gạch chéo ngược.

Việc bao gồm các ký tự trong dấu ngoặc kép giữ nguyên giá trị bằng chữ của tất cả các ký tự trong dấu ngoặc kép, ngoại trừ$, 'và. Các nhân vật$' giữ lại ý nghĩa đặc biệt của chúng trong dấu ngoặc kép. Dấu gạch chéo ngược chỉ giữ lại ý nghĩa đặc biệt của nó khi được theo sau bởi một trong các ký tự sau:$, ', ', , hoặc là. Trích dẫn kép có thể được trích dẫn trong dấu ngoặc kép bằng cách đặt trước dấu gạch chéo ngược.

Các thông số đặc biệt*@ có ý nghĩa đặc biệt khi trong ngoặc kép.

Các từ của biểu mẫu$' chuỗi 'được điều trị đặc biệt. Từ này mở rộng đến chuỗi , với các ký tự thoát dấu gạch chéo được thay thế theo quy định của tiêu chuẩn ANSI C. Chuỗi thoát dấu gạch chéo ngược, nếu có, được giải mã như sau:

  • a: cảnh báo (chuông)
  • b: backspace
  • e: một nhân vật thoát
  • f: thức ăn dạng
  • n: dòng mới
  • r: vận chuyển trở lại
  • t: Tab ngang
  • v: tab dọc
  • \: dấu gạch chéo ngược
  • ': trích dẫn đơn
  • nnn : ký tự 8 bit có giá trị là giá trị bát phân nnn (một đến ba chữ số)
  • x HH : ký tự 8 bit có giá trị là giá trị thập lục phân HH (một hoặc hai chữ số hex)
  • c x : một sự điều khiển- x tính cách

Kết quả mở rộng được trích dẫn một lần, như thể không có dấu đô la.

Một chuỗi được trích dẫn kép được bắt đầu bằng dấu đô la ($) sẽ làm cho chuỗi được dịch theo ngôn ngữ hiện tại. Nếu ngôn ngữ hiện tại làC hoặc làPOSIX, dấu đô la bị bỏ qua. Nếu chuỗi được dịch và thay thế, thay thế được trích dẫn kép.

Thông số

A tham số là một thực thể lưu trữ các giá trị. Nó có thể là một Tên , một số hoặc một trong các ký tự đặc biệt được liệt kê trongThông số đặc biệt. Vì mục đích của vỏ, một biến là một tham số được biểu thị bằng một Tên . Biến có một giá trị và không hoặc nhiều hơn thuộc tính . Các thuộc tính được gán bằng cách sử dụngkhai lệnh nội trang.

Một tham số được đặt nếu nó được gán một giá trị. Chuỗi rỗng là một giá trị hợp lệ. Khi một biến được đặt, nó có thể không được đặt chỉ bằng cách sử dụngbỏ đặt lệnh nội trang.

A biến có thể được chỉ định bởi một tuyên bố của biểu mẫu: Tên = giá trị

Nếu giá trị không được đưa ra, biến được gán chuỗi rỗng. Tất cả các giá trị trải qua việc mở rộng dấu ngã, tham số và mở rộng biến, thay thế lệnh, mở rộng số học và xóa trích dẫn. Nếu biến cósố nguyên tập hợp thuộc tính, sau đó giá trị phải mở rộng số học ngay cả khi mở rộng $ ((…)) không được sử dụng. Việc tách từ không được thực hiện, ngoại trừ'$@' như được giải thích dướiThông số đặc biệt. Mở rộng tên đường dẫn không được thực hiện. Báo cáo chuyển nhượng cũng có thể xuất hiện dưới dạng đối số chokhai, sắp chữ, xuất khẩu, chỉ đọcđịa phương lệnh dựng sẵn.

Tham số vị trí

A tham số vị trí là một tham số được biểu thị bằng một hoặc nhiều chữ số, khác với chữ số đơn 0. Các tham số vị trí được gán từ các đối số của trình bao khi nó được gọi và có thể được gán lại bằng cách sử dụngbộ lệnh nội trang. Các tham số vị trí có thể không được gán cho các câu lệnh gán. Các tham số vị trí tạm thời được thay thế khi một hàm hệ vỏ được thực hiện.

Khi một tham số vị trí bao gồm nhiều hơn một chữ số được mở rộng, nó phải được bao bọc trong niềng răng.

Thông số đặc biệt

Shell xử lý một số tham số đặc biệt. Các thông số này chỉ có thể được tham chiếu; giao cho họ không được phép.

  • *: Mở rộng 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, nó mở rộng thành một từ duy nhất với giá trị của mỗi thông số được phân cách bằng ký tự đầu tiên củaIFS biến đặc biệt. Đó là, "$*" tương đương với "$1 c $2 c ", Ở đâu c là ký tự đầu tiên của giá trị củaIFS biến. NếuIFS không được đặt, các tham số được phân cách bằng dấu cách. NếuIFS là null, các tham số được nối mà không có dấu phân cách xen kẽ.
  • @: Mở rộng 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ố sẽ mở rộng thành một từ riêng biệt. Đó là, "$@" tương đương với "$1' '$2"… Khi không có tham số vị trí,"$@"và$@mở rộng thành không có gì (chúng bị xóa).
  • #: Mở rộng số tham số vị trí theo số thập phân.
  • ?: Mở rộng đến trạng thái của đường ống nền trước được thực thi gần đây nhất.
  • -: Mở rộng đến các cờ tùy chọn hiện tại như được chỉ định khi yêu cầu, bởibộ lệnh nội trang hoặc các lệnh do chính shell thiết lập, chẳng hạn như-tôi Tùy chọn.
  • $: Mở rộng đến ID tiến trình của trình bao. Trong một () subshell, nó mở rộng đến ID tiến trình của shell hiện tại, không phải là subshell.
  • !: Mở rộng đến ID tiến trình của lệnh được thực hiện gần đây nhất (không đồng bộ).
  • 0: Mở rộng đến tên của shell hoặc shell script. Điều này được thiết lập lúc khởi tạo trình bao. Nếubash được gọi với một tập lệnh,$0 được đặt thành tên của tệp đó. Nếubash được bắt đầu bằng-c tùy chọn, sau đó$0 được đặt thành đối số đầu tiên sau khi chuỗi được thực thi, nếu có một chuỗi. Nếu không, nó được đặt thành tên tệp được sử dụng để gọibash, như được đưa ra bởi đối số bằng không.
  • _: Khi khởi động trình bao, được đặt thành tên tệp tuyệt đối của shell hoặc shell script đang được thực hiện như được truyền trong danh sách đối số. Sau đó, mở rộng đến đối số cuối cùng cho lệnh trước đó, sau khi mở rộng. Cũng đặt tên đầy đủ của mỗi lệnh được thực hiện và được đặt trong môi trường được xuất ra lệnh đó. Khi kiểm tra thư, tham số này giữ tên của tệp thư hiện đang được kiểm tra.

Shell biến

Các biến sau được đặt bởi trình bao:

BASH: Mở rộng đến tên tệp đầy đủ được sử dụng để gọi phiên bản này củabash.

BASH_VERSINFO: Biến mảng chỉ đọc có thành viên chứa thông tin phiên bản cho phiên bản này của bash. Các giá trị được gán cho các thành viên mảng như sau:

  • BASH_VERSINFO 0: Số phiên bản chính ( giải phóng )
  • BASH_VERSINFO 1: Số phiên bản phụ ( phiên bản )
  • BASH_VERSINFO 2: Mức bản vá
  • BASH_VERSINFO 3: Phiên bản xây dựng
  • BASH_VERSINFO 4: Trạng thái phát hành ( beta1, ví dụ)
  • BASH_VERSINFO 5: Giá trị củaMACHTYPE

BASH_VERSION: Mở rộng đến một chuỗi mô tả phiên bản của phiên bản này củabash.

COMP_CWORD: Một chỉ số vào$ {COMP_WORDS} của từ chứa vị trí con trỏ hiện tại. Biến này chỉ có sẵn trong các hàm shell được gọi bởi các cơ sở hoàn thành khả trình lập trình.

COMP_LINE: Dòng lệnh hiện tại. Biến này chỉ có sẵn trong các hàm shell và các lệnh bên ngoài được gọi bởi các cơ sở hoàn thành có thể lập trình.

COMP_POINT: Chỉ mục của vị trí con trỏ hiện tại liên quan đến đầu của lệnh hiện tại. Nếu vị trí con trỏ hiện tại nằm ở cuối lệnh hiện tại, giá trị của biến này bằng$ {# COMP_LINE}. Biến này chỉ có sẵn trong các hàm shell và các lệnh bên ngoài được gọi bởi các cơ sở hoàn thành có thể lập trình.

COMP_WORDS: Một biến mảng bao gồm các từ riêng lẻ trong dòng lệnh hiện tại. Biến này chỉ có sẵn trong các hàm shell được gọi bởi các cơ sở hoàn thành khả trình lập trình.

DIRSTACK: Một biến mảng chứa nội dung hiện tại của ngăn xếp thư mục. Thư mục xuất hiện trong ngăn xếp theo thứ tự chúng được hiển thị bởidirs được xây dựng trong. Việc gán cho các thành viên của biến mảng này có thể được sử dụng để sửa đổi các thư mục đã có trong ngăn xếp, nhưngpushdpopd nội dung dựng sẵn phải được sử dụng để thêm và xóa thư mục. Việc gán cho biến này sẽ không thay đổi thư mục hiện tại. NếuDIRSTACK không được đặt, nó sẽ mất các thuộc tính đặc biệt của nó, ngay cả khi nó được đặt lại sau đó.

EUID: Mở rộng đến ID người dùng hiệu quả của người dùng hiện tại, được khởi tạo lúc khởi động trình bao. Biến này là chỉ đọc.

FUNCNAME: Tên của bất kỳ chức năng trình bao hiện đang thực thi nào. Biến này chỉ tồn tại khi một hàm hệ vỏ đang thi hành. Bài tập choFUNCNAME không có hiệu lực và trả lại trạng thái lỗi. NếuFUNCNAME không được đặt, nó sẽ mất các thuộc tính đặc biệt của nó, ngay cả khi nó được đặt lại sau đó.

CÁC NHÓM: Một biến mảng chứa danh sách các nhóm trong đó người dùng hiện tại là một thành viên. Bài tập choCÁC NHÓM không có hiệu lực và trả lại trạng thái lỗi. NếuCÁC NHÓM không được đặt, nó sẽ mất các thuộc tính đặc biệt của nó, ngay cả khi nó được đặt lại sau đó.

HISTCMD: Số lịch sử hoặc chỉ mục trong danh sách lịch sử của lệnh hiện tại. NếuHISTCMD không được đặt, nó sẽ mất các thuộc tính đặc biệt của nó, ngay cả khi nó được đặt lại sau đó.

HOSTNAME: Tự động đặt thành tên của máy chủ hiện tại.

HOSTTYPE: Tự động đặt thành chuỗi mô tả duy nhất loại máy mà trên đóbash đang thực thi. Mặc định là hệ thống phụ thuộc.

LINENO: Mỗi lần tham số này được tham chiếu, shell thay thế một số thập phân đại diện cho số dòng tuần tự hiện tại (bắt đầu bằng 1) trong một tập lệnh hoặc hàm. Khi không có trong một tập lệnh hoặc hàm, giá trị được thay thế không được đảm bảo là có ý nghĩa. NếuLINENO không được đặt, nó sẽ mất các thuộc tính đặc biệt của nó, ngay cả khi nó được đặt lại sau đó.

MACHTYPE: Tự động đặt thành chuỗi mô tả đầy đủ loại hệ thống mà trên đóbash đang thực thi trong GNU chuẩn cpu-company-system định dạng. Mặc định là phụ thuộc vào hệ thống.

OLDPWD: Thư mục làm việc trước đó được thiết lập bởiCD chỉ huy.

OPTARG: Giá trị của đối số tùy chọn cuối cùng được xử lý bởigetopts lệnh nội trang.

OPTIND: Chỉ mục của đối số tiếp theo sẽ được xử lý bởigetopts lệnh nội trang.

OSTYPE: Tự động đặt thành chuỗi mô tả hệ điều hành mà trên đóbash đang thực thi. Mặc định là hệ thống phụ thuộc.

PIPESTATUS: Một biến mảng chứa danh sách các giá trị trạng thái thoát khỏi các quy trình trong đường ống nền trước được thực thi gần đây nhất, có thể chỉ chứa một lệnh duy nhất.

PPID: ID tiến trình của cha mẹ của trình bao. Biến này là chỉ đọc.

NKT: Thư mục làm việc hiện tại được thiết lập bởiCD chỉ huy.

RANDOM: Mỗi lần tham số này được tham chiếu, một số nguyên ngẫu nhiên giữa 0 và 32767 được tạo. Chuỗi số ngẫu nhiên có thể được khởi tạo bằng cách gán giá trị cho RANDOM. NếuRANDOM không được đặt, nó sẽ mất các thuộc tính đặc biệt của nó, ngay cả khi nó được đặt lại sau đó.

ĐÁP LẠI: Đặt thành dòng đầu vào được đọc bởiđọc lệnh nội trang khi không có đối số nào được cung cấp.

SECONDS: Mỗi lần tham số này được tham chiếu, số giây kể từ khi trình gọi vỏ được trả về. Nếu một giá trị được gán choSECONDS, giá trị được trả lại khi tham chiếu tiếp theo là số giây kể từ khi gán cộng với giá trị được gán. Nếu SECONDS không được đặt, nó sẽ mất các thuộc tính đặc biệt của nó, ngay cả khi nó được đặt lại sau đó.

SHELLOPTS: Một danh sách các tùy chọn trình bao đã bật được phân tách bằng dấu hai chấm. Mỗi từ trong danh sách là một đối số hợp lệ cho-o tùy chọn chobộ lệnh nội trang. Các tùy chọn xuất hiện trongSHELLOPTS được báo cáo là trên bởiset -o. Nếu biến này nằm trong môi trường khibash khởi động, mỗi tùy chọn trình bao trong danh sách sẽ được kích hoạt trước khi đọc bất kỳ tệp khởi động nào. Biến này là chỉ đọc.

SHLVL: Tăng dần mỗi lần một phiên bảnbash được bắt đầu.

UID: Mở rộng đến ID người dùng của người dùng hiện tại, được khởi tạo lúc khởi động trình bao. Biến này là chỉ đọc.

Các biến sau được sử dụng bởi trình bao. Trong vài trường hợp,bash gán một giá trị mặc định cho một biến; những trường hợp này được ghi nhận.

BASH_ENV: Nếu tham số này được đặt khibash đang thực thi một kịch bản lệnh shell, giá trị của nó được hiểu là tên tệp chứa các lệnh để khởi tạo trình bao, như trong ~ / .bashrc . Giá trị của BASH_ENV được mở rộng tham số, thay thế lệnh và mở rộng số học trước khi được hiểu là tên tệp.CON ĐƯỜNG không được sử dụng để tìm kiếm tên tệp kết quả.

CDPATH: Đường dẫn tìm kiếm choCD chỉ huy. Đây là danh sách các thư mục được phân tách bằng dấu hai chấm, trong đó vỏ tìm các thư mục đích được chỉ định bởiCD chỉ huy. Giá trị mẫu là ".: ~: / Usr".

CỘT: Được sử dụng bởilựa chọn lệnh nội trang để xác định chiều rộng đầu cuối khi in danh sách lựa chọn. Tự động thiết lập khi nhận được SIGWINCH.

COMPREPLY: Một biến mảng mà từ đóbash đọc các hoàn thành có thể được tạo ra bởi một hàm vỏ được gọi bởi cơ sở hoàn thành lập trình.

FCEDIT: Trình chỉnh sửa mặc định chofc lệnh nội trang.

FIGNORE: Một danh sách các hậu tố được phân tách bằng dấu hai chấm để bỏ qua khi thực hiện hoàn tất tên tệp. Tên tệp có hậu tố khớp với một trong các mục nhập trongFIGNORE bị loại trừ khỏi danh sách các tên tệp phù hợp. Giá trị mẫu là ".o: ~".

GLOBIGNORE: Danh sách các mẫu được phân tách bằng dấu hai chấm xác định tập hợp tên tệp sẽ bị bỏ qua khi mở rộng tên đường dẫn. Nếu tên tệp được khớp với mẫu mở rộng tên đường dẫn cũng khớp với một trong các mẫu trongGLOBIGNORE, nó bị xóa khỏi danh sách các kết quả phù hợp.

HISTCONTROL: Nếu được đặt thành giá trị bỏ qua , các dòng bắt đầu bằng mộtkhông gian ký tự không được nhập vào danh sách lịch sử. Nếu được đặt thành giá trị bỏ qua , các dòng khớp với dòng lịch sử cuối cùng không được nhập. Giá trị của lờ đi kết hợp hai tùy chọn. Nếu không được đặt hoặc nếu được đặt thành bất kỳ giá trị nào khác ngoài các giá trị trên, tất cả các dòng được đọc bởi trình phân tích cú pháp sẽ được lưu vào danh sách lịch sử, tùy thuộc vào giá trị củaHISTIGNORE. Chức năng của biến này được thay thế bởi HISTIGNORE. Các dòng thứ hai và tiếp theo của lệnh ghép nhiều dòng không được kiểm tra và được thêm vào lịch sử bất kể giá trị củaHISTCONTROL.

HISTFILE: Tên của tệp mà lịch sử lệnh được lưu. Giá trị mặc định là ~ / .bash_history . Nếu không được đặt, lịch sử lệnh sẽ không được lưu khi một trình bao tương tác thoát.

HISTFILESIZE: Số dòng tối đa chứa trong tệp lịch sử. Khi biến này được gán một giá trị, tệp lịch sử sẽ bị cắt bớt, nếu cần, để không chứa nhiều hơn số dòng đó. Giá trị mặc định là 500. Tệp lịch sử cũng bị cắt bớt thành kích thước này sau khi ghi nó khi một trình bao tương tác thoát.

HISTIGNORE: Một danh sách các mẫu được phân tách bằng dấu hai chấm dùng để quyết định các dòng lệnh nào sẽ được lưu trong danh sách lịch sử. Mỗi mẫu được neo ở đầu dòng và phải khớp với dòng hoàn chỉnh (không ngầm)*'được nối thêm). Mỗi mẫu được kiểm tra dựa trên dòng sau khi kiểm tra được chỉ định bởiHISTCONTROL được áp dụng. Ngoài các ký tự mẫu vỏ bình thường, '&'khớp với dòng lịch sử trước đó. '&'có thể được thoát bằng cách sử dụng dấu gạch chéo ngược; dấu gạch chéo ngược bị xóa trước khi thử khớp. Các dòng thứ hai và tiếp theo của lệnh ghép nhiều dòng không được kiểm tra và được thêm vào lịch sử bất kể giá trị củaHISTIGNORE.

HISTSIZE: Số lượng lệnh cần nhớ trong lịch sử lệnh. Giá trị mặc định là 500.

NHÀ: Thư mục chính của người dùng hiện tại; đối số mặc định choCD lệnh nội trang. Giá trị của biến này cũng được sử dụng khi thực hiện mở rộng dấu ngã.

HOSTFILE: Chứa tên của một tệp có cùng định dạng với / etc / hosts cần được đọc khi trình bao cần hoàn thành tên máy chủ. Danh sách các hoàn thành tên máy chủ có thể được thay đổi trong khi trình bao đang chạy; thời gian tiếp theo hoàn thành tên máy chủ được cố gắng sau khi giá trị được thay đổi,bash thêm nội dung của tệp mới vào danh sách hiện có. Nếu HOSTFILE được đặt, nhưng không có giá trị,bash cố đọc / etc / hosts để có đư