填充文件的BASH问题'直到确定的大小

时间:2011-09-06 10:27:52

标签: bash shell rhel

我写了一个脚本来填充文件以进行一些磁盘容量测试。你能告诉我为什么会有错误吗?

#!/bin/bash 
COUNTER=0;
FILE_SIZE_BITS=8589934592;
FILE_NAME="fill_me";
while [ $COUNTER -eq 0 ]; do
    echo "Dummy text to fill the file" >> "$FILE_NAME";
    SIZE='stat -c%s fill_me';
    if [[ $SIZE -gt $FILE_SIZE_BITS ]]; then
        let COUNTER=COUNTER+1;
    fi
done

错误是:

-bash: [[: stat -c%s fill_me: division by 0 (error token is "fill_me")

由于

3 个答案:

答案 0 :(得分:6)

错误在于:

SIZE='stat -c%s fill_me'

请改为:

SIZE=$(stat -c%s fill_me)

这将SIZE设置为stat -c%s fill_me命令的输出。 $(...)语法是Command Substitution语法:

  

命令替换允许输出命令来替换命令名。


顺便说一句,你可以用dd[manual]做同样的事情:

dd if=/dev/zero of=fill_me bs=1 count=8589934592

答案 1 :(得分:2)

正如amaud576875所回答的那样,dd是可行的方式。

为了好玩,这是另一种方法:

str63=123456789.123456789.123456789.123456789.123456789.123456789.123
yes $str63 | head -134217728 > fill_me

答案 2 :(得分:0)

您已经发现编程错误,但从shell编程的角度来看,整个脚本非常笨重。这是一个重构版本。

#!/bin/bash 
FILE_SIZE_BITS=8589934592;
FILE_NAME="fill_me";
while true; do
    echo "Dummy text to fill the file" >> "$FILE_NAME";
    SIZE=$(stat -c%s "$FILE_NAME")  # if you have a variable, use it everywhere
    if [[ $SIZE -gt $FILE_SIZE_BITS ]]; then
        break
    fi
done

变量名COUNT和你在它上面执行的算术是相当误导的,因为当COUNT大于0时你就退出。在这种情况下也可以使用真/假标志,但是在这里,我甚至不将状态存储在变量中。相反,当退出条件为真时,我break退出循环(因此,整个脚本)。