我试图创建一个脚本来测试我的文件是否完全正确,但我之前没有使用过bash:
#!/bin/bash
./myfile <test.in 1>>test.out 2>>testerror.out
if cmp -s "test.out" "pattern.out"
then
echo "Test matches pattern"
else
echo "Test does not match pattern"
fi
if cmp -s "testerror.out" "pattern.err"
then
echo "Errors matches pattern"
else
echo "Errors does not match pattern"
fi
我能否以这样的方式编写它:在调用./script.sh myfile模式后,我的脚本将运行在名为pattern * .in的所有文件上,并检查myfile是否提供与pattern * .out和pattern * .err相同的文件?例如,有文件pattern1,pattern2,pattern4,我想为它们运行测试,但不适用于不存在的pattern3。
我可以以某种方式创建新文件吗? (假设我不需要它们)如果我是从命令行开始的,我会选择像
这样的东西。< pattern.in ./myfile | diff -s ./pattern.out
但我不知道如何在脚本文件中编写它以使其工作。
或许我应该每次都使用rm?
答案 0 :(得分:1)
如果我理解正确的话:
for infile in pattern*.in ; do
outfile="${infile%.in}.out"
errfile="${infile%.in}.err"
echo "Working on input $infile with output $outfile and error $errfile"
./myfile <"$infile" >>"$outfile" 2>>"$errfile"
# Your `if`..`fi` blocks here, referencing infile/outfile/errfile
done
%
替换运算符从变量值的末尾删除子字符串。因此,如果$infile
为pattern.in
,则${infile%.in}
是没有尾随.in
的,即pattern
。 outfile
和errfile
分配使用此功能复制正在处理的特定pattern1
文件的第一部分(例如.in
)。