it-swarm-vi.com

Bash: chạy lệnh nếu lệnh thất bại

Tôi muốn làm một cái gì đó như thế này:

if cmd1 && cmd2
echo success
else
echo epic fail
fi

Tôi nên làm thế nào?

51
michelemarcon

Chúng nên làm những gì bạn cần:

cmd1 && cmd2 && echo success || echo epic fail

hoặc là

if cmd1 && cmd2; then
    echo success
else
    echo epic fail
fi
79
Petr Uzel

Petr Uzel được phát hiện nhưng bạn cũng có thể chơi với phép thuật $?.

$? giữ mã thoát khỏi lệnh cuối cùng được thực thi và nếu bạn sử dụng mã này, bạn có thể viết các tập lệnh của mình khá linh hoạt.

Câu hỏi này chạm vào chủ đề này một chút, Cách tốt nhất để sử dụng $? Trong bash? .

cmd1 
if [ "$?" -eq "0" ]
then
  echo "ok"
else
  echo "Fail"
fi

Sau đó, bạn cũng có thể phản ứng với các mã thoát khác nhau và làm những việc khác nhau nếu bạn muốn.

25
Johan

Mã giả trong câu hỏi không tương ứng với tiêu đề của câu hỏi.

Nếu bất cứ ai cần thực sự biết cách chạy lệnh 2 nếu lệnh 1 thất bại, đây là một lời giải thích đơn giản:

  • cmd1 || cmd2: Cái này sẽ chạy cmd1 và trong trường hợp thất bại, nó sẽ chạy cmd2
  • cmd1 && cmd2: Cái này sẽ chạy cmd1 và trong trường hợp thành công, nó sẽ chạy cmd2
  • cmd1 ; cmd2: Cái này sẽ chạy cmd1, và sau đó nó sẽ chạy cmd2, độc lập với sự thất bại hoặc thành công của việc chạy cmd1.
17