Ví dụ về Bash If-Then-Else

Bash If Then Else Example



Trong bài học này, chúng ta sẽ thấy cách chúng ta có thể sử dụng các câu lệnh If-Then-Else trong các script môi trường Bash mà chúng ta viết. Câu lệnh If-Then-Else là một công cụ hữu ích để cung cấp một cách xác định đường dẫn hành động của một tập lệnh khi một số điều kiện được đáp ứng. Hãy để chúng tôi xem cú pháp cho câu lệnh If-Then-Else là gì:

nếu nhưMỘT SỐ LỆNH;
sau đóTHEN-COMMANDS;
khácLỆNH LỆNH;
thì là ở

Trong lệnh trên được hiển thị, nếu một SỐ LỆNH được tìm thấy là true hoặc trạng thái trả về của nó là 0, THEN-COMMANDS sẽ được thực thi. Nếu không đúng như vậy, ELSE-COMMANDS được thực thi. Trong MỘT SỐ LỆNH, chúng ta thường thực hiện một số so sánh chuỗi hoặc so sánh giá trị ở dạng số nguyên. Chúng tôi cũng có thể thực hiện nhiều thao tác liên quan đến tệp. Chúng ta hãy xem xét một số lệnh chính ví dụ được sử dụng chủ yếu khi làm việc với các điều kiện dựa trên tệp:







Sơ cấp Nghĩa
[ -đến ] Trả về true khi tồn tại FILE.
[-NS] Trả về true khi FILE tồn tại & là một tệp đặc biệt của khối.
[-NS] Trả về true khi tồn tại FILE & là tệp đặc biệt của ký tự.
[ -NS ] Trả về true khi FILE tồn tại & là một thư mục.
[ -Và ] Trả về true khi tồn tại FILE.
[ -NS ] Trả về true khi FILE tồn tại và là một tệp thông thường.
[ -NS ] Trả về true khi FILE tồn tại và bit SGID của nó được đặt.
[ -NS ] Trả về true khi FILE tồn tại & là một liên kết tượng trưng.
[-k] Trả về true khi FILE tồn tại và bit dính của nó được đặt.
[ -P ] Trả về true khi tồn tại FILE & là một đường ống được đặt tên (FIFO).
[ -NS ] Trả về true khi FILE tồn tại và có thể đọc được.
[ -NS ] Trả về true khi FILE tồn tại và có kích thước lớn hơn 0.
[ -NS ] Trả về true khi bộ mô tả tệp FD đang mở và tham chiếu đến một thiết bị đầu cuối.
[-u] Trả về true khi FILE tồn tại và bit SUID (set user ID) của nó được đặt.
[ -trong ] Trả về true khi FILE tồn tại và có thể ghi.
[-NS] Trả về true khi FILE tồn tại và có thể thực thi được.
[-O] Trả về true khi FILE tồn tại và được sở hữu bởi ID người dùng hiệu quả.
[ -NS ] Trả về true khi FILE tồn tại và thuộc sở hữu của ID nhóm hiệu quả.
[ -NS ] Trả về true khi FILE tồn tại & là một liên kết tượng trưng.
[ -N ] Trả về true khi FILE tồn tại và đã được sửa đổi kể từ lần đọc cuối cùng.
[ -NS ] Trả về true khi tồn tại FILE & là một ổ cắm.

THEN-COMMANDS và ELSE-COMMANDS có thể là bất kỳ hoạt động UNIX hợp lệ nào hoặc bất kỳ chương trình thực thi nào. Lưu ý rằng sau đóthì là ở các lệnh được phân tách bằng dấu chấm phẩy vì chúng được coi là các phần tử hoàn toàn riêng biệt của một tập lệnh.



Ví dụ đơn giản If-Then-Else

Chúng ta hãy bắt đầu bài học của mình với một ví dụ rất đơn giản với câu lệnh If-Then-Else.
Đây là một chương trình mẫu:



Nếu ví dụ

Nếu ví dụ





Đây là kết quả mà chúng tôi thấy khi chạy tập lệnh của mình:

$. ifelse1.sh
Giá trị giống nhau!
$

Sử dụng đối số dòng lệnh

Chúng ta cũng có thể sử dụng các đối số dòng lệnh trong các tập lệnh của mình và sử dụng số lượng các đối số và bản thân các giá trị làm điều kiện trong câu lệnh IF mà chúng ta xác định. Trước tiên, chúng tôi xác định một tệp văn bản với nội dung sau:



Tên tôi là LinuxHint. Tôi yêu máy chủ, đặc biệt là máy chủ Ubuntu. Họ là vậy
hơi cuối cùng!

Bây giờ, chúng ta có thể viết một tập lệnh để tìm xem một từ có xuất hiện trong tệp văn bản hay không. Bây giờ chúng ta hãy xác định tập lệnh:

