LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 138|回复: 0

SysV /etc/rc.d/init.d/functions脚本源码分析 - action函数

[复制链接]
发表于 2023-12-18 15:20:57 | 显示全部楼层 |阅读模式

action函数
这个函数在写脚本时还比较有用,可以根据退出状态码自动判断是执行success还是执行failure函数。

action函数定义语句如下:

action() {
  local STRING rc

  STRING=$1
  echo -n "$STRING "
  shift
  "$@" && success $"$STRING" || failure $"$STRING"
  rc=$?
  echo
  return $rc
}
这个函数定义的很有技巧。先将第一个参数保存并踢掉,再执行后面的命令($@表示执行后面的命令)。所以,当action函数只有一个参数时,action直接返回OK,状态码为0,当超过一个参数时,第一个参数先被打印,再执行从第二个参数开始的命令。

例如:

[root@xuexi ~]# action
                                                           [  OK  ]
[root@xuexi ~]# action 5
5                                                          [  OK  ]
[root@xuexi ~]# action sleeping sleep 3
sleeping                                                   [  OK  ]
[root@xuexi ~]# action "moving file" mv xxxxxx.sh aaaaa.sh
moving file mv: cannot stat ‘xxxxxx.sh’: No such file or directory
                                                           [FAILED]
所以,在脚本中使用action函数时,可以让命令执行成功与否的判断显得更”专业”。算是一个比较有趣的函数。

通常,该函数会结合/bin/true和/bin/false命令使用,它们无条件返回0或1状态码。

action $"MESSAGES: " /bin/true
action $"MESSAGES: " /bin/false
例如,mysqld启动脚本中,判断mysqld已在运行时,直接输出启动ok的消息。(但实际上根本没做任何事)

if [ $MYSQLDRUNNING = 1 ] && [ $? = 0 ]; then
    # already running, do nothing
    action $"Starting $prog: " /bin/true
    ret=0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表