我在这里阅读了很多帮助主题,但从未在我的具体问题或问题上找到答案。
我在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说一切都还好......
任何人都可以帮我解决这个问题吗?
答案 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
的输出并打印字节或千字节,具体取决于大小。