我写了一个脚本来填充文件以进行一些磁盘容量测试。你能告诉我为什么会有错误吗?
#!/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")
由于
答案 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
退出循环(因此,整个脚本)。