zoukankan      html  css  js  c++  java
  • Shell函数

    • 函数的作用
      • 命令合集,完成特定功能的代码块
      • 函数必须先定义才可以使用,如果定义不调用则不被执行
      • 使代码模块化,避免重复代码,加强可读性,便于复用

    toc

    函数基本用法

    定义函数三种写法

    ## 方法一
    函数名() {
        函数要实现的功能代码
    }
    ## 方法二
    function 函数名 {
        函数要实现的功能代码
    ## 方法三
    function 函数名() {
        函数要实现的功能代码
    }

    基本语法

    [root@Shell ~]# vim test.sh
    #!/bin/bash
    ## 定义函数
    function mantou () {  
        echo "吃馒头!"
    }  
    function miantiao () {  
        echo "吃面条!"  
    }  
    ## 调用函数(不调用不会执行)
    mantou
    [root@Shell ~]# source test.sh
    吃馒头

    定义错误数值

    [root@Shell ~]# vim return.sh
    #!/bin/bash
    funreturn() {
        read -p "enter num: " num
        return $[2*$num]
    }
    funreturn
    [root@Shell ~]# source return.sh 2 ; echo $?
    4

    函数传参

    位置传参

    #!/bin/bash
    ## 位置变量不是3个就退出
    if [ $# -ne 3 ];then
        echo "usage: `basename $0` par1 par2 par3"
        exit
    fi
    ## 函数里面三个位置变量相乘
    fun() {
        echo "$(($1 * $2 * $3))"
    }
    ## 函数有参数时候,必须在函数后面加上参数,下面两种都可以
    fun $*
    fun $1 $2 $ $3

    数组传参

    #!/bin/bash
    ## 定义数组
    num=(1 2 3)
    num2=(2 3 4)
    ## 传递所有数值相乘并显示最后结果
    array() {
        number=1
        for i in $*
         do
            number=$[number * $i]
        done
        echo "$number"
    }
    ## 把数组里元数值传递函数相乘
    array ${num[*]} 
    array ${num2[*]} 

    编写 Nginx 启动脚本,使用系统内置函数达到返回结果

    #!/bin/bash
    ## 调用系统内置函数
    source /etc/init.d/functions
    ## 执行
    ret(){
        if [ $? -eq 0 ];then
            action "Nginx Is $1" /bin/true
        else
            action "Nginx Is $1" /bin/false
        fi
    }
    status(){
        Ngx_status=$(ps aux|grep "[n]ginx"|egrep -v "vi|sh"|grep master|awk '{print
    $2}')
        Nginx_Status_Port=$(netstat -lntp|grep nginx|awk '{print $4}')
        echo "Nginx_status_Pid: $Ngx_status"
        echo "Nginx_status_Port: $Nginx_Status_Port"
    }
    case $1 in
    start)
        /usr/sbin/nginx &>/dev/null
        ret $1
        ;;
    stop)
        /usr/sbin/nginx -s stop &>/dev/null
        ret $1
        ;;
    restart)
        /usr/sbin/nginx -s stop &>/dev/null
        ret $1
        sleep 1
        /usr/sbin/nginx &>/dev/null
        ret $1
        ;;
    reload)
         /usr/sbin/nginx -s reload
        ret $1
        ;;
    status)
        status
        ;;
    *)
        echo "Usage: $0 {start|stop|status|restart|reload|}"
    esac
  • 相关阅读:
    Kmeans文本聚类系列(已经完成)
    提问的智慧
    公告:关于博客管理
    MSSQL语句备份
    贝叶斯分类专题
    利用Viterbi算法,二元词图分词系列
    从KL相对熵(relative entropy或 KullbackLeibler divergence,KL距离)看文本语义距离系列
    特征词选择算法对文本分类准确率的影响(五)
    新闻类网页正文提取系列
    特征词选择算法对文本分类准确率的影响(四)
  • 原文地址:https://www.cnblogs.com/songguoyou/p/11884273.html
Copyright © 2011-2022 走看看