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