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