2012-02-05 11 views
16

Tôi có một tập lệnh là một tập lệnh trong chuỗi người khác gửi email.BASH, kiểm tra xem tệp có tồn tại không và tiếp tục thoát khác

Khi bắt đầu tập lệnh, tôi muốn kiểm tra xem tệp có tồn tại hay không và chỉ tiếp tục nếu tệp tồn tại, nếu không thì chỉ cần thoát.

Đây là sự khởi đầu của kịch bản của tôi:

{ 
if [ ! -f /scripts/alert ]; 
then 
    echo "File not found!" && exit 0 
else 
     continue 
fi 
} 

Tuy nhiên tôi tiếp tục nhận được một thông báo nói:

line 10: continue: only meaningful in a `for', `while', or `until' loop 

Bất kỳ con trỏ?

+2

Tại sao bạn cần 'tiếp tục' ở đây? –

Trả lời

24

Thay đổi nó như thế này:

{ 
if [ ! -f /scripts/alert ]; then 
    echo "File not found!" 
    exit 0 
fi 
} 

Một điều kiện không phải là một vòng lặp, và không có nơi nào bạn cần để chuyển đến. Thực hiện đơn giản là tiếp tục sau khi có điều kiện.

(Tôi cũng không cần thiết loại bỏ các &&. Không phải là nó phải xảy ra, nhưng chỉ trong trường hợp các echo thất bại không có lý do không để thoát.)

+0

Cảm ơn bạn có ý nghĩa hơn sau lời giải thích của bạn :) – user1190083

+1

+1 vì không tiếp tục và tiếp tục thất bại vì thất bại. –

1

Yes. Thả else continue. Nó hoàn toàn không cần thiết.

1

Sự cố của bạn là với đường dây continue thường được sử dụng để chuyển sang lần lặp tiếp theo của vòng lặp for hoặc while.

Do đó, chỉ cần xóa phần else của tập lệnh của bạn sẽ cho phép nó hoạt động.