08.Shell函数与服务脚本

1.使用Shell函数 --> 提高代码重用效率

什么是函数?
    	在Shell脚本中,将一些需要重复使用的操作,定义为公共的语句块,即可称为函数
使用函数的好处?
    	使脚本代码更简洁,增强易读性
    	提高Shell脚本的执行效率
函数定义方法
    	基本格式1
    	function 函数名{
        	命令序列
            ... ...
    	}
    	基本格式2
    	函数名(){
        	命令序列
        	... ...
    	}
调用及参数传递
    	调用已定义的函数
        		格式:函数名
        		必须先定义了才能调用(定义一次,可多次重用)
    		【注】函数名好比是脚本自建的“内部命令”
    	函数传值
        		格式:函数名 值1 值2 .. ..
        		传递的值作为函数的“位置参数”
# cat funadder.sh
#!/bin/bash
adder(){
    echo $(($1+$2))
}
adder 12 34
adder 56 789

2.case分支结构 --> 流程及应用示例

检查变量的实际取值:如果与预设的值相匹配,则执行对应的操作
case 变量值 in
模式1)
    	命令序列1;;
模式2)
    	命令序列2;;
    	.. ..
*)
    	默认命令序列
esac
例1:
case 控制参数 in
start)
    	启动XX服务;;
stop)
    	停止XX服务;;
*)
    	显示服务脚本用法
esac
例2:判断击键类型
# cat hitkey.sh
#!/bin/bash
read -p "请输入一个字符:" KEY
case "$KEY" in
[a-z]|[A-Z])
    echo "字母";;
[0-9])
    echo "数字";;
*)
    echo "空格、功能键或其他控制字符"
esac

3.服务脚本 --> 建立自己的系统服务

Linux的系统服务

可执行脚本路径(Linux所有的服务脚本的存放路径)
    	/etc/init.d --> /etc/rc.d/init.d
主要特点
    	响应start、stop、restart等控制参数
    	可独立执行,也可由service调用
    	可使用chkconfig、ntsysv管理自启动状态
    【注】shell脚本会多两行配置:chkconfig配置参数,指定脚本运行级别,启动顺序,终止顺序
         discriiption服务的介绍,说明

新建服务脚本过程
vim /etc/init.d/xxprog
chmod +x /etc/init.d/xxprog
chkconfig --add xxprog
case "$1" in            //检查第一个位置参数
start)
    ... ...;;           //启动服务的语句块
stop)
    ... ...;;           //停止服务的语句块
restart)
    $0 stop             //停止服务
    $0 start            //启动服务
    ;;
*)
    echo $"Usage:$0{start|stop|restart}"    //提示参数用法
    exit 1              //退出并设置状态值
esac
示例: 
编写sleepd服务脚本,要求如下:
1)支持start、stop、restart等控制参数
2)控制参数由位置变量$1传入
3)能通过chkconfig来管理此服务
4)服务的操作作为sleep进程的开启/关闭/重启
#!/bin/bash
# chkconfig: 2345 90 10
# description: Startup script for sleep Server. (for Test only)
case "$1" in
start)
    echo -n "正在启动sleepd服务 ..."
    if sleep 7200 &
    then
        echo "OK"
    fi 
    ;;
stop)
    echo -n "正在停止sleepd服务 ..."
        pkill '^sleep$' &> /dev/null && echo "OK"
        ;;
status)
    if pgrep '^sleep$' &> /dev/null
    then
        echo "sleepd服务已经启动"
    else
        echo "sleepd服务已经启动"
    fi
    ;;
restart)
    $0 stop
    $0 start
    ;;
*)
    echo "用法:$0 (start|stop|status|restart)"
    exit 1
esac
# chkconfig --list sleepd
sleepd          0:关闭  1:关闭  3:启用  4:启用  5:启用  6:关闭
# ntsysv
找到sleepd按下空格

# /etc/init.d/sleepd status
# service sleepd status
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值