gpt4 book ai didi

bash - IF 语句与逻辑运算符未按预期工作

转载 作者:行者123 更新时间:2023-12-04 16:17:04 28 4
gpt4 key购买 nike

我正在编写一个简单的函数来检查三个不同的文件是否存在,如果所有三个文件都存在,它应该返回"is",如果一个或多个文件存在,则返回“部分”,如果三个文件都不存在,则返回“否”。

该函数称为 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

关于bash - IF 语句与逻辑运算符未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67789239/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com