2012-11-06 44 views
0

我正在編寫一個用於執行測試套件的bash腳本。除了套房直接傳遞給該腳本,像bash - 測試目錄是否包含以.suite結尾的文件

./bash-specs test.suite 

它也應該能夠在一個給定的目錄中執行所有腳本,如果沒有一套傳遞給它,像這樣

./bash-specs # executes all tests in the directory, namely test.suite 

實現此方法像這樣

(($# == 0)) && set -- *.suite 

因此,如果沒有套件傳遞,所有以.suite結尾的文件都會被執行。這工作正常,但如果目錄中不包含這樣的文件將失敗。

這意味着我還需要一個檢查來測試是否真的有文件結尾。 我該怎麼做bash?

我想到了一個試驗樣

[[ -f *.suite ]] 

應該工作,但它似乎當有在該目錄多個文件失敗。

回答

5

原因-f失敗是因爲-f只需要一個參數。當您做[[ -f *.suite ]]時,它擴展爲:

[[ -f test.suite test2.suite test3.suite ]] 

......這是無效的。

相反,這樣做:

shopt -s nullglob 
FILES=`echo *.suite` 
if [[ -z $FILES ]]; then 
    echo "No suites found" 
    exit 
fi 

for i in $FILES; do 
    # Run your test on file $i 
done 

nullglob是一個shell選項,使未發現擴展到什麼,而不是擴展到通配符模式本身通配符模式。一旦$FILES被設置爲文件列表或沒有任何文件,我們可以使用-z來測試空白,並顯示相應的錯誤消息。

0
ls -al | grep "\.suite";echo $? 

這會顯示0,如果文件存在,並且1如果文件不存在

0

我會遍歷每個套件文件是這樣的:

for i in *.suite ; do 
    if [ -x $i ] ; then 
     echo running $i 
    fi 
done 
0

右後:

(($#== 0))& &集 - * .suite

測試是否$ 1是空的(與-z),那麼就意味着沒有名爲* .suite的文件。

相關問題