Android

Làm thế nào để kiểm tra nếu một tập tin hoặc thư mục tồn tại trong bash

Bash vs Python для DevOps инженеров и системных администраторов

Bash vs Python для DevOps инженеров и системных администраторов

Mục lục:

Anonim

Nhiều khi viết kịch bản Shell, bạn có thể thấy mình trong tình huống cần thực hiện một hành động dựa trên việc tệp có tồn tại hay không.

Trong Bash, bạn có thể sử dụng lệnh kiểm tra để kiểm tra xem một tệp có tồn tại hay không và xác định loại tệp.

Lệnh kiểm tra có một trong các hình thức cú pháp sau:

test EXPRESSION]

Kiểm tra nếu tệp tồn tại

Khi kiểm tra xem một tệp có tồn tại không, các toán tử FILE được sử dụng phổ biến nhất là -e -f . Cái đầu tiên sẽ kiểm tra xem một tệp có tồn tại bất kể loại nào không, trong khi tệp thứ hai sẽ trả về true chỉ khi FILE là một tệp thông thường (không phải là thư mục hoặc thiết bị).

Tùy chọn dễ đọc nhất khi kiểm tra xem một tệp có tồn tại hay không là sử dụng lệnh test kết hợp với câu lệnh if. Bất kỳ đoạn mã nào dưới đây sẽ kiểm tra xem tệp /etc/resolv.conf có tồn tại không:

FILE=/etc/resolv.conf if test -f "$FILE"; then echo "$FILE exist" fi

FILE=/etc/resolv.conf if; then echo "$FILE exist" fi

FILE=/etc/resolv.conf if]; then echo "$FILE exist" fi

Nếu bạn muốn thực hiện một hành động khác dựa trên việc tệp có tồn tại hay không chỉ đơn giản là sử dụng cấu trúc if / then:

FILE=/etc/resolv.conf if; then echo "$FILE exist" else echo "$FILE does not exist" fi Luôn sử dụng dấu ngoặc kép để tránh các vấn đề khi xử lý tệp có chứa khoảng trắng trong tên của chúng.

Bạn cũng có thể sử dụng lệnh test mà không cần câu lệnh if. Lệnh sau toán tử && sẽ chỉ được thực thi nếu trạng thái thoát của lệnh kiểm tra là đúng, test -f /etc/resolv.conf && echo "$FILE exist"

&& echo "$FILE exist"

] && echo "$FILE exist"

&& { echo "$FILE exist"; cp "$FILE" /tmp/; }

Đối diện với && , tuyên bố sau || toán tử sẽ chỉ được thực thi nếu trạng thái thoát của lệnh kiểm tra là false .

&& echo "$FILE exist" || echo "$FILE does not exist"

Kiểm tra nếu thư mục tồn tại

Toán tử -d cho phép bạn kiểm tra xem một tập tin có phải là một thư mục hay không.

Ví dụ: để kiểm tra xem thư mục /etc/docker có tồn tại không, bạn sẽ sử dụng:

FILE=/etc/docker if; then echo "$FILE is a directory" fi

&& echo "$FILE is a directory"

Bạn cũng có thể sử dụng dấu ngoặc kép , 'linuxize_com-medrectangle-4', 'ezslot_7', 160, '0', '0']));

Kiểm tra nếu tệp không tồn tại

Tương tự như nhiều ngôn ngữ khác, biểu thức kiểm tra có thể được phủ định bằng cách sử dụng ! (dấu chấm than) logic không phải toán tử:

FILE=/etc/docker if; then echo "$FILE does not exist" fi

Giống như trên:

&& echo "$FILE does not exist"

Kiểm tra xem có tồn tại nhiều tệp không

Thay vì sử dụng các cấu trúc if / other lồng nhau phức tạp, bạn có thể sử dụng -a (hoặc && với ; then echo "$FILE is a directory" fi

FILE=/etc/docker if; then echo "$FILE is a directory" fi

Các biến thể tương đương mà không sử dụng câu lệnh IF:

&& echo "both files exist"

] && echo "both files exist"

Toán tử kiểm tra tệp

Lệnh kiểm tra bao gồm các toán tử FILE sau đây cho phép bạn kiểm tra các loại tệp cụ thể:

  • -b FILE - Đúng nếu TẬP_TIN tồn tại và là một tệp đặc biệt khối. -c FILE - Đúng nếu TẬP_TIN tồn tại và là một tệp ký tự đặc biệt. -d FILE - Đúng nếu FILE tồn tại và là một thư mục. -e FILE - Đúng nếu FILE tồn tại và là một tệp, bất kể loại (nút, thư mục, ổ cắm, v.v.). -f FILE - Đúng nếu FILE tồn tại và là một tệp thông thường (không phải là thư mục hoặc thiết bị). -G FILE - Đúng nếu FILE tồn tại và có cùng nhóm với người dùng đang chạy lệnh. -h FILE - Đúng nếu TẬP_TIN tồn tại và là một liên kết tượng trưng. -g FILE - Đúng nếu TẬP_TIN tồn tại và có cờ set-group-id (sgid). -k FILE - Đúng nếu FILE tồn tại và có cờ bit dính. -L FILE - Đúng nếu FILE tồn tại và là một liên kết tượng trưng. -O FILE - Đúng nếu FILE tồn tại và được sở hữu bởi người dùng đang chạy lệnh. -p FILE - Đúng nếu FILE tồn tại và là một đường ống. -r FILE - Đúng nếu FILE tồn tại và có thể đọc được. -S FILE - Đúng nếu FILE tồn tại và là socket. -s FILE - Đúng nếu FILE tồn tại và có kích thước khác không. -u FILE - Đúng nếu cờ tồn tại và set-user-id (suid) được đặt. -w FILE - Đúng nếu FILE tồn tại và có thể ghi. -x FILE - Đúng nếu FILE tồn tại và có thể thực thi được.

Phần kết luận

Trong hướng dẫn này, chúng tôi đã chỉ cho bạn cách kiểm tra xem một tệp hoặc thư mục có tồn tại bằng Bash không.

thiết bị đầu cuối bash