for 循环来比较文件对

for 循环来比较文件对

我有一个可以登录大约 30 对路由器的脚本。该脚本运行命令并将输出保存到文件中,然后移动到下一个路由器,依此类推。

我现在想在每对路由器的文件上运行“差异”,然后“差异”下一对,依此diff rtr_1a rtr_1b类推diff rtr_2a rtr_2b

如何告诉“diff”仅比较特定的文件对,而不需要在多个 diff 语句中手动对名称进行硬编码?

答案1

假设所有文件都被调用rtr_ia并且rtr_ib数量i在 1 到 30 之间:

#!/bin/bash

for (( i = 1; i <= 30; ++i )); do
    diff "rtr_${i}a" "rtr_${i}b"
done

要将差异保存到文件中:

#!/bin/bash

for (( i = 1; i <= 30; ++i )); do
    diff "rtr_${i}a" "rtr_${i}b" >"rtr_${i}.diff"
done

评论后:

#!/bin/bash

for rtra in *rtr*a; do
   rtrb="${rtra%a}b"
   diff -- "$rtra" "$rtrb"
done

或者

#!/bin/bash

for rtra in *rtr*a; do
   rtrb="${rtra%a}b"
   diff -- "$rtra" "$rtrb" >"${rtra}_${rtrb}.diff"
done

...保存到文件。

这将匹配所有prefix-rtrNa文件名,然后为每个文件名创建相应的prefix-rtrNb文件名(将从值中${rtra%a}删除尾随)。然后它会比较这两个文件。a$rtra

相关内容