Linux 在shell脚本中比较stat命令与整数变量的输出

Linux 在shell脚本中比较stat命令与整数变量的输出,linux,bash,shell,split,Linux,Bash,Shell,Split,我试图将stat输出与整数进行比较。我没有从中得到预期的输出 XX_CONFIG_LOCATION=/tmp/config.txt MAXIMUM_FILE_SIZE=123000 FILESIZE= stat --printf=%s $XX_CONFIG_LOCATION if [[ "$FILESIZE" -gt "$MAXIMUM_FILE_SIZE" ]] then echo "file size is greater" else echo "file size is le

我试图将stat输出与整数进行比较。我没有从中得到预期的输出

XX_CONFIG_LOCATION=/tmp/config.txt
MAXIMUM_FILE_SIZE=123000
FILESIZE= stat --printf=%s $XX_CONFIG_LOCATION

if [[ "$FILESIZE" -gt "$MAXIMUM_FILE_SIZE" ]]
then
   echo "file size is greater"
else
   echo "file size is lesser"
fi

这里是split命令123784(filesize)的输出,但最大文件大小是123000。这里的预期输出是“文件更大”,但每次我得到的文件大小都更小。代码有什么问题?

您需要使用命令替换将命令的STDOUT(或STDERR)保存在变量中:

FILESIZE=$(stat --printf='%s\n' "$XX_CONFIG_LOCATION")
目前,变量
FILESIZE
设置为null,在进行算术比较时,关键字
[[
给出正确的输出:

$ foo=                            
$ [[ $foo -gt 4 ]] && echo OK || echo Not OK
Not OK

还要注意,
bash
(和其他shell)不允许变量声明中的
=
周围有空格。

没有什么新内容,但下面是失败的原因。您注意到文件属性(在本例中为75)被压缩在哪里了吗

案例一: 案例二:
ola:ola~/.scratch$ stat --printf=%s sample.txt
**75ola**@ola:~/.scratch$
ola:ola~/.scratch$ stat --printf='%s\n' sample.txt
75
ola@ola:~/.scratch$