用于比较文件和打印格式化输出的shell脚本

时间:2009-09-29 01:49:07

标签: linux bash shell

我正在尝试编写一个将比较两个文件的shell脚本,如果之间没有差异,则表明存在成功,如果存在差异,则表明存在故障,并打印结果。这是我到目前为止所做的:

result = $(diff -u file1 file2)

if [ $result = "" ]; then
    echo It works!
else
    echo It does not work
    echo $result
fi

有人知道我做错了吗?

4 个答案:

答案 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