我正在尝试编写一个将比较两个文件的shell脚本,如果之间没有差异,则表明存在成功,如果存在差异,则表明存在故障,并打印结果。这是我到目前为止所做的:
result = $(diff -u file1 file2)
if [ $result = "" ]; then
echo It works!
else
echo It does not work
echo $result
fi
有人知道我做错了吗?
答案 0 :(得分:5)
result=$(diff -u file1 file2)
if [ $? -eq 0 ]; then
echo "It works!"
else
echo "It does not work"
echo "$result"
fi
建议:
=
results
”周围没有空格
$?
后使用diff
状态变量,而不是字符串长度$result
。$()
进行命令替换,但@Dennis Williamson引用了一些很好的理由来使用后者。谢谢丹尼斯!=
”更改为“-eq
”以进行数字测试。答案 1 :(得分:3)
首先,您应该将字符串与引号进行比较。
第二,“!”不能用它有另一种含义。你可以用单引号包装它。
所以你的计划将是。
result=$(diff -u file1 file2)
if [ "$result" == "" ]; then
echo 'It works!'
else
echo It does not work
echo "$result"
fi
享受。
答案 2 :(得分:0)
由于您在失败时需要结果,为什么不在脚本中简单地使用'diff -u file1 file2'?你甚至可能不需要脚本。如果diff成功,则不会发生任何事情,否则将打印diff。
答案 3 :(得分:0)
bash字符串等价是“==”。 -n是非零字符串,-z是零长度字符串,用引号括起来,因为如果diff的输出比“参数太多”的单个字符串长,命令会报错。 所以
if [ -n "$(diff $1 $2)" ]; then
echo "Different"
fi
或
if [ -z "$(diff $1 $2)" ]; then
echo "Same"
fi