bash脚本:在条件语句中使用二元运算符添加两个语句

时间:2015-10-05 18:14:55

标签: bash shell binary-operators

我有以下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脚本的专家。我试图在第一个条件语句中添加一个和运算符,类似这样的

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

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

conditional binary operator expected

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

2 个答案:

答案 0 :(得分:4)

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)),但你可能明白了。)

答案 1 :(得分:0)

“if”行可以这样写。我改变了“&lt;”由“-lt”以来“&lt;”和“&gt;”应该与字符串一起使用,而-lt,-gt,-eq和其他字符串更好。

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

此部分的执行会对文本“网络连接已关闭!”进行计数,始终为1或0。然后将该结果与一(1)

进行比较
echo $LINE|grep -c 'Network connection down!'