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

Hus*_*ggo 1 string bash int if-statement

我想要一个 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
Run Code Online (Sandbox Code Playgroud)

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

mer*_*011 5

  1. 不需要cat
  2. 缺乏空间周围[]
  3. 使用数字比较运算符而不是重定向运算符。

这是一个工作脚本。

#!/bin/bash

linesStr=$( wc -l < log )

if [[ "$linesStr" -gt "29" ]]; then
    echo Foo
fi
Run Code Online (Sandbox Code Playgroud)

  • 不需要`awk`。 (3认同)
  • 无论是使用 `wc` 还是使用 `awk`,我们都可以避免子 shell 和管道:`awk 'END {print NR}' log` 与 `wc -l &lt;​​log` = 直接打印行数相同。 (2认同)