Sử dụng &&
toán tử,
cmd1 && cmd2 && cmd3
Trong shellscripting, &&
và các ||
toán tử được mô hình hóa sau khi thực hiện tối ưu hóa các toán tử logic trong C. &&
có nghĩa là toán tử AND và ||
có nghĩa là OR. Unix có liên quan chặt chẽ với C và trong C, toán hạng thứ hai của toán tử logic không được đánh giá nếu kết quả đã được biết từ toán hạng thứ nhất. Ví dụ "false && x"
là false
cho bất kỳ x
, vì vậy không cần phải đánh giá x
(đặc biệt nếu x
là một lệnh gọi hàm); tương tự cho "true || x"
. Điều này cũng được gọi là ngữ nghĩa ngắn mạch .
Và trong Unix, theo cách truyền thống là diễn giải các giá trị trả về của lệnh là giá trị thật "hoàn thành thành công": mã thoát 0 có nghĩa là true
(thành công), không khác nghĩa false
(thất bại). Vì vậy, khi lệnh đầu tiên cmd1 && cmd2
trả về "false"
(trạng thái thoát không khác, biểu thị sự thất bại), trạng thái của lệnh ghép được biết: thất bại. Vì vậy, giải thích tổng cmd1 && cmd2
thể có thể là: "thực thi cmd1
, VÀ THÌ, nếu nó không thất bại cmd2
". Đó là những gì bạn về cơ bản muốn trong câu hỏi của bạn.
Tương tự với OR: cmd1 || cmd2
có thể được hiểu là "thực thi cmd1
, HOẶC NẾU thất bại cmd2
".
Protip: đối với chuỗi dài hơn &&
, hãy xem xét đưa set -e
vào tập lệnh của bạn. Về cơ bản, nó thay đổi dấu chấm phẩy ;
thành &&
một vài trường hợp đặc biệt.