【问题标题】:comparing the output of stat command with integer variable in shell script将 stat 命令的输出与 shell 脚本中的整数变量进行比较
【发布时间】:2016-05-03 05:12:29
【问题描述】:

我正在尝试将 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(文件大小),但最大文件大小为 123000。此处预期的输出是“文件更大”,但每次我得到的文件大小都较小。代码有什么问题?

【问题讨论】:

    标签: linux bash shell split


    【解决方案1】:

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

    FILESIZE=$(stat --printf='%s\n' "$XX_CONFIG_LOCATION")
    

    就目前而言,变量 FILESIZE 设置为 null,在进行算术比较时,bash 关键字 [[ 给出正确的输出:

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

    另请注意,bash(和其他 shell)不允许在变量声明中在 = 周围使用空格。

    【讨论】:

      【解决方案2】:

      没什么新鲜的,但这就是你失败的原因。你有没有注意到文件属性(本例中为 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$
      

      【讨论】:

        猜你喜欢
        • 2021-08-10
        • 2013-08-10
        • 2013-12-14
        • 1970-01-01
        • 1970-01-01
        • 2018-11-06
        • 2016-03-12
        • 2015-04-19
        相关资源
        最近更新 更多