期待される出力は、2 番目の種類の入力です。
たとえば、二乗関数をテストする場合、入力は (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