bash:将字符串转换为int& if int> #

时间:2017-02-11 22:52:34

标签: string bash if-statement int

我想有一个bash脚本来检查一个文件是否有超过#行数,但我还没有正常工作,我不太清楚如何做到这一点。 我之前从未使用过bash。

现在我使用:linesStr=$(cat log | wc -l)来获取文件中的行数(期望它是一个字符串)。当echo'ing它给我数字30是正确的。

但由于它很可能是一个字符串,它不会执行if语句,所以我需要将linesStr转换为一个名为linesInt的int。

我也感觉if语句本身也没有正确完成。

#!/bin/bash

linesStr=$(cat log | wc -l)
echo $linesStr

if [$linesStr > 29]
    then echo "log file is bigger than 29 lines"
    #sed -i 1d log
fi

如果有人能给我一个简单的初学者解决方案,我将不胜感激。

4 个答案:

答案 0 :(得分:4)

  1. 无需OMNeT++
  2. cat[周围缺少空格。
  3. 使用数字比较运算符代替重定向运算符。
  4. 这是一个工作脚本。

    ]

答案 1 :(得分:2)

您的if代码块错误if [$linesStr > 29] [之后和]之前应该有空格

#!/bin/bash

linesStr=$(wc -l < log )
echo $linesStr

if [[ $lineStr -gt 29 ]];then 
    echo "log file is bigger than 29 lines"
fi

建议您始终将[[ ]]与if语句一起使用,而不是使用[ ]。如果您想比较整数而不使用><,请使用-gt -ge -lt -le。如果您想进行任何形式的数学比较,建议您使用(( ))

(( lineStr > 29 )) && {
    # do stuff
}

您还应注意,在使用$

时,您不需要使用bash比较运算符或使用(( ))获取变量的值

答案 2 :(得分:1)

没有要转换的字符串或整数类型。问题是您使用了错误的比较运算符。对于数字比较,请使用if [ $linesStr -gt 29 ]。请阅读man bash部分CONDITIONAL EXPRESSIONS了解可用的运营商。

答案 3 :(得分:0)

(( $(wc -l < log) > 29 )) && echo too long