2010-02-22 29 views
7

Có thể có nhiều toán tử đơn nhất trong câu lệnh if không .. Đây là đoạn mã cho tôi lỗi.bash: Nhiều toán tử đơn trong câu lệnh

Vui lòng sửa mã ở đây.

if [ -f $input_file ] -a [ -f $output_file ] -a [ -f $log_file ] ] 
then 
### Some Code here 
fi 

Cảm ơn Kiran

Trả lời

10
if [ -f "file1" -a -f "file2" -a "file3" ]; then 
    #some code 
fi 
+0

Nó hoạt động giống như Magic .. cảm ơn phản hồi nhanh .. – Kiran

1

[ là một lệnh, không nằm trong báo cáo kết quả if. Như vậy bạn nên vượt qua nó mỗi đối số thích hợp thay vì cố gắng chạy sai nó như bạn có.

if [ arg1 arg2 arg3 arg4 ... ] 
then 
+0

Trong môi trường Cygwin, có C: \ cygwin \ bin \\ [. Exe. Cảm giác thật kỳ lạ khi nhìn vào thư mục này lần đầu tiên. – Boldewyn

+0

Lệnh tương tự '[' trong '/ usr/bin' trên hầu hết các bản phân phối Linux, mặc dù' ['thường là một nội trang bash. –

4

Bạn chỉ có thể xem toán tử [ ... ] chỉ dưới dạng phím tắt cho test .... Các tùy chọn được sử dụng theo cùng một cách.

Vì vậy, trong trường hợp của bạn, bạn có thể hoặc viết cách ghostdog74 hay:

if [ -f $input_file ] && [ -f $output_file ] && [ -f $log_file ] 
then 
### Some Code here 
fi 
5

Nếu bạn sử dụng hai khung Bash, bạn có thể làm điều này:

if [[ -f "$input_file" && -f "$output_file" && -f "$log_file" ]] 

mà tôi tìm thấy sạch hơn để đọc hơn các tùy chọn khác được hiển thị ở đây (nhưng đó là chủ quan). Tuy nhiên, nó có other advantages.

Và, như ghostdog74 hiển thị, bạn nên luôn trích dẫn các biến chứa tên tệp.

+0

Không cần trích dẫn các biến chứa tên tập tin nếu bạn sử dụng dấu ngoặc kép vì BASH không làm WordSplitting với dấu ngoặc kép. Xem http://mywiki.wooledge.org/BashFAQ/031 – Cliff

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