我正在尝试编写一行代码来替代下面的代码片段。
# 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
同时包含“当前状态:已启动”
和状态:正常
,则两个版本都打印 0。
更多引用请参见grep(1) .
关于bash - shell中的嵌套逻辑表达式测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48077537/