我有以下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
以及我可以描述的各种其他内容。非常感谢大家提前:)
答案 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!'