我对脚本完全是个新手,但我需要一个脚本来比较两个文件的大小,如果其中一个文件比另一个文件大 10%,就会发出警告。
到目前为止,我想到了这一点:
#!/bin/bash
test1=/trans/home/user/test1
test2=/trans/home/user/test2
test1=$(stat -c%s "$test1")
test2=$(stat -c%s "$test2")
if (( test2 > 110 * test1 ))
then
echo "WARNING: test2 has increased 10% or more in size"
fi
我用 touch 创建了两个文件,并用 truncate 调整了它们的大小。无论我给它们指定多大尺寸,这都不会给出警告信息,除非我将大于号切换为 < 号,然后它会给出警告信息。然而这对我来说不起作用。
对于如何编辑此程序以使其正常工作的任何想法都将受到赞赏。
问候。
答案1
你的数学不正确。下面是一个使用bc
精度计算器的脚本,它可以进行浮点运算而不必担心溢出bash
#!/bin/bash
test1=/trans/home/user/test1
test2=/trans/home/user/test2
test1sz=$(stat -c%s "$test1")
test2sz=$(stat -c%s "$test2")
[ $(echo "scale=2; ${test2sz} > ${test1sz}*1.1" | bc) -eq 1 ] && {
echo "WARNING: ${test2} has increased 10% or more in size"
}
答案2
你需要
if (( test2 > 110 * test1 / 100))
大小加 10% 是 1.10 或 110/100,而不是 110。请注意,您应该先乘再除,否则 110/100 四舍五入为整数就是 1.00。另一方面,110*test1 可能超出整数范围,尽管对于文件大小和 64 位整数来说,这种情况不太可能发生。
答案3
设法这样做:
#!/bin/bash
test1=/trans/home/stefan01/test1
test2=/trans/home/stefan01/test2
test1=$(stat -c%s "$test1")
test2=$(stat -c%s "$test2")
PERC=$(bc <<< "scale=2; ($test2 - $test1)/$test1 * 100")
echo "$PERC %"
这显示了文件大小的确切百分比差异。我现在可以简单地 if/then 让它在结果为 10% 或更多时显示警告消息。
谢谢你们的帮助。