我想有一个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
如果有人能给我一个简单的初学者解决方案,我将不胜感激。
答案 0 :(得分:4)
OMNeT++
。cat
和[
周围缺少空格。这是一个工作脚本。
]
答案 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
}
您还应注意,在使用$
(( ))
获取变量的值
答案 2 :(得分:1)
没有要转换的字符串或整数类型。问题是您使用了错误的比较运算符。对于数字比较,请使用if [ $linesStr -gt 29 ]
。请阅读man bash
部分CONDITIONAL EXPRESSIONS
了解可用的运营商。
答案 3 :(得分:0)
(( $(wc -l < log) > 29 )) && echo too long