String bash:将字符串转换为int&如果int>

String bash:将字符串转换为int&如果int>,string,bash,if-statement,int,String,Bash,If Statement,Int,我希望有一个bash脚本来检查一个文件是否有超过行数的行,但我还没有让它正常工作,我不太确定如何做。 我以前从未使用过bash 现在我使用:linesStr=$cat log | wc-l来获取文件中的行数,希望它是一个字符串。当回音时,它给我的数字是30,这是正确的 但是因为它很可能是一个字符串,所以它不执行if语句,所以我需要将linesStr转换成一个名为linesInt的int 我也感觉到if语句本身也做得不正确 #!/bin/bash linesStr=$(cat log | wc

我希望有一个bash脚本来检查一个文件是否有超过行数的行,但我还没有让它正常工作,我不太确定如何做。 我以前从未使用过bash

现在我使用:linesStr=$cat log | wc-l来获取文件中的行数,希望它是一个字符串。当回音时,它给我的数字是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

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

没有字符串或整数类型可转换。问题是您使用了错误的比较运算符。对于数值比较,请使用if[$linesStr-gt 29]。阅读可用运算符的man bash部分条件表达式

不需要猫。 [和]周围缺乏空间。 使用数值比较运算符而不是重定向运算符。 这是一个工作脚本

#!/bin/bash

linesStr=$( wc -l < log )

if [[ "$linesStr" -gt "29" ]]; then
    echo Foo
fi

如果[$linesStr>29]在[和之前]之后应该有空格,则您的if代码块是错误的


您还应该注意,在使用

时,不需要bash比较运算符或使用$获取变量的值。另一个问题是,[是一个命令,]是该命令的参数,因此需要在[和]周围加空格。[$linesStr将尝试运行名为[30]的命令。不需要awk。在不使用awk的情况下尝试。通过脚本,我得到:-bash:test.bash:line 15:syntax error靠近意外标记fi'-bash:test.bash:line 15:fi'当您可以使用wc或awk执行类似的操作时,为什么要使用awk“log与wc-l相同,您可以只执行wc-l$b&&echo ok | | echo not ok这工作正常,然后通过指定b=asd重复测试。虽然这在理论上可以回答问题,但它将在这里,并提供l供参考的墨水。
#!/bin/bash

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

if [[ $lineStr -gt 29 ]];then 
    echo "log file is bigger than 29 lines"
fi
(( lineStr > 29 )) && {
    # do stuff
}
(( $(wc -l < log) > 29 )) && echo too long