我试着写一行代码来代替下面的代码片段。

# Check to see if the database is online; exit if not
isbooted=`grep 'Current state: Booted' serverlog.log | wc -l`
if [ $isbooted -eq 0 ]
then
   exit
fi

# Check to see if the database has crashed; exit if so
iscrashed=`grep 'Status: OK' serverlog.log | wc -l`
if [ $iscrashed -eq 0 ]
then
   exit
fi

echo 0

这就是我到目前为止所做的(我不确定这是否正确),
   [ $(grep 'Current state: Booted' serverlog.log | wc -l) -eq 0 ] \
&& [ $(grep 'Status: OK' serverlog.log | wc -l) -eq 0 ]            \
&& echo 0

你能帮我一下吗?

最佳答案

这个想法看起来不错,但我还是用一个简化的版本:

grep -q 'Current state: Booted' serverlog.log && grep -q 'Status: OK' serverlog.log && echo 0

或者(如果您希望两行正好出现一次,可以将-ge替换为-eq):
[ "$(grep -c -e 'Current state: Booted' -e 'Status: OK' serverlog.log)" -ge 2 ] && echo 0

如果serverlog.log同时包含'Current state: Booted'Status: OK,则两个版本都会打印0。
有关进一步的参考,请参见grep(1)

08-26 21:26