Bash 需要帮助修改脚本以检查服务状态吗

Bash 需要帮助修改脚本以检查服务状态吗,bash,Bash,我有一个远程调用的脚本,它将检查服务的状态,并响应我告诉它的任何内容。调用脚本的外部进程确定要检查的服务。我需要它回显命令的实际输出,而不是回显自定义消息。以下是我现在的脚本: #!/bin/bash S1="active" Info=$(systemctl status $1 | awk 'NR==3' | awk '{print $2}') if [ $Info == $S1 ] then echo $1 "is running!" exit 0 else echo

我有一个远程调用的脚本,它将检查服务的状态,并响应我告诉它的任何内容。调用脚本的外部进程确定要检查的服务。我需要它回显命令的实际输出,而不是回显自定义消息。以下是我现在的脚本:

#!/bin/bash
S1="active"
Info=$(systemctl status $1 | awk 'NR==3' | awk '{print $2}')
if [ $Info == $S1 ]
then
    echo  $1 "is running!"
    exit 0
else
    echo  $1 "is not running!"
    exit 2
fi
正如您所看到的,它非常基本,脚本编写不是我喜欢的,但它很有效。然而,我需要使它更复杂。在脚本中,我不需要回显“$1正在运行”或“$1未运行”,而是需要将这两个值更改为实际回显命令的结果,该命令仅给出第3行。所以我需要回声像这样:

Active: active (running) since Fri 2015-10-30 14:58:47 CDT; 1h 7min   ago
这是脚本中现在排除awk{print$2}的命令的实际结果


如果结果返回“主动运行”或“主动退出”,等等。。它需要使用0退出。如果返回的结果不是这个,则以2退出。这看起来相当简单,但我很难理解我需要做什么样的改变。提前感谢您的帮助,请详细说明

将整行内容放入
Info
,而不仅仅是第二个字段。然后从中提取第二个字段以进行检查

info=$(systemctl status $1 | awk 'NR == 3')
read prefix status rest <<<"$info"
echo "$info"
if [ $status = $S1 ]
then
    exit 0
else
    exit 2
fi
info=$(系统控制状态$1 | awk'NR==3')

读取前缀status rest您不需要两个
awk
命令:
awk'NR==3{print$2}'
You..Are..Awesome.:)如果我想让else echo报告返回实际行而不是“$1未运行”?也将
echo“$info”
放在那里。在这两种情况下,您只是回显实际行吗?这样就不需要
状态
变量或
if
。只需使用
systemctl status$1 | awk'NR==3'
我已经根据您对问题的编辑更新了答案。完美。再次感谢!