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 $*

posted on 2023-06-19 15:24  sprr  阅读(6)  评论(0编辑  收藏  举报