IF语句与逻辑运算符未按预期工作
我正在编写一个简单的函数来检查三个不同的文件是否存在,如果所有三个文件都存在,它应该返回“是”,如果一个或多个文件存在则返回“部分”,如果三个文件都不存在则返回“否”。
该函数称为 IsPortalDown,它有一个大小写开关;NodeOne 是目前使用的那个。
这是我的功能
function IsPortalDown() {
case "$1" in
NodeOne )
if [[ -f $wpsdmgr ]] && [[ -f $wpsnodeagent ]] && [[ ! -f $wpsserver ]];
then
echo "Yes"
elif [[ ! -f $wpsdmgr ]] || [[ ! -f $wpsnodeagent ]] || [[ ! -f $wpsserver ]];
then
echo "Partially"
else
echo "No"
fi;
;;
NodeTwo )
;;
esac
}
定义了一些常量来清理一些东西。见下文
PortalProfileLogsDir=/opt/IBM/WebSphere/wp_profile/logs
WPSDMGRProfileLogsDir=/opt/IBM/WebSphere/AppServer/profiles/dmgr01/logs
wpsdmgr=$WPSDMGRProfileLogsDir/dmgr/dmgr.pid
wpsnodeagent=$PortalProfileLogsDir/nodeagent/nodeagent.pid
wpsserver=$PortalProfileLogsDir/WebSphere_Portal/WebSphere_Portal.pid
下面是我调用函数和预期结果的方式。
IsPortalDown NodeOne
如果所有三个文件都存在,则输出应如下所示
[wpssrvr@tstdydalbpt0101 dmgr]$ IsPortalDown NodeOne
Yes
如果存在三个文件之一,则输出如下
[wpssrvr@tstdydalbpt0101 dmgr]$ IsPortalDown NodeOne
Partially
如果三个文件都不存在,则输出如下
[wpssrvr@tstdydalbpt0101 dmgr]$ IsPortalDown NodeOne
No
我现在的问题是,如果三个文件之一或所有三个文件都不存在,我会不断得到 Yes 而不是 Partially。
任何帮助表示赞赏。谢谢
回答
这可能会稍微简化逻辑:计算存在的文件数:
nfiles=0
for file in "$wpsdmgr" "$wpsnodeagent" "$wpsserver"; do
[[ -f $file ]] && ((++nfiles))
done
case $nfiles in
3) echo Yes ;;
0) echo No ;;
*) echo Partially ;;
esac