好吧,这是我的第一个bash程序,我真的迷失了这个。 摘要测试需要0-2 args并返回'same'或'different',具体取决于cmp退出状态。
我要做的是将所有.out放入一个变量中,将所有.stds放在另一个变量中。然后我想迭代出现的两个变量:
如果我有一个.out但不是.std的同一个基本名称,我想打印'missing file.std'
如果我有所有对应的file.out和file.std文件包含相同的内容我返回'所有案例都通过'
如果cmp失败,我会计算它失败的次数(即file.out和file.std不同的次数)
如果有1个参数,则$ 1包含所有.out和.std文件
如果有2个args $ 1持有.out和$ 2持有.std
否则我们使用当前目录
我遇到的问题是我的输出很奇怪。 我的0 arg输出就像./file不同 我的1个arg输出是file.out./* 而我的arg 2说缺少file.out / * .std 有谁知道发生了什么事?
T=*.out
S=*.std
if [[ $# = 1 ]]; then
T=$1
S=$1
fi
if [[ $# = 2 ]]; then
T=$1
S=$2
fi
N=0
fin=0
for i in $T/*; do
count=0
for j in $S/*; do
if [[ ${i%.out} = ${j%.std} ]]; then
if cmp -s $i $j; then
echo ${i%.out} same
else
let N=$N+1
echo ${i%.out} different
fi
else
let count=$count+1
if [[ $count=${#y} ]]; then
let fin=$count
F=${i%.out}.std
fi
fi
done
done
if [[ $fin = 0 ]]; then
if [[ N = 0 ]]; then
echo all tests succeeded
else
echo $N tests failed
fi
else
echo missing file: $F
fi
答案 0 :(得分:0)
# copy to file: sameOrDiff, chmod +x sameOrDiff
# run: $ sameOrDiff out std
# this will get you started, modify for your
# precise output requirements
x=$1; y=$2
ls *.$x *.$y |
sed 's/\.[^\.]*$//' | sort -u | {
nc=0
while read a;
do
f=$a.$x
g=$a.$y
# echo $a $f $g
set -- $(ls $f $g 2> /dev/null )
# echo $# $*
[[ $# -eq 2 ]] && {
cmp $@ >/dev/null || { nc=$(expr $nc + 1); }
} || {
[[ -f $f ]] && { echo missing $g; }
[[ -f $g ]] && { echo missing $f; }
}
done
[[ $nc -lt 1 ]] && echo all cases passed
echo NC $nc
}