2011-03-21 160 views
6

有人可以解釋如何測試bash shell腳本嗎?測試bash shell腳本

例如我有與此代碼中有一個sh文件...

#!/bin/sh 

for file in *.txt; do 
    mv "$file" "`basename $file .txt`.doc" 
done 

如何爲它編寫一個測試?就像在Java中一樣,您已經進行了單元測試,您可以在其中編寫像assertEquals這樣的代碼來測試代碼,以獲得所需的輸出。

+0

檢查這些 - > http://stackoverflow.com/questions/1315624/bash和測試驅動開發,http://stackoverflow.com/questions/1339416/testing-bash-scripts – Chaitanya 2011-03-21 19:49:00

+0

單元測試bash腳本。尼斯。 :) – 2011-03-21 20:07:30

+0

這是更好的:'mv「$ file」「$(basename」$ file「.txt).doc」'或'mv「$ file」「$ {file%* .txt} .doc」 – 2011-03-22 01:10:02

回答

3

我想在mv前加一個echo來驗證是否創建了正確的命令。 (總是一個好主意,用的更可能很難撤消更改命令。)

一些可能有用的資源:

的xUnit框架
+0

好吧, 謝謝。但我試圖創建一個測試整個代碼的.sh文件。 – 2011-03-21 19:51:32

+0

@Mr牙齒:在上面添加了一些鏈接。也就是說,shell腳本有點難以有效地進行單元測試,因爲幾乎所有內容都歸結爲調用外部命令。測試這些命令幾乎更加合理和有用,並且通過使用'echo'存儲外部修改來測試腳本本身。 – geekosaur 2011-03-21 20:03:38

7

你可以在Bash中斷言。從高級Bash腳本編程指南看看這個:

http://tldp.org/LDP/abs/html/debugging.html#ASSERT

+1

請不要鼓勵ABS作爲參考 - 通常情況下,它是不受支持的,並養成了展示不良實例的習慣。 Wooledge維基和bash黑客wiki(當然還有官方手冊)都是更好的資源。 – 2017-05-20 20:07:48

-1
#!/bin/sh 
for file in *.txt; do 
    echo mv "$file" "`basename $file .txt`.doc" 
done 
2

嘗試了這一點:assert.sh

source "./assert.sh" 

local expected actual 
expected="Hello" 
actual="World!" 
assert_eq "$expected" "$actual" "not equivalent!" 
# => x Hello == World :: not equivalent!