• shell函数介绍语法说明及基本例子


    shell函数_介绍语法:

    简单的语法:

    函数名(){

      指令...

      return n

    }

    规范的语法:

    function 函数名(){

      指令...

      return n

    }

    return命令的功能与工作方式与exit相同,用于跳出函数

    shell函数_说明:

    shell函数的执行

    调用函数

    1)直接执行函数名即可

    2)带参数的函数执行方法:

    函数名 参数1 参数2

    3)函数必须先定义然后再使用

    shell函数_基本例子:

    函数基本例子一:

    [root@www 2017_08_31.sh]# cat hanshu.sh
    #!/bin/bash
    xiaochao(){
            echo "I am xiaochao"
    }
    function xiaoyongzhuo(){
            echo "I am xiaoyongzhuo"
    }

    echo "“恭喜您shell函数入门!”"
    xiaochao
    xiaoyongzhuo

    函数基本例子二:把函数体和执行的脚本分离

    chmod +x *

    vi dy_hanshu.sh(重新写个脚本调用例子一中的函数,没有执行权限退出)

    #!/bin/bash
    [ -x /root/2017_08_31.sh/hanshu.sh ] && . /root/2017_08_31.sh/hanshu.sh||exit 1

    [root@www 2017_08_31.sh]# sh dy_hanshu.sh
    I am xiaochao
    I am xiaoyongzhuo

    “恭喜您shell函数入门!”

    例子二:函数传参

    cat func.sh
    #!/bin/bash
    while true
    do
    function check_usl(){
    curl -I -s $1|head -1 && return 0||return 1
    }
    echo "`date "+%Y-%m-%d %H:%M:%S"`" >> test.txt
    check_usl www.baidu.com >> test.txt
    sleep 10
    done

    改成命令行传参数

    (注释掉上面的那行,然后替换这行,然后执行。)

    check_usl $1 >> test.txt

    例子三:使用脚本+函数打印不同颜色的文字

    cat plus_color.sh
    #!/bin/bash
    function new_chars(){
    RED_COLOR='E[1;31m'
    GREEN_COLOR='E[1;32m'
    YELLOW_COLOR='E[1;33m'
    BLUE_COLOR='E[1;34m'
    PINK_COLOR='E[1;35m'
    RES='E[0m'
    if [ $# -ne 2 ];then
    echo "usage $0 content {red|yellow|blue|green}"
    exit 1
    fi
    case "$2" in
    red|RED)
    echo -e "${RED_COLOR}$1${RES}"
    ;;
    yellow|YELLOW)
    echo -e "${YELLOW_COLOR}$1${RES}"
    ;;
    green|GREEN)
    echo -e "${GREEN_COLOR}$1 ${RES}"
    ;;
    blue|BLUE)
    echo -e "${BLUE_COLOR}$1${RES}"
    ;;
    pink|PINK)
    echo -e "${PINK_COLOR}$1${RES}"
    ;;
    esac
    }
    new_chars xixi red
    new_chars haha green
    new_chars "welcome to xyz linux" yellow

    命令传参模式 

    new_chars “$1” “$2”

    案例四:

    使用函数来编写nginx启动脚本

    #!/bin/bash
    # chkconfig: - 99 20
    # description:nginx
    . /etc/init.d/functions

    PROG="/usr/local/nginx/sbin/nginx"
    PIDF="/usr/local/nginx/logs/nginx.pid"

    case $1 in
    start)
    $PROG >& /dev/null
    [ $? -eq 0 ] && action "nginx is started" /bin/true||
    action "nginx is started" /bin/false
    ;;
    stop)
    kill -s QUIT $(cat $PIDF) >& /dev/null
    [ $? -eq 0 ] && action "nginx is stop" /bin/true||
    action "nginx is stop" /bin/false
    ;;
    restart)
    $0 stop >& /dev/null
    $0 start >& /dev/null
    [ $? -eq 0 ] && action "nginx is restart" /bin/true||
    action "nginx is restart" /bin/false
    ;;
    reload)
    kill -s HUP $(cat $PIDF)
    [ $? -eq 0 ] && action "nginx is reload" /bin/true||
    action "nginx is reload" /bin/false
    ;;
    *)
    echo "useage:$0 {start|stop|restart|reload}"
    exit 1
    esac
    exit 0

    #!/bin/bash
    # chkconfig: - 99 20
    # description:nginx
    . /etc/init.d/functions

    PROG="/usr/local/nginx/sbin/nginx"
    PIDF="/usr/local/nginx/logs/nginx.pid"

    start(){
    $PROG >& /dev/null
    [ $? -eq 0 ] && action "nginx is started" /bin/true||
    action "nginx is started" /bin/false
    }
    stop(){
    kill -s QUIT $(cat $PIDF) >& /dev/null
    [ $? -eq 0 ] && action "nginx is stop" /bin/true||
    action "nginx is stop" /bin/false
    }
    restart(){
    $0 stop >& /dev/null
    $0 start >& /dev/null
    [ $? -eq 0 ] && action "nginx is restart" /bin/true||
    action "nginx is restart" /bin/false
    }
    reload(){
    kill -s HUP $(cat $PIDF)
    [ $? -eq 0 ] && action "nginx is reload" /bin/true||
    action "nginx is reload" /bin/false
    }
    other(){
    echo "useage:$0 {start|stop|restart|reload}"
    exit 1
    }

    case $1 in
    start)
    start
    ;;
    stop)
    stop
    ;;
    restart)
    restart
    ;;
    reload)
    reload
    ;;
    *)
    other
    ;;
    esac
    exit 0

    案例五:检测url是否为200OK(人性化输出)

    #!/bin/bash
    . /etc/rc.d/init.d/functions
    while true
    do
    function check_url(){
    curl -I -s --connect-timeout 10 $1|head -1|awk -F'[ ]+' '{print $2}' && return 0||return 1
    }
    #check_url $1 #命令行传参模式
    statu=$(check_url www.baidu.com)
    if [ $statu = 200 ];then
    action "url this is yes!" /bin/true
    else
    action "url this is no!" /bin/false
    fi
    sleep 1
    done

    案例六: 批量检查web服务是否正常并发送相关邮件                          

  • 相关阅读:
    BZOJ.1468.Tree(点分治)
    BZOJ.1935.[SHOI2007]Tree园丁的烦恼(CDQ分治 三维偏序)
    BZOJ.4319.[cerc2008]Suffix reconstruction(后缀数组 构造 贪心)
    BZOJ.3262.陌上花开([模板]CDQ分治 三维偏序)
    洛谷.3374.[模板]树状数组1(CDQ分治)
    BZOJ.4566.[HAOI2016]找相同字符(后缀数组 单调栈)
    POJ.3145.Common Substrings(后缀数组 倍增 单调栈)
    POJ.2774.Long Long Message/SPOJ.1811.LCS(后缀数组 倍增)
    POJ.1743.Musical Theme(后缀数组 倍增 二分 / 后缀自动机)
    UOJ.35.[模板]后缀排序(后缀数组 倍增)
  • 原文地址:https://www.cnblogs.com/xiaoyongzhuo/p/7459188.html
Copyright © 2020-2023  润新知