我碰到了带有 if-else 分支的脚本,其中特定命令是否成功,如下所示:
pg_ctl -D /var/lib/pgsql/data -w promote
if [ $? -ne 0 ]; then
echo: failure
exit 1
else
echo: succeed
exit 0
fi
看起来很简单。但是,如果它想要提升的 postgresql 服务器已经作为主服务器运行,它也会抛出错误代码=1 和包含“未处于待机模式”的错误消息。因此,如果出现此错误,但错误代码=1 或$? -ne 0
产生误报,则没问题。我只想将这个特定错误作为另一个成功结果,我该如何实现?
答案1
没有直接的 bash 变量来$?
捕获确切的错误消息,但是可以将结果存储在文本文件中以供分析。在本例中,脚本如下:
pg_ctl -D /var/lib/pgsql/data -w promote &> promote_return
if [ $? -ne 0 ]; then
if [ `grep -c 'is not in standby mode' promote_return` -ne 0 ]; then
echo okay: no need to promote twice.
exit 0
else
echo failure: please check the file promote_return for error message.
exit 1
fi
else
echo succeed
exit 0
fi