2016-10-17 12 views
45

Tôi muốn viết một kịch bản lệnh shell để kiểm tra xem có tệp nào đó, archived_sensor_data.json, và nếu có, hãy xóa tệp đó. Sau http://www.cyberciti.biz/tips/find-out-if-file-exists-with-conditional-expressions.html, tôi đã thử như sau:Cách kiểm tra xem tệp có tồn tại trong tập lệnh shell

[-e archived_sensor_data.json] && rm archived_sensor_data.json 

Tuy nhiên, điều này ném một lỗi

[-e: command not found 

khi tôi cố gắng chạy kết quả test_controller kịch bản bằng cách sử dụng lệnh ./test_controller. Có gì sai với mã?

Trả lời

104

Thiếu khoảng trống giữa khung và -e.

#!/bin/bash 
if [ -e x.txt ] 
then 
    echo "ok" 
else 
    echo "nok" 
fi 
+5

Cuối cùng tôi đã thêm hai khoảng trắng, một sau dấu ngoặc vuông mở và một dấu cách trước dấu đóng: '[-e archived_sensor_data.json] && rm archived_sensor_data.json'. Kịch bản dường như hoạt động ngay bây giờ. –

+0

Tôi tin rằng điều này cũng hoạt động trên Bourne Shell 'sh' quá –

4

Dưới đây là một phương pháp khác sử dụng ls:

(ls x.txt && echo yes) || echo no 

Nếu bạn muốn ẩn bất kỳ đầu ra từ ls vì vậy bạn chỉ thấy có hay không, chuyển hướng stdoutstderr để /dev/null:

(ls x.txt >> /dev/null 2>&1 && echo yes) || echo no 
Các vấn đề liên quan