bash脚本中的简单数学计算

时间:2017-02-21 14:30:45

标签: linux bash math stat

我在这里阅读了很多帮助主题,但从未在我的具体问题或问题上找到答案。

我在red hat 7中有这个bash代码(不重要但是......)

    if [[ $(stat -c %s) -gt 1024 ]];
    then
    echo "            $(scale=1;stat -c %s log.txt / 1024) KiloBytes"
    else
    echo "            $(stat -c %s log.txt) Bytes"
    fi

并抛出此错误:

stat: missing operand Try 'stat --help' for more information. 0 Bytes

通过这个微小的检查,我想看看log.txt是否大于1024字节,如果是真,则将总字节大小除以1024并将输出回显为XXXX KiloBytes。但我错过了什么。 Shellcheck.com说一切都还好......

任何人都可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

您缺少文件名。你可能想要一个

if [[ $(stat -c %s log.txt) -gt 1024 ]];
#            look: ^^^^^^^ 

成为你的第一线。如果按指示操作并输入stat --help,则会显示正确的用法

Usage: stat [OPTION]... FILE...
Display file or file system status.

-c %s是OPTIONS,并且您没有在第一行中指定任何文件。

答案 1 :(得分:0)

您似乎缺少对bc的调用,这是一个用于浮点运算的程序。 scale=1通常是bc输入的一部分:

# No
echo "            $(scale=1;stat -c %s log.txt / 1024) KiloBytes"
# Yes - broken down into steps for easy reading
size=$(stat -c %s log.txt)
result=$(echo "scale=1; $size / 1024" | bc)
echo "            $result KiloBytes"

答案 2 :(得分:0)

也许您有兴趣减少脚本的大小:

stat -c %s log.txt | awk '{ print ($0 > 1024 ? $0 / 1024 " Kilobytes" : $0 " bytes") }'

使用awk解析stat的输出并打印字节或千字节,具体取决于大小。