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


以上是IF语句与逻辑运算符未按预期工作的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>