OnWorks Linux và Windows Online WorkStations

Logo

Lưu trữ trực tuyến miễn phí cho máy trạm

<Trước | Nội dung | Tiếp theo>

Nếu bạn muốn, lời nhắc có thể thực thi các tập lệnh shell và hoạt động khác nhau trong các điều kiện khác nhau. Bạn thậm chí có thể có lời nhắc phát một giai điệu mỗi khi bạn ra lệnh, mặc dù điều này sẽ sớm trở nên nhàm chán. Bạn có thể tìm thêm thông tin trong Bash-Prompt HOWTO.


hình ảnh

7.2.5. Tập lệnh shell


7.2.5.1. Kịch bản là gì?


Một tập lệnh shell, như chúng ta đã thấy trong các ví dụ về cấu hình shell, là một tệp văn bản chứa các lệnh shell. Khi một tệp như vậy được sử dụng làm đối số không phải tùy chọn đầu tiên khi gọi Bash, và cả -c cũng không -s tùy chọn được cung cấp, Bash đọc và thực hiện các lệnh từ tệp, sau đó thoát. Phương thức hoạt động này tạo ra một

vỏ không tương tác. Khi Bash chạy một tập lệnh shell, nó sẽ đặt tham số đặc biệt 0 thành tên của tệp, thay vì tên của trình bao và các tham số vị trí (mọi thứ theo sau tên của tập lệnh) được đặt thành các đối số còn lại, nếu có. Nếu không có đối số bổ sung nào được cung cấp, các tham số vị trí không được đặt.


Một tập lệnh shell có thể được thực thi bằng cách sử dụng chmod lệnh để bật bit thực thi. Khi Bash tìm thấy một tệp như vậy trong khi tìm kiếm PATH đối với một lệnh, nó tạo ra một trình bao con để thực thi nó. Nói cách khác, thực thi


tên tập tin TRANH LUẬN


tương đương với việc thực thi


bash tên tệp ARGUMENTS


nếu "tên tệp" là một tập lệnh shell thực thi. Lớp vỏ con này tự khởi động lại, để hiệu ứng giống như một lớp vỏ mới đã được gọi ra để diễn giải tập lệnh, ngoại trừ vị trí của các lệnh được cha mẹ ghi nhớ (xem băm trong các trang Thông tin) được con giữ lại.


Hầu hết các phiên bản của UNIX biến điều này thành một phần của cơ chế thực thi lệnh của hệ điều hành. Nếu dòng đầu tiên của tập lệnh bắt đầu bằng hai ký tự "#!", Phần còn lại của dòng chỉ định một trình thông dịch cho chương trình. Do đó, bạn có thể chỉ định bash, ôi, perl hoặc một số trình thông dịch hoặc trình bao khác và viết phần còn lại của tệp script bằng ngôn ngữ đó.


Các đối số cho trình thông dịch bao gồm một đối số tùy chọn duy nhất theo sau tên trình thông dịch trên dòng đầu tiên của tệp script, tiếp theo là tên của tệp script, tiếp theo là phần còn lại của các đối số. Bash sẽ thực hiện hành động này trên các hệ điều hành không tự xử lý.


Các tập lệnh bash thường bắt đầu bằng


#! / bin / bash (giả sử rằng Bash đã được cài đặt trong / thùng rác), vì điều này đảm bảo rằng Bash sẽ được sử dụng để diễn giải tập lệnh, ngay cả khi nó được thực thi dưới một trình bao khác.


hình ảnh


7.2.5.2. Một số ví dụ đơn giản


Một tập lệnh rất đơn giản chỉ bao gồm một lệnh, chào người dùng thực thi nó:


[jerry @ nothing ~] mèo xin chào.sh

#! / bin / bash

echo "Xin chào $ USER"

[jerry @ nothing ~] mèo xin chào.sh

#! / bin / bash

echo "Xin chào $ USER"

Tập lệnh thực sự chỉ bao gồm một lệnh, bỏ lỡ, sử dụng giá trị của ($) cái USER biến môi trường để in một chuỗi được tùy chỉnh cho người dùng phát lệnh.


Một lớp lót khác, được sử dụng để hiển thị những người dùng được kết nối:


#! / bin / bash

ai | cắt -d "" -f 1 | sắp xếp -u

#! / bin / bash

ai | cắt -d "" -f 1 | sắp xếp -u

Đây là một tập lệnh bao gồm một số dòng khác, mà tôi sử dụng để tạo bản sao lưu của tất cả các tệp trong một thư mục. Đầu tiên, tập lệnh tạo danh sách tất cả các tệp trong thư mục hiện tại và đặt nó vào biến DANH SÁCH. Sau đó, nó đặt tên của bản sao cho mỗi tệp, và sau đó nó sao chép tệp. Đối với mỗi tệp, một thông báo được in:


xới đất: ~> cat bin / makebackupfiles.sh

#! / bin / bash

# tạo bản sao của tất cả các tệp trong thư mục LIST = `ls`

cho tôi trong $ LIST; làm

ORIG = $ i

DEST = $ i.old

cp $ ORIG $ DEST echo "đã sao chép $ i"

thực hiện

xới đất: ~> cat bin / makebackupfiles.sh

#! / bin / bash

# tạo bản sao của tất cả các tệp trong thư mục LIST = `ls`

cho tôi trong $ LIST; làm

