shell判题脚本

发布于 2019-04-21  52 次阅读


最近拿到了往年的省赛题,趁着比赛前打算再做一做.但是省赛题是以文件夹的形式给的,放到oj上再测试有点费时(其实是懒得放),就写了段脚本来判题.

这边假设测试输入文件后缀名为.in,测试输出文件后缀名为.out,且每组输入输出除了后缀名都相同.编写的代码存在main.cpp中(*.in *.out main.cpp 在同一个目录下)

2015自治区赛
├── A
│   ├── A.in
│   ├── A.out
│   └── main.cpp
└── judge.sh

if [ $# != 1 ] ; then
echo "Usage: $0 path"
exit 1;
fi
cd $1
g++ -o main -std=c++11 main.cpp
for file in `ls *.in`
do
	sed -i 's/^\xEF\xBB\xBF//g' ${file}
	sed -i 's/^\xEF\xBB\xBF//g' ${file/.in/.out}
	sed -i 's/\r//' ${file}
	sed -i 's/\r//' ${file/.in/.out}
	./main < ${file} > ${file/.in/.tmp}
	diff ${file/.in/.out} ${file/.in/.tmp} -y --suppress-common-lines 
	if [ $? -eq 0 ]; then
		rm -f ${file/.in/.tmp}
	fi
done
cd -

这边注意下第9-12行,估计给的数据是在windows下弄得,所以一直莫名其妙的错误,这边把bom头去掉并且把windows的换行改成linux的换行就可以了.