Cách sử dụng các điều kiện thử nghiệm trong một kịch bản Bash

Lệnh kiểm tra có thể được sử dụng trên dòng lệnh Linux để so sánh một phần tử với một phần tử khác nhưng nó thường được sử dụng trong các kịch bản lệnh BASH như là một phần của câu lệnh điều kiện kiểm soát luồng logic và chương trình.

Ví dụ cơ bản

Bạn có thể thử các lệnh này đơn giản bằng cách mở một cửa sổ đầu cuối .

kiểm tra 1 -eq 2 && echo "có" || echo "no"

Lệnh trên có thể được chia nhỏ như sau:

Về bản chất, lệnh này so sánh 1 đến 2 và chúng khớp với câu lệnh "yes" được thực thi, hiển thị "có" và nếu chúng không khớp với câu lệnh "no" được thực thi, hiển thị "không".

So sánh số

Nếu bạn đang so sánh các phần tử phân tích cú pháp dưới dạng số, bạn có thể sử dụng các toán tử so sánh sau đây:

Ví dụ:

kiểm tra 1 -eq 2 && echo "có" || echo "no"

(hiển thị "không" với màn hình vì 1 không bằng 2)

kiểm tra 1 -ge 2 && echo "có" || echo "no"

(hiển thị "không" với màn hình vì 1 không lớn hơn hoặc bằng 2)

kiểm tra 1-gt 2 && echo "có" || echo "no"

(hiển thị "không" với màn hình vì 1 không lớn hơn 2)

kiểm tra 1 -le 2 && echo "có" || echo "no"

(hiển thị "có" cho màn hình vì 1 nhỏ hơn hoặc bằng 2)

test 1 -lt 2 && echo "yes" || echo "no"

(hiển thị "có" cho màn hình vì 1 nhỏ hơn hoặc bằng 2)

kiểm tra 1 -ne 2 && echo "yes" || echo "no"

(hiển thị "có" cho màn hình vì 1 không bằng 2)

So sánh văn bản

Nếu bạn đang so sánh các phần tử phân tích cú pháp dưới dạng chuỗi, bạn có thể sử dụng các toán tử so sánh sau đây:

Ví dụ:

kiểm tra "string1" = "string2" && echo "yes" || echo "no"

(hiển thị "không" với màn hình vì "string1" không bằng "string2")

kiểm tra "string1"! = "string2" && echo "yes" || echo "no"

(hiển thị "có" cho màn hình vì "string1" không bằng "string2")

test -n "string1" && echo "yes" || echo "no"

(hiển thị "có" cho màn hình vì "string1" có độ dài chuỗi lớn hơn 0)

test -z "string1" && echo "yes" || echo "no"

(hiển thị "không" với màn hình vì "string1" có độ dài chuỗi lớn hơn 0)

So sánh tệp

Nếu bạn đang so sánh các tệp, bạn có thể sử dụng các toán tử so sánh sau đây:

Ví dụ:

test / path / to / file1 -n / path / đến / file2 && echo "có"

(Nếu tệp 1 mới hơn tệp 2 thì từ "có" sẽ được hiển thị)

test -e / path / to / file1 && echo "có"

(nếu file1 tồn tại từ "có" sẽ được hiển thị)

test -O / path / to / file1 && echo "có"

(nếu bạn sở hữu tệp 1 thì từ "có" được hiển thị ")

Thuật ngữ

So sánh nhiều điều kiện

Vì vậy, đến nay tất cả mọi thứ đã được so sánh một điều chống lại nhau nhưng những gì nếu bạn muốn so sánh hai điều kiện.

Ví dụ, nếu một con vật có 4 chân và đi "moo" nó có thể là một con bò. Đơn giản chỉ cần kiểm tra cho 4 chân không đảm bảo rằng bạn có một con bò nhưng kiểm tra âm thanh nó làm cho chắc chắn không.

Để kiểm tra cả hai điều kiện cùng một lúc, hãy sử dụng câu lệnh sau:

kiểm tra 4 -eq 4 -a "moo" = "moo" && echo "nó là một con bò" || echo "nó không phải là bò"

Phần quan trọng ở đây là -a là viết tắt của và.

Có một cách tốt hơn và thường được sử dụng để thực hiện cùng một thử nghiệm và đó là như sau:

kiểm tra 4 -eq 4 && test "moo" = "moo" && echo "nó là bò" || echo "nó không phải là bò"

Một thử nghiệm khác mà bạn có thể muốn thực hiện là so sánh hai câu lệnh và nếu đầu ra đúng là một chuỗi. Ví dụ: nếu bạn muốn kiểm tra xem tệp có tên "file1.txt" tồn tại hay tệp có tên "file1.doc" tồn tại, bạn có thể sử dụng lệnh sau

test -e file1.txt -o -e file1.doc && echo "tệp1 tồn tại" || echo "file1 không tồn tại"

Phần quan trọng ở đây là -o là viết tắt của hoặc.

Có một cách tốt hơn và thường được sử dụng để thực hiện cùng một thử nghiệm và đó là như sau:

test -e file1.txt || test -e file1.doc && echo "tệp1 tồn tại" || echo "file1 không tồn tại"

Loại bỏ từ khóa kiểm tra

Bạn không thực sự cần sử dụng kiểm tra từ để thực hiện so sánh. Tất cả những gì bạn phải làm là kèm theo câu lệnh trong dấu ngoặc vuông như sau:

[-e file1.txt] && echo "tệp1 tồn tại" || echo "file1 không tồn tại"

[Và] về cơ bản có nghĩa là giống như kiểm tra.

Bây giờ bạn biết điều này bạn có thể cải thiện khi so sánh nhiều điều kiện như sau:

[4 -eq 4] && ["moo" = "moo"] && echo "nó là bò" || echo "nó không phải là bò"

[-e file1.txt] || [-e file1.doc] && echo "tệp1 tồn tại" || echo "file1 không tồn tại"

Tóm lược

Lệnh kiểm tra hữu ích hơn trong các tập lệnh vì bạn có thể kiểm tra giá trị của một biến với một biến khác và kiểm soát luồng chương trình. Trên dòng lệnh chuẩn, bạn có thể sử dụng nó để kiểm tra xem tệp có tồn tại hay không