bash脚本:在条件语句中添加两条带二元运算符的语句

bash script: add two statements with binary operator in conditional statement

我有以下 bash 脚本

i=1
while SH= read -r LINE
    do
        if echo $LINE | grep 'Network connection down!'
        then 
            echo "shutdown"
            exit
    elif echo $LINE | grep 'Network connection available'
    then
        echo $LINE
        ((i++))
    fi

done < <(tac /var/log/messages)

此脚本目前有效。我不是 shell 脚本专家。我正在尝试向第一个条件语句添加一个 and 运算符,像这样

if echo $LINE | grep 'Network connection down!' && $i<4

任何人都可以告诉我如何在 shell 脚本中完成这项工作,到目前为止我尝试过的每个变体都以各种错误结束,例如

conditional binary operator expected

以及我可以描述的其他各种内容。非常感谢大家提前:)

Shell 编程需要一个特殊的命令来执行比较,因为 if 语句本身不能使用表达式,只能使用命令。在bash中,要使用的命令是条件命令,[[ ... ]].

if echo "$line" | grep 'Network connection down!' && [[ $i -lt 4 ]]; then

您也可以使用算术命令 (( ... )),这样可以使用更熟悉的表达式:

if echo "$line" | grep 'Network connection down!' && (( i < 4 )); then

您还可以将对 grep 的调用替换为 =~ 运算符:

if [[ $line =~ Network\ connection\ down! && $i -lt 4 ]]; then

(或 [[ $line =~ Network \connection \down! ]] && (( i < 4)),但您可能明白了)。

"if"行可以这样写。我已经将“<”更改为“-lt”,因为“<”和“>”应该与字符串一起使用,而-lt、-gt、-eq 和其他更适合数字。

if [[ `echo $LINE|grep -c 'Network connection down!'` -eq 1 && $i -gt 4 ]]

这部分的执行计算带有文本 'Network connection down!' 的行数,总是一或零。然后将此结果与一 (1)

echo $LINE|grep -c 'Network connection down!'