出口1没有消息


#!/bin/sh
set -e
export DATABASE=U414_157_6300/U414_157_6300@db1230cn:1526/DBG192
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export JAVA_HOME=/u01/app/java/jdk180_231
export ORACLE_HOME=/u01/app/oracle/client19
export LD_LIBRARY_PATH=/u01/app/oracle/client19/lib
export PATH=$ORACLE_HOME/bin:$PATH
PATH=$PATH:$HOME/bin
export PATH
echo "exit" |sqlplus -L $DATABASE | grep 'Connected' > /dev/null
if [ $? -eq 0 ]
then
echo "Database is up and the connection is successful!!"
exit 0;
else
echo "Database seems to be down!!"
exit 1;
fi

这个脚本用于检查数据库是向上还是向下。当上升时,我得到以下结果。

./db_status.sh
Database is up and the connection is successful!! 

但当DB关闭时,我什么也得不到!!为什么?

./db_status.sh
[root@qaapp828cn u414_157_6300]#

因为脚本的开头有set -e。如果任何命令的退出代码为非零,则会使脚本立即退出。因此,当grep失败时,脚本会立即退出,并且您永远不会在下一行测试$?

但也有例外:如果该命令用作if中的测试,则脚本不会退出。因此,与其测试$?,不如测试命令本身。

if echo "exit" |sqlplus -L $DATABASE | grep -q 'Connected'
then
echo "Database is up and the connection is successful!!"
exit 0;
else
echo "Database seems to be down!!"
exit 1;
fi

最新更新