SHELL 脚本如何显示 OK 或 FAILED

Posted Linux运维入门

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SHELL 脚本如何显示 OK 或 FAILED相关的知识,希望对你有一定的参考价值。

前言

在日常的工作中运维通常会安装各种各样的应用服务,例如:nginx、httpd、mysql 等。如果我们是用 yum 来安装,通常情况下 RPM 包的作者已经帮助我们写好了服务的启动脚本。我们在使用启动脚本的过程中几乎都会看到以下提示信息,提示我们服务是否启动成功。

SHELL 脚本如何显示 OK 或 FAILED

上图所看到的样式,在 CentOS7.X 版本的操作系统中可能不会经常看到,因为 CentOS7 已经改为 systemd 格式的启动脚本。

问题来了,上图显示的 OK 和 FAILED 是如何出现的呢?我们自己写脚本的时候能不能也能有这样的效果?答案肯定是可以,在这之前我们要先说一下 /etc/init.d/functions 函数。

/etc/init.d/functions

functions 这个脚本是给 /etc/init.d 里边的文件使用的,提供了一些基础的功能,看看里边究竟有些什么。首先会设置 umask,path,还有语言环境,然后会设置 success,failure,warning,normal 几种情况下的字体颜色。

checkpid:检查是否已存在pid,如果有一个存在,返回0(通过查看/proc目录)
daemon:启动某个服务。/etc/init.d目录部分脚本的start使用到这个
killproc:杀死某个进程。/etc/init.d目录部分脚本的stop使用到这个
pidfileofproc:寻找某个进程的pid
pidofproc:类似上面的,只是还查找了pidof命令
status:返回一个服务的状态
echo_success,echo_failure,echo_passed,echo_warning分别输出各类信息
success,failure,passed,warning分别记录日志并调用相应的方法
action:打印某个信息并执行给定的命令,它会根据命令执行的结果来调用 success,failure方法
strstr:判断$1是否含有$2
confirm:显示 "Start service $1 (Y)es/(N)o/(C)ontinue? [Y]"的提示信息,并返回选择结果

其实 RPM 包中的启动脚本就是调用了 functions 函数中的 success 和 failure 方法,你也可能说有的脚本里并没有调用这两个函数,其实还有另一个函数 action() 我们打开 functions 文件找到 action()函数看看里面写了什么。

# Run some action. Log its output.
action() {
 local STRING rc

 STRING=$1
 echo -n "$STRING "
 shift
 "$@" && success $"$STRING" || failure $"$STRING"
 rc=$?
 echo
 return $rc
}

action函数中可以看到本质上函数内部还是调用了 success 和 failure 两个函数。

下面我们通过一个示例演示一下如何使用 success 和 failure 函数实现我们期望的效果:

在 /tmp 下创建名为 nginx 的文件

#!/bin/bash
#
# 演示 success 和 failure 函数效果
# 首先我们要先将functions函数引用到我们的脚本中然后调用它内部的方法

. /etc/init.d/functions

nginx="/sbin/nginx"

show_usage() {
   usage="Usage: `basename $0` [start|stop]"
   echo $usage
   exit
}

########################
# start 函数
# 调用 functions 中的 success 和 failure
########################
start() {
   [[ `netstat -ntlup|grep nginx|wc -l` > 0 ]] && failure && echo "Nginx is Running!" && exit
   $nginx
   ([ $? -eq 0 ] && success && echo "Nginx starts successfully!") || (failure && echo "Failed start nginx")

}

########################
# stop 函数
# 调用 functions 中的 success 和 failure
########################
stop() {
   [[ `netstat -ntlup|grep nginx|wc -l` == 0 ]] && failure && echo "Nginx is NOT running!" && exit
   echo "Stopping Nginx..."  
   $nginx -s stop  
   ([ $? -eq 0 ] && success && echo "Nginx stops successfully!") || (failure && echo "Failed stop nginx!")  
}

case $1 in
 start)
     start
     ;;
 stop)
     stop
     ;;
 *)
     show_usage
     ;;
esac

记得为脚本添加执行权限,接下来我们执行该脚本看看效果如何。

脚本效果演示

上图可以发现,脚本在第一次启动 Nginx 时显示 OK 连续在启动一次因为 Nginx 已经运行了,所以显示 FAILED,停止时也是相同道理。

看完本文是否有收获?请转发分享给更多人

关注「Linux运维入门」一起交流技术

以上是关于SHELL 脚本如何显示 OK 或 FAILED的主要内容,如果未能解决你的问题,请参考以下文章

Shell函数练习

Linux教程 - 在Shell脚本中声明和使用布尔变量示例

Shell脚本

shell脚本中判断上一个命令是否执行成功

shell练习题

OK。第一个shell script 脚本