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

发布于 2024-12-02 22:01:32 字数 474 浏览 3 评论 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")

谢谢

I wrote a script to fill a file for some Disk capacity testing. Could you please tell me why I have an error?

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

the error is:

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

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

泪眸﹌ 2024-12-09 22:01:32

错误在这里:

SIZE='stat -c%s fill_me'

请改为执行此操作:

SIZE=$(stat -c%s fill_me)

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

命令替换允许命令的输出替换命令名称。


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

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

The error is here:

SIZE='stat -c%s fill_me'

Do this instead:

SIZE=$(stat -c%s fill_me)

This sets SIZE to the output of the stat -c%s fill_me command. The $(...) syntax is the Command Substitution syntax:

Command substitution allows the output of a command to replace the command name.


BTW you can do the same thing with dd[manual]:

dd if=/dev/zero of=fill_me bs=1 count=8589934592
淡写薰衣草的香 2024-12-09 22:01:32

正如 amaud576875 回答的那样,dd 是正确的选择。

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

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

As amaud576875 answered, dd is the way to go.

For fun, here's another method:

str63=123456789.123456789.123456789.123456789.123456789.123456789.123
yes $str63 | head -134217728 > fill_me
≈。彩虹 2024-12-09 22:01:32

您已经发现了编程错误,但从 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,您就退出。在这种情况下,不妨使用 true/false 标志,但在这里,我什至不将状态存储在变量中。相反,当退出条件为 true 时,我break 跳出循环(从而跳出整个脚本)。

You found the programming error already, but from a shell programming point of view, the overall script is quite clunky. Here is a refactored version.

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

The variable name COUNT and the arithmetic you performed on it is rather misleading, as you exit as soon as COUNT is bigger than 0. Might as well use a true/false flag in that case, but here, I don't even store the status in a variable. Instead, I break out of the loop (and thus, the entire script) when the exit condition is true.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文