0

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

#!/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")

谢谢

4

3 回答 3

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
于 2011-09-06T10:30:51.223 回答
2

正如 amaud576875 回答的那样,dd这是要走的路。

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

str63=123456789.123456789.123456789.123456789.123456789.123456789.123
yes $str63 | head -134217728 > fill_me
于 2011-09-06T11:55:45.977 回答
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当退出条件为真时,我退出循环(因此,整个脚本)。

于 2011-09-06T12:06:45.410 回答