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!'
我有以下 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!'