预期输出是第二种输入。
例如,如果您想测试一个平方函数,您的输入应为 (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
进一步有用:在 [[ ... ]] 括号中使用 =~ 对字符串进行正则表达式匹配:
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