2012-04-18 50 views
21

Tôi có một câu hỏi đơn giản, nhưng tôi không thể tìm thấy bất kỳ câu trả lời nào cho nó. Có 2 công tắc cho điều kiện nếu kiểm tra tập tin, -e và -f. Sự khác biệt giữa hai điều đó là gì?Sự khác biệt giữa if -e và if -f

+0

@jww Đó là câu hỏi về khối nếu trong tập lệnh bash - nó có thể không phải là ngôn ngữ lập trình, nhưng tôi chắc chắn sẽ không gọi nó là chủ đề. – Ahatius

+0

Đủ công bằng. Bạn đã gắn thẻ như vậy; vì vậy bạn đã chuyển nó về phía lập trình và tránh xa "làm thế nào để sử dụng lệnh này". Đã rút lại. – jww

Trả lời

34

Xem: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html

Tôi tin rằng những người không phải là "nếu công tắc", chứ không phải "kiểm tra công tắc" (bởi vì bạn phải sử dụng chúng trong [] dấu ngoặc

Nhưng sự khác biệt là:.

[ -e FILE ] đúng nếu FILE tồn tại.

này sẽ trở thành sự thật cho cả /etc/hosts/dev/null.

[ -f FILE ] Đúng nếu FILE tồn tại và là tệp thông thường. Điều này sẽ trả về đúng cho /etc/hostsfalse cho /dev/null (vì đây không phải là tệp thông thường).

17
$ man bash 
     -e file 
       True if file exists. 
     -f file 
       True if file exists and is a regular file. 

Một tập tin thường xuyên là cái gì đó không phải là một thư mục/symlink/ổ cắm/thiết bị vv

+0

Cảm ơn câu trả lời. Đoán điều này có nghĩa là cho -f trở thành sự thật, bạn phải tham chiếu đến một tập tin mà không phải là một liên kết hoặc một cái gì đó như thế? – Ahatius

+0

Có. Chúng thường có một '-' trong ký tự đầu tiên của đầu ra ls -l. – jman

+0

Ok, cảm ơn rất nhiều! – Ahatius

3

-e kiểm tra cho bất kỳ loại đối tượng hệ thống tập tin; -fchỉ kiểm tra tệp thường xuyên.

1

Câu lệnh if thực sự sử dụng chương trình 'kiểm tra' cho các bài kiểm tra. Bạn có thể viết câu lệnh if hai cách:

if [ -e filename ]; 

hoặc

if test -e filename; 

Nếu bạn biết điều này, bạn có thể dễ dàng kiểm tra man page của 'thử' để tìm hiểu ý nghĩa của các bài kiểm tra khác nhau:

man test 
Các vấn đề liên quan