Cách thực thi các lệnh từ trong tập lệnh Shell

How Execute Commands From Within Shell Script



Trong bash, việc thực thi các lệnh từ shell script lúc đầu có thể hơi đáng sợ và có thể đòi hỏi một bước nhảy vọt về niềm tin. Rốt cuộc, các lệnh được thực thi trong một tập lệnh bash không tương tác. Ở đây chúng ta sẽ đặt nền tảng để thực hiện các lệnh từ bên trong một tập lệnh shell trả lời các câu hỏi sau về các lệnh: Chúng đến từ đâu? Họ là ai? Làm thế nào để chúng tôi sử dụng chúng trong một tập lệnh?

Các lệnh đến từ đâu?

Các lệnh trong bash đến từ bất kỳ danh mục nào sau đây:







Bash chính nó (xem nội trang)

Bash đi kèm với một bộ lệnh riêng để cho phép truy cập vào các tính năng tích hợp của nó như khai báo mảng, đọc dòng từ tệp và các tính năng khác được tích hợp để bash. Chúng tôi gọi các lệnh thuộc danh mục này, lệnh nội trang bash, hoặc gọi tắt là nội trang.



Các tệp thực thi trong môi trường của bạn (xem các lệnh bên ngoài)

Theo mặc định, bash sẽ kế thừa các biến nhất định theo mặc định. Điều này được quan sát thấy trong trường hợp của biến PATH bao gồm các vị trí cho các tệp thực thi được tham chiếu như các lệnh bên ngoài trong bash. Đó là, nếu Xoăn lệnh nằm trong đường dẫn của bạn, nó có thể được thực thi từ bên trong tập lệnh bash giống như trong chế độ tương tác. Chúng tôi gọi các lệnh thuộc danh mục này, các lệnh bên ngoài hay gọi tắt là các lệnh.



Chức năng do người dùng xác định (xem các chức năng)

Trước khi thực hiện các lệnh bên ngoài và nội trang, hãy kiểm tra xem một hàm có được xác định hay không. Nếu đó là chức năng được thực thi dưới dạng lệnh. Nếu không, nó sẽ giảm thứ tự ưu tiên cho các lệnh. Để thực thi hàm được định nghĩa bên ngoài tập lệnh, chúng phải được khai báo với thuộc tính -x; nếu không, chúng có thể được bao gồm bằng cách sử dụng. Chỉ huy. Chúng tôi gọi tắt các lệnh thuộc danh mục này là các hàm hoặc hàm do người dùng xác định.





Lệnh là gì

Lệnh là bất kỳ từ nào được coi như một điểm vào của một chương trình trong môi trường shell. Trong trường hợp lệnh được thực thi, bản thân lệnh và các đối số tùy chọn được chuyển vào dưới dạng các tham số vị trí, $ {0}, $ {1}, $ {2},… Tham số vị trí thứ 0 ($ {0}) chỉ định chính nó và không thay đổi trong ngữ cảnh. Nghĩa là, không giống như các tham số vị trí trong các hàm, $ {1}, $ {2},… có thể thay đổi tùy theo ngữ cảnh, $ {0} không thay đổi giữa các lần gọi hàm.

Các lệnh được xác định phạm vi tùy thuộc vào vị trí khai báo và các thuộc tính được chỉ định dưới dạng toàn cục, tích hợp sẵn để bash hoặc cục bộ cho chương trình bash của bạn.



Dưới đây là danh sách các loại lệnh cần biết.

Lệnh nội trang

Đây là những công dân hạng nhất của vũ trụ bash, bao gồm các ký tự như ‘.’ ‘:’ ‘[‘ ‘]’ Và các từ dành riêng như tuyên bố trong bash. Bạn tin tưởng vào các lệnh này, có trong danh sách các lệnh nội trang bash, có sẵn để sử dụng trong tập lệnh bash của bạn.

Tùy thuộc vào chỉ định và số phiên bản của trình thông dịch bash của bạn, một số lệnh có thể không khả dụng.

Lệnh bên ngoài

Các lệnh bên ngoài là các tệp thực thi có thể truy cập bên ngoài một tập lệnh bash như curl. Không giống như các hàm, các lệnh bên ngoài không được lưu trữ dưới dạng các biến.

Mức độ ưu tiên của loại lệnh càng thấp thì lệnh đó có thể được diễn giải càng muộn. Các lệnh bên ngoài có thứ tự ưu tiên thấp nhất trong bash. Đó là trước khi chạy một lệnh bên ngoài, trình thông dịch bash, sẽ tìm kiếm các hàm, sau đó là nội trang và cuối cùng thử xem một lệnh có tồn tại bên ngoài hay không. Nếu không, bạn sẽ thấy lỗi sau.

bash: chưa biết-lệnh:chỉ huykhông tìm thấy