ORIG = $ i

DEST = $ i.old

cp $ ORIG $ DEST echo "đã sao chép $ i"

thực hiện

Chỉ cần nhập một dòng như mv * *.cũ sẽ không hoạt động, như bạn sẽ thấy khi thử điều này trên một tập hợp các tệp thử nghiệm. Một bỏ lỡ lệnh đã được thêm vào để hiển thị một số hoạt động. bỏ lỡNói chung hữu ích khi một tập lệnh không hoạt động: hãy chèn một tập lệnh sau mỗi bước nghi ngờ và bạn sẽ tìm thấy lỗi ngay lập tức.


Sản phẩm /etc/rc.d/init.d thư mục chứa vô số ví dụ. Hãy xem tập lệnh điều khiển máy chủ ICanSeeYou hư cấu này:


# / Bin / sh

# description: ICanSeeYou cho phép bạn xem những người có mạng


# tên quy trình: ICanSeeYou

# tệp pidfile: /var/run/ICanSeeYou/ICanSeeYou.pid

# cấu hình: /etc/ICanSeeYou.cfg


# Thư viện hàm nguồn.

. /etc/rc.d/init.d/functions


# Xem chúng tôi được gọi như thế nào (với các đối số nào). trường hợp "$ 1" trong

khởi đầu)

echo -n "Đang khởi động ICanSeeYou:" daemon ICanSeeYou

bỏ lỡ

touch / var / lock / subsys / ICanSeeYou

;;

dừng lại)

echo -n "Tắt ICanSeeYou:"

# / Bin / sh

# description: ICanSeeYou cho phép bạn xem những người có mạng


# tên quy trình: ICanSeeYou

# tệp pidfile: /var/run/ICanSeeYou/ICanSeeYou.pid

# cấu hình: /etc/ICanSeeYou.cfg


# Thư viện hàm nguồn.

. /etc/rc.d/init.d/functions


# Xem chúng tôi được gọi như thế nào (với các đối số nào). trường hợp "$ 1" trong

khởi đầu)

echo -n "Đang khởi động ICanSeeYou:" daemon ICanSeeYou

bỏ lỡ

touch / var / lock / subsys / ICanSeeYou

;;

dừng lại)

echo -n "Tắt ICanSeeYou:"


killproc ICanSeeYou tiếng vang

rm -f / var / lock / subsys / ICanSeeYou

rm -f /var/run/ICanSeeYou/ICanSeeYou.pid

;;

trạng thái)

trạng thái ICanSeeYou

;;

khởi động lại)

$ 0 dừng

$ 0 bắt đầu

;;

*)

echo "Cách sử dụng: $ 0 {start | stop | restart | status}" thoát 1

nó C


thoát 0

killproc ICanSeeYou tiếng vang

rm -f / var / lock / subsys / ICanSeeYou

rm -f /var/run/ICanSeeYou/ICanSeeYou.pid

;;

trạng thái)

trạng thái ICanSeeYou

;;

khởi động lại)

$ 0 dừng

$ 0 bắt đầu

;;

*)

echo "Cách sử dụng: $ 0 {start | stop | restart | status}" thoát 1

nó C


thoát 0

Đầu tiên, với . command (dot) một tập hợp các hàm shell, được sử dụng bởi hầu hết tất cả các tập lệnh shell trong

/etc/rc.d/init.d, Nó đã nạp đầy. Sau đó a trường hợp lệnh được đưa ra, xác định 4 cách khác nhau mà tập lệnh có thể thực thi. Một ví dụ có thể là Tôi có thể thấy bạn Bắt đầu. Quyết định áp dụng trường hợp nào được thực hiện bằng cách đọc đối số (đầu tiên) trong tập lệnh, với biểu thức $1.


Khi không có đầu vào tuân thủ nào được đưa ra, trường hợp mặc định, được đánh dấu bằng dấu hoa thị, sẽ được áp dụng, khi tập lệnh đưa ra thông báo lỗi. Các trường hợp danh sách được kết thúc bằng nó C tuyên bố. bên trong Bắt đầu trong trường hợp chương trình máy chủ được khởi động dưới dạng daemon và ID tiến trình và khóa được gán. bên trong dừng lại trường hợp, quá trình máy chủ được truy tìm và dừng lại, khóa và PID bị xóa. Các tùy chọn, chẳng hạn như daemon tùy chọn và các chức năng như killproc, được định nghĩa trong /etc/rc.d/init.d/functions tập tin. Thiết lập này dành riêng cho phân phối được sử dụng trong ví dụ này. Các initscripts trên hệ thống của bạn có thể sử dụng các chức năng khác, được định nghĩa trong các tệp khác hoặc không có chức năng nào cả.


Sau khi thành công, tập lệnh trả về mã thoát bằng XNUMX cho mã mẹ của nó.


Tập lệnh này là một ví dụ điển hình về việc sử dụng các hàm, giúp tập lệnh dễ đọc hơn và công việc được hoàn thành nhanh hơn. Lưu ý rằng họ sử dụng sh thay vì bash, để làm cho chúng hữu ích trên nhiều hệ thống hơn. Trên hệ thống Linux, gọi bash as sh dẫn đến trình bao chạy ở chế độ tuân thủ POSIX.


Điện toán đám mây hệ điều hành hàng đầu tại OnWorks: