Я пытаюсь написать скрипт, который возвращает размер диска в байтах. Все идет нормально. Затем я хочу отобразить его как можно более удобным для чтения из единиц, не пытаясь отобразить небольшой размер в миллионных долях ТБ или значение в террабайтах в байтах. Поэтому, если число байтов превышает 1024, попробуйте КБ, если это число превышает 1024, попробуйте МБ и т. Д. c. В целях иллюстрации мое действительное значение равно 10632563023872.
Каждый говорит, что, по возможности, используйте двойные скобки. Большая часть моего сценария написана в двойных скобках. Но в этом случае математика просто не работает так, как я ожидаю, поэтому, возможно, кто-то может помочь мне понять, чего мне не хватает. Весь сценарий имеет гораздо больше, но мне удалось выделить мою проблему в одну строку:
num=10632563023872;
if [[ $num -lt 1024 ]];
then echo "$num is less than 1024";
else echo "$num is greater than 1024";
fi
Вывод:
10632563023872 is less than 1024
Хотя shellcheck говорит, что синтаксис в порядке математика явно (?) неверна, если только я не пропущу какую-то проблему с типом данных, но в bash нет объявления переменных и типов данных. Если я попытаюсь сделать это с помощью скобок, я получу правильный ответ, хотя есть ошибка, которая, как я подтвердил, означает, что она просто возвращает false, потому что мне не нравится мой ввод:
num=10632563023872;
if (( $num -lt 1024 ));
then echo "$num is less than 1024";
else echo "$num is greater than 1024";
fi
-sh: 10632563023872: not found
10632563023872 is greater than 1024