Trong tập lệnh bash, các hàm có thể ghi đè hành vi lệnh bên ngoài nếu chia sẻ cùng một tên như chúng ta đã thấy trước đây trong các ví dụ về curl bash. Dưới đây là một ví dụ về lệnh bên ngoài tùy chỉnh sử dụng một hàm.

Xoăn() {
chỉ huy $ {FUNCNAME}...
}

Điều này hoạt động vì các hàm có mức độ ưu tiên cao hơn các lệnh bên ngoài và thậm chí cả nội trang bash. Giới hạn là các ký tự được phép trong tên hàm.

Lưu ý rằng ví dụ trên có thể được thực hiện bằng cách sử dụng bí danh như sau.

bí danh Xoăn= ’
{
Xoăn ...
}
'

Trong trường hợp bí danh, loại lệnh có thể khác nhau tùy thuộc vào ngữ cảnh thực thi, trong khi trong trường hợp các lệnh bên ngoài tùy chỉnh sử dụng phương thức hàm, điểm nhập luôn là một hàm.

Chức năng

Quy tắc hàm trong bash. Trước khi xem xét nội trang và lệnh bên ngoài, hãy kiểm tra xem một hàm được xác định bởi tên hàm ứng cử viên, từ đầu tiên xuất hiện trên một dòng hoặc sau dấu; ký tự chỉ định kết thúc của một dòng lệnh. Ngoại lệ duy nhất là các biến bash được viết bằng chữ hoa, chẳng hạn như $ {FUNCNAME}.

bí danh() { FUNCNAME= asdf;quăng đi $ {@ ,,};}
bí danh Xoăn='KIỂM TRA CURL ALIAS' #?

Các lệnh đơn giản

Các lệnh đơn giản được định nghĩa trong các trang bash man như một từ theo sau là các đối số tùy chọn. Trong ngữ cảnh, một lệnh đơn giản có thể là nội trang, lệnh bên ngoài hoặc hàm.

Cách thực hiện các lệnh từ bên trong một tập lệnh bash

Bây giờ chúng ta đã biết những loại lệnh nào có sẵn, chúng ta có thể mở rộng thêm cách sử dụng chúng trong các tập lệnh của bạn. Trước tiên, chúng ta sẽ cần biết cách thức hoạt động của ưu tiên lệnh trong bash.

Dưới đây là một số cách để kiểm soát mức độ ưu tiên trong tập lệnh bash.

Hãy để bash quyết định

command_name

Đối với hầu hết các phần, đặc biệt là ở phần đầu, chúng tôi chỉ để bash quyết định sử dụng lệnh nào. Tuy nhiên, có những trường hợp ý định của bạn có thể không được diễn giải chính xác bởi bash. Đó là trường hợp khi tên hàm và lệnh bên ngoài hoặc nội trang chồng chéo lên nhau.

Thực thi một lệnh bên ngoài

chỉ huycommand_name

Giả sử rằng có một command_name lệnh bên ngoài có sẵn trong chế độ tương tác và bạn muốn sử dụng nó trong một tập lệnh bash. Chúng ta có thể nói rõ ràng với bash rằng command_name là một lệnh bên ngoài bằng cách sử dụng nội trang lệnh.

Ví dụ về lệnh bên ngoài

Các ví dụ lệnh bên ngoài giả sử những điều sau được cài đặt:

tập tin
đi
bức tượng nhỏ
Ví dụ: Nhận loại tệp và thông tin
{ # nhận loại tệp và thông tin
tập tin $ {infile} # (1,2)
}
# (1) lệnh, tệp
# (2) infile = {Đường dẫn đến tệp}
Ví dụ: Giai đoạn được sửa đổi và các tệp mới trong git
{ # tệp giai đoạn trong git
git thêm.# (1)
}
# (1) lệnh, git
Ví dụ: Tạo nghệ thuật ascii bằng bức tượng nhỏ
{ # tạo nghệ thuật ascii
bức tượng nhỏ$ {message} # (1,2)
}
# (1) lệnh, figlet
# (2) message = {Thông báo hiển thị dưới dạng nghệ thuật ascii}

Thực thi một lệnh nội trang

được xây dựng trongcommand_name

Giả sử rằng command_name là một trong những lệnh được định nghĩa như một nội trang trong bash. Để cho bash biết rằng chúng tôi muốn chạy command_name dưới dạng nội trang, chúng tôi sử dụng nội trang.

Ví dụ về lệnh Builtin
Ví dụ: Có bao nhiêu nội trang?
được xây dựng trong{,}{,,}{,,,} # có bao nhiêu nội trang?
Ví dụ: Phantom tuyên bố
{
tuyên bố() { quăng điGiáo sư!;}
tuyên bố–Xftuyên bố #?
}

Phần kết luận

Khá dễ dàng để thực hiện một lệnh từ bên trong một tập lệnh bash shell. Có ba loại lệnh chính. Biết cách các lệnh đơn giản được diễn giải trong bash có thể dẫn đến cải thiện khả năng kiểm soát đối với loại lệnh nào được thực thi trong thời gian chạy.