2012-02-24 12 views

Odpowiedz

17

Okazuje się, że pomiędzy if i [ musi być spacja. Dodałem również słowa kluczowe then i fi.

Następujące pracował.

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

EDIT:

jak skomentował poniżej (iw innym odpowiedź), to może być skrócony do elegancko:

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

w takim przypadku nie trzeba nawet pamiętać każdy z zasady dotyczące korzystania z konstrukcji if :)

+2

Można skrócić że nieco: './prog$1 < input$1 > wyjście $ 1 && [ "$ 2"= ""!] && diff wyjście $ 1 oczekiwano $ 1' –

3

upuść, jeśli. [] odrodzi nowe "polecenie" i możesz uruchomić diff lub cokolwiek innego, jeśli wyjdzie z 0, używając & & (wykonaj następną, jeśli poprzednie wychodzi ok). tutaj:

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

a jedno-liner:

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

... as thr4wn skomentował –

Powiązane problemy