tra-loi-cau-hoi-phat-trien-web.com

Kiểm tra nếu một điều kiện là sai

Đây có vẻ là một câu hỏi dễ, tôi tự hỏi tại sao việc googling không mang lại điều gì hữu ích - cũng không phải trong StackOverflow, cũng như trong hướng dẫn. Tôi chỉ cần kiểm tra bằng cách sử dụng bash rằng một điều kiện là sai.

Về những gì tôi tìm thấy tôi đã cố gắng

if ! [ 0==2 ]; then echo Hello; fi

if [ ! 0==2 ]; then echo Hello; fi 

không ai trong số họ in Xin chào.

Tôi chỉ tìm thấy hai câu hỏi tương tự, nhưng câu trả lời cuối cùng trong cả hai trường hợp là mã được cấu trúc lại để không sử dụng điều kiện "sai".

37
Hi-Angel

Ý bạn là:

if ! [ 0 == 2 ]; then
  echo Hello;
fi

Bạn thiếu không gian xung quanh toán tử đẳng thức.

Đây có thể là thời gian để đọc http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html - đặc biệt là các phần về nếu khác và các nhà khai thác. Tôi thường mở cái này khi tôi đang viết kịch bản ..

63
wojciii

Để đánh giá toán học, hãy sử dụng (( )) trong bash. Để sử dụng văn bản [[ ]].

if (( $i == 0 )); then
  echo "i is 0"
else
  echo "i is unequal 0"

Đọc thêm ở đây về các toán tử so sánh trong bash.

Và nhiều hơn nữa trong ngoặc kép

10
RedX

Nếu bạn đang sử dụng lệnh test ([..]), bạn có thể sử dụng tùy chọn so sánh cho số nguyên: -eq, bằng và -ne, không bằng nhau.

if [ 0 -eq 2 ]; then echo true ; else echo false ; fi # false
if [ 0 -eq 0 ]; then echo true ; else echo false ; fi # true

if [ 0 -ne 2 ]; then echo true ; else echo false ; fi # true
if [ 0 -ne 0 ]; then echo true ; else echo false ; fi # false

Trong bash toán tử [...] tương đương với test, một lệnh kiểm tra các loại tệp và so sánh các giá trị; kiểm tra là một lệnh nội bộ: nếu bạn yêu cầu Shell của bạn với type [ nó sẽ trả lời [ is a built in Shell command. Bạn có thể tìm thấy nhị phân quá thường xuyên trong /usr/bin/[.

SYNOPSIS là test EXPRESSION, như bạn có thể đọc từ man test hoặc từ info coreutils test invocation.

Một EXPRESSION bị bỏ qua mặc định là sai. Mặt khác, EXPRESSION là đúng hoặc sai và đặt trạng thái thoát.

Đây là một đoạn trích từ người đàn ông mà cam giúp hiểu rõ hơn một chút

  • (EXPRESSION) EXPRESSION là đúng. Vì vậy, thật dễ dàng để xảy ra lỗi khi coi đó là một hoạt động 0==1. (Hoạt động là 0 == 1 có khoảng trắng, 0==1 là một biểu thức).

  • ! EXPRESSION EXPRESSION là sai.

  • ...
  • INTEGER1 -eq INTEGER2 INTEGER1 bằng INTEGER2
  • INTEGER1 -ne INTEGER2 INTEGER1 KHÔNG bằng INTEGER2

Từ info coreutils test invocation bạn có thể đọc về trạng thái thoát của bài kiểm tra.

Trạng thái thoát:

 0 if the expression is true,
 1 if the expression is false,
 2 if an error occurred.
4
Hastur

Ngoài các đánh giá toán học của bash, bạn có thể sử dụng các biểu thức boolean thay vì if:

[[email protected]:~] $ (( 0 == 0 )) && echo True || echo False
True
[[email protected]:~] $ (( 0 != 0 )) && echo True || echo False
False
3
Maxim Egorushkin