shell中的嵌套逻辑表达式测试

Sri*_*niV 2 bash shell

我正在尝试编写一个单行代码作为以下代码段的替代品.

# 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
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所做的(我不确定这是否正确),

   [ $(grep 'Current state: Booted' serverlog.log | wc -l) -eq 0 ] \
&& [ $(grep 'Status: OK' serverlog.log | wc -l) -eq 0 ]            \
&& echo 0
Run Code Online (Sandbox Code Playgroud)

你能帮帮我吗?

tom*_*x86 5

这个想法似乎没问题,但我会选择一个简化版本:

grep -q 'Current state: Booted' serverlog.log && grep -q 'Status: OK' serverlog.log && echo 0
Run Code Online (Sandbox Code Playgroud)

或者(如果您希望两条线只发生一次-ge,-eq则可以替换):

[ "$(grep -c -e 'Current state: Booted' -e 'Status: OK' serverlog.log)" -ge 2 ] && echo 0
Run Code Online (Sandbox Code Playgroud)

如果serverlog.log包含'Current state: Booted'和,则两个版本都打印0 Status: OK.

有关进一步参考,请参阅grep(1).