2012-02-24 31 views

Trả lời

17

nó chỉ ra rằng cần phải có một khoảng trống giữa if[. Ngoài ra, tôi đặt trong các từ khóa thenfi.

Làm việc sau.

#!/bin/bash 
cat input$1 | ./prog$1 > output$1 && if [ "$2" != "" ]; then diff output$1 expected$1; fi 

EDIT:

như nhận xét dưới đây (và trong câu trả lời khác), điều này có thể thanh lịch được rút ngắn xuống còn:

cat input$1 | ./prog$1 > output$1 && [ "$2" != "" ] && diff output$1 expected$1 

trong trường hợp mà tôi thậm chí không cần phải nhớ bất kỳ các quy tắc về cách sử dụng cấu trúc if :)

+2

Bạn có thể rút ngắn một chút: './prog$1 < input$1 > đầu ra $ 1 && [ "$ 2"= ""!] && diff đầu ra $ 1 dự kiến ​​$ 1' –

3

thả nếu. [] sẽ sinh ra một "lệnh" mới và bạn có thể chạy diff hoặc bất cứ điều gì sau khi nó thoát với 0 bằng cách sử dụng & & (chạy tiếp theo nếu thoát trước đó ok). ở đây:

echo lol && [ $((10-1)) -eq 9 ] && echo math\! 

và một phần lót của bạn:

#!/bin/bash 
cat input$1 | ./prog$1 > output$1 && [ "$2" != "" ] && diff output$1 expected$1 
+0

... như thr4wn đã nhận xét –

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