Проблема BASH для заполнения файла до определенного размера - PullRequest
0 голосов
/ 06 сентября 2011

Я написал скрипт для заполнения файла для тестирования емкости диска.Подскажите, пожалуйста, почему у меня ошибка?

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

6 голосов
/ 06 сентября 2011

Ошибка здесь:

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
2 голосов
/ 06 сентября 2011

Как ответил amaud576875, dd - это путь.

Для забавы, вот еще один метод:

str63=123456789.123456789.123456789.123456789.123456789.123456789.123
yes $str63 | head -134217728 > fill_me
0 голосов
/ 06 сентября 2011

Вы уже нашли ошибку в программировании, но с точки зрения программирования оболочки общий сценарий довольно неуклюжий.Вот реорганизованная версия.

#!/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 в этом случае, но здесь я даже не сохраняю статус в переменной.Вместо этого я break выходит из цикла (и, следовательно, всего сценария), когда условие выхода истинно.

...