quăng đi 'Tìm $ 1 trong $ 2'
nắm chặt $ 1 $ 2
nếu như [ $? -sinh ra 0 ]
sau đó
quăng đi '$ 1 không được tìm thấy trong tệp $ 2.'
khác
quăng đi '$ 1 được tìm thấy trong tệp $ 2.'
thì là ở
quăng đi 'Tập lệnh đã hoàn thành.'

Tập lệnh này rất năng động. Nó coi từ cần tìm và tệp cần tìm từ chính dòng lệnh. Bây giờ, chúng tôi đã sẵn sàng chạy tập lệnh của mình:

. ifelse2.sh tình yêu hello.txt

Chúng ta sẽ thấy một đầu ra như:

Tìm kiếm tình yêutronghello.txt
tình yêu được tìm thấytrong tập tinxin chào.txt.
Tập lệnh đã hoàn thành.

Kiểm tra số lượng đối số dòng lệnh

Bên trong câu lệnh IF, chúng ta thậm chí có thể kiểm tra xem có bao nhiêu đối số dòng lệnh đã được chuyển đến lệnh để chúng ta có thể thực hiện theo cùng một cách:

đếm=$ #
nếu như [ ! $ đếm -gt 1 ]
sau đó
quăng đi 'Không đủ đối số'
khác
quăng đi 'Làm tốt lắm!'
thì là ở

Hãy chạy tập lệnh này ngay bây giờ, chúng ta sẽ thấy kết quả sau:

Đối số dòng lệnh

Đối số dòng lệnh

Câu lệnh If-Then-Elif-Else

Chúng ta cũng có thể có nhiều câu lệnh IF trong cùng một khối để thu hẹp đường dẫn quyết định mà chương trình của chúng ta sử dụng để thực hiện các lệnh mà chúng ta đã xác định. Đây là cú pháp để xác định nhiều câu lệnh IF trong các tập lệnh của chúng tôi:

nếu nhưKIỂM TRA-LỆNH;
sau đó
CÂU LỆNH KẾT QUẢ;
elif
MỘT LỆNH KHÁC;
sau đó
LỆNH-KẾT QUẢ KHÁC;
khác
ALTERNATE-COMMANDS;
thì là ở

Điều này trông khá quen thuộc và cũng dễ theo dõi. Hãy để chúng tôi xác định một ví dụ đơn giản để thiết lập cách thức hoạt động của cây:

đếm=$ #
nếu như [ $ đếm -eq 1 ]
sau đó
quăng đi 'Chỉ tìm thấy một đối số.'
elif [ $ đếm -eq 2 ]
sau đó
quăng đi 'Tốt hơn, hai đối số được tìm thấy.'
khác
quăng đi 'Làm tốt lắm, nhiều lập luận được tìm thấy!'
thì là ở

Đây là những gì chúng ta nhận được với lệnh này:

Ví dụ If Then Elif Else

Ví dụ If Then Elif Else

Sử dụng các vị trí trường hợp

Câu lệnh IF-ELSE hữu ích khi bạn có một danh sách lớn các tùy chọn mà bạn cần phải quyết định. Nhưng trong trường hợp bạn chỉ muốn thực hiện một hành động trong một vài trường hợp khớp chính xác với kết quả, chúng ta cũng có thể sử dụng câu lệnh CASE trong tập lệnh Bash. Cú pháp của nó trông giống như:

trường hợpBIỂU HIỆNtrongTRƯỜNG HỢP 1)LỆNH ĐỂ THỰC HIỆN;
CASE2)LỆNH ĐỂ THỰC HIỆN;
CASE2)LỆNH ĐỂ THỰC HIỆN;
...)LỆNH ĐỂ THỰC HIỆN;
*)LỆNH ĐỂ THỰC HIỆN;
esac

Trường hợp cuối cùng với * đóng vai trò là trường hợp mặc định và sẽ được thực thi khi không có trường hợp nào được xác định ở trên là trùng khớp.

Hãy để chúng tôi nhanh chóng tạo một ví dụ đơn giản bằng cách sử dụng các câu lệnh CASE:

trường hợp '$ 1' trong
1)
quăng đi 'Giá trị là 1.'
;;
2)
quăng đi 'Giá trị là 2.'
;;
3)
quăng đi 'Giá trị là 3.'
;;
*)
quăng đi 'Giá trị khác được thông qua.'
esac

Mỗi câu lệnh CASE được kết thúc bởi ;; (dấu chấm phẩy kép). Đây là những gì chúng ta nhận được với lệnh này:

Ví dụ CASE

Ví dụ CASE

Phần kết luận

Trong bài học này, chúng tôi đã xem xét cách chúng tôi có thể sử dụng các câu lệnh IF-ELSE, IF-THEN-ELIF và CASE trong các tập lệnh Bash mà chúng tôi xác định để thực hiện các hành động cụ thể trên cơ sở các giá trị tồn tại trong chương trình của chúng tôi hoặc được chuyển bởi người dùng bằng cách sử dụng vị trí thông số.