預期輸出是第二種輸入。例如,如果要測試平方函數,則需要輸入(0,1,2,-1,-2)和期望輸出(0,1,4,1,4)。例如,如果要測試平方函數,則需要輸入(0,1,2,-1,-2)和期望輸出(0,1,4,1,4)。
然後,您會比較輸入的每個結果與預期輸出並報告錯誤。
你可以使用數組:
in=(0 1 2 -1 -2)
out=(0 1 4 2 4)
for i in $(seq 0 $((${#in[@]}-1)))
do
((${in[i]} * ${in[i]} - ${out[i]})) && echo -n bad" " || echo -n fine" "
echo $i ": " ${in[i]}"² ?= " ${out[i]}
done
fine 0 : 0² ?= 0
fine 1 : 1² ?= 1
fine 2 : 2² ?= 4
bad 3 : -1² ?= 2
fine 4 : -2² ?= 4
當然,你可以從文件中讀取兩個陣列。
使用((...))進行測試可以調用算術表達式,字符串和文件。嘗試
help test
有關概述。
讀字符串從文件中字方式:
for n in $(< f1); do echo $n "-" ; done
讀入一個數組:
arr=($(< file1))
讀取文件面向行:
for i in $(seq 1 $(cat file1 | wc -l))
do
line=$(sed -n ${i}p file1)
echo $line"#"
done
測試針對程序輸出聽起來像字符串比較和捕獲程序輸出n=$(cmd param1 param2)
:
asux:~/prompt > echo -e "foo\nbar\nbaz"
foo
bar
baz
asux:~/prompt > echo -e "foo\nbar\nbaz" > file
asux:~/prompt > for i in $(seq 1 3); do line=$(sed -n ${i}p file); test "$line" = "bar" && echo match || echo fail ; done
fail
match
fail
而且usesful:正則表達式[[...]]括號用=〜弦上的匹配:
for i in $(seq 1 3)
do
line=$(sed -n ${i}p file)
echo -n $line
if [[ "$line" =~ ba. ]]; then
echo " "match
else echo " "fail
fi
done
foo fail
bar match
baz match
您可以使用'diff'或'cmp'命令來比較輸出。 – 2012-04-12 06:21:41
'diff','cmp'和'comm'程序(特別是前兩個)用於比較兩個文件。因此,您可以在一個文件中捕獲預期的輸出,在另一個文件中捕獲實際輸出,然後比較文件。這是最簡單的方法;它不一定是最好的。 – 2012-04-12 06:22:24
我認爲你的描述有點不對。我閱讀它的方式,你希望輸入與輸出匹配。但我認爲你的意思是你有測試輸入,實際輸出和預期輸出。而你想要區分最後兩個。 – Mikel 2012-04-12 07:09:07