在 bash 脚本中,如果“if”条件为真,如何退出 if else 条件

在 bash 脚本中,如果“if”条件为真,如何退出 if else 条件

我正在尝试在 bash 脚本中检查某个进程是否正在运行。此功能是脚本的一部分。因此,在这个 bash 脚本中,我已启用此功能-e,但现在此功能因服务尚未运行而失败,因为否则 PID 的值为空。

我希望此函数在 if 条件 pid 不存在时退出且不出现错误,并且脚本的其余部分将继续运行,但它中断了。我可以不使用 来运行它set -e,但是有没有办法使用 来运行它set -e

#!/bin/bash
set -e
stop_service () {
    pid=`ps -ef | grep -v grep | grep process.jar | awk '{print $2}'`
    if [ ! -d "/proc/$pid" ]; then
           echo "already not running" #exit the loop
    else
        echo "killing $pid"
        kill $pid

    fi
}
stop_service

答案1

如果你希望脚本出口,请使用exit命令。如果您希望该函数返回为了使脚本的其余部分可以继续,请return按照我在这里所做的那样使用。

#!/bin/bash
set -e

stop_service () {
    pid=$(ps -ef | awk '/[p]rocess.jar/ {print $2; exit}')
    if [[ -n "$pid" && -d "/proc/$pid" ]]; then
        echo "killing $pid" >&2
        kill "$pid" || :
    else
        echo "process is not running" >&2
        return 1
    fi
}

stop_service

请注意,在原始代码中,如果pid为空,则目录表达式"/proc/$pid"将缩减为"/proc/",因此测试仍然会成功。我不完全确定您为什么要检查目录/proc/$pid,因为根据定义,如果您在进程表中找到目录条目,它将存在于基于 Linux 的系统上;但是,我在修改后的代码中保留了该检查。

答案2

我建议您在终止它之前检查 $pid 是否已设置,这样您就不会收到错误。

您可以按如下方式检查变量是否为空(根据本网站):

if [ -z "$var" ]
then
      echo "\$var is empty"
else
      echo "\$var is NOT empty"
fi

相关内容