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:
- kiểm tra - điều này có nghĩa là bạn sắp thực hiện một so sánh
- 1 - yếu tố đầu tiên bạn sẽ so sánh
- -eq (bạn so sánh như thế nào, trong trường hợp này, bạn đang kiểm tra xem một số có bằng một số khác không)
- 2 - phần tử bạn đang so sánh phần tử đầu tiên một lần nữa
- && - chạy câu lệnh sau nếu kết quả là đúng
- echo "yes" - lệnh chạy nếu so sánh trả về true
- || - chạy câu lệnh sau nếu kết quả là sai
- echo "no" - lệnh chạy nếu so sánh trả về false
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:
- -eq - có giá trị 1 bằng giá trị 2
- -ge - là giá trị 1 lớn hơn hoặc bằng giá trị 2
- -gt - là giá trị 1 lớn hơn giá trị 2
- -le - là giá trị 1 nhỏ hơn hoặc bằng giá trị 2
- -lt - là giá trị 1 nhỏ hơn giá trị 2
- -ne - giá trị 1 không bằng giá trị 2
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:
- = - chuỗi chuỗi 1 khớp 2
- ! = - là chuỗi 1 khác với chuỗi 2
- -n - là chiều dài chuỗi lớn hơn 0
- -z - là độ dài chuỗi 0
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:
- -ef - Các tệp có cùng số thiết bị và số inode (chúng có cùng tệp) không
- -nt - Là tệp đầu tiên mới hơn tệp thứ hai
- -ot - Là tệp đầu tiên cũ hơn tệp thứ hai
- -b - Tệp tồn tại và là khối đặc biệt
- -c - Tệp tồn tại và là ký tự đặc biệt
- -d - Tệp tồn tại và là một thư mục
- -e - Tệp tồn tại
- -f - Tệp tồn tại và là một tệp thông thường
- -g - Tệp tồn tại và có số nhóm được chỉ định
- -G - Tệp tồn tại và chủ sở hữu theo nhóm của người dùng
- -h - Tệp tồn tại và là một liên kết tượng trưng
- -k - Tệp tồn tại và có bộ bit dính của nó
- -L - Giống như -h
- -O - Các tập tin tồn tại bạn là chủ sở hữu
- -p - Tệp tồn tại và là một đường ống có tên
- -r - Tệp tồn tại và có thể đọc được
- -s - Tệp tồn tại và có kích thước lớn hơn 0
- -S - Tệp tồn tại và là một ổ cắm
- -t - Bộ mô tả tập tin được mở trên thiết bị đầu cuối
- -u - Tệp tồn tại và bit set-user-id được đặt
- -w - Tệp tồn tại và có thể ghi
- -x - Tệp tồn tại và có thể thực thi
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ữ
- Khối đặc biệt - Tệp là một thiết bị khối có nghĩa là dữ liệu được đọc theo khối byte. Đây thường là các tệp thiết bị như ổ đĩa cứng.
- Đặc biệt ký tự - Tệp được thực hiện ngay lập tức khi bạn ghi vào đó và thường là một thiết bị như cổng nối tiếp
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