shell函数开发
函数
函数的特点类似于alias别名一样,能够简化linux命令的操作,让整个命令更易读,易用
函数,就是将你需要执行的shell命令,组合起来组合成一个函数体
还得给这个函数体,起一个名字,这个名字就称之为函数名
函数名字+函数体
直接调用函数名即可使用
shell函数实际开发
执行函数的基础概念
函数实践
有关source和bash是否开启子shell,且在当前shell环境中加载函数的 一个深入理解
函数脚本传入参数
执行该脚本
函数实战开发
改造为函数版本
#!/bin/bash
#针对脚本的功能,做一个帮助提示
function usage(){
echo "Usage: $0 url"
exit 1
}
#利用wget测试url 是否正常
check_url(){
wget --spider -q -o /dev/null --tries=1 -T 5 --no-check-certificate $1
#对状态码判断,网站是否正常
if [ "$?" -eq 0 ]
then
echo "$1 in running..."
else
echo "$1 is down...."
fi
}
#设立一个main函数,是入口函数的概念
main(){
#判断用户输入
if [ "$#" -ne 1 ]
then
usage
fi
check_url $1
}
#常规写法如下
main $*
美化脚本
以下代码,就是一个库的概念,理解为工具包,粘贴就能用
属于redhat-lsb-core这个包
# Use LSB init script functions for printing messages, if possible
#
lsb_functions="/lib/lsb/init-functions"
if test -f $lsb_functions ; then
. $lsb_functions
else
log_success_msg()
{
echo " SUCCESS! $@"
}
log_failure_msg()
{
echo " ERROR! $@"
}
fi
开发rsync管理脚本
/etc/init.d/ 服务启停管理脚本
[root@localhost init.d]# cat my_rsync
#!/bin/bash
#美化功能
# Use LSB init script functions for printing messages, if possible
#
lsb_functions="/lib/lsb/init-functions"
if test -f $lsb_functions ; then
. $lsb_functions
else
log_success_msg()
{
echo " SUCCESS! $@"
}
log_failure_msg()
{
echo " ERROR! $@"
}
fi
#帮助提示
function usage(){
echo "Usage: $0 start|stop|restart"
exit 1
}
#检测是否启动
function check_status(){
status=`ss -tunlp |grep rsync |wc -l`
}
# start功能
function start(){
/usr/bin/rsync --daemon
sleep 1
check_status
if [ "$status" -ge 1 ]
then
log_success_msg "rsync is start..."
else
log_failure_msg "rsync is start fail"
fi
}
# stop 功能
function stop(){
killall rsync &>/dev/null
sleep 2
check_status
if [ "$status" -eq 0 ]
then
log_success_msg "rsync is stop..."
else
log_failure_msg "rsync is stop fail"
fi
}
# restart 功能
function restart(){
killall rsync &>/dev/null
/usr/bin/rsync --daemon
sleep 2
check_status
if [ "$status" -ge 1 ]
then
log_success_msg "rsync is restart..."
else
log_failure_msg "rsync is restart fail"
fi
}
#main
main(){
if [ "$#" -ne 1 ]
then
usage
fi
if [ "$1" = "start" ]
then
check_status
if [ "$status" -ge 1 ]
then
echo "rsync already started!"
exit 1
else
start
fi
elif [ "$1" = "stop" ]
then
stop
elif [ "$1" = "restart" ]
then
restart
else
usage
fi
}
#调用c程序入口函数
main $*