• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Shell函数的7种用法介绍

    1. 在shell文件内部定义函数并引用:

    复制代码 代码如下:

    [~/shell/function]# cat factorial.sh
    #!/bin/bash
    function factorial
    {
    factorial=1
    for (( i=1;i = $1;i++ ))
            do
            factorial=$[ $factorial * $i ]
            done
    echo $1的阶乘是:$factorial
    }
    echo '程序名':$0,用于求阶乘
    factorial $1
    [~/shell/function]# ./factorial.sh 10

    程序名:./factorial.sh,用于求阶乘
    10的阶乘是:3628800

    2.返回值

    函数返回码是指函数最后一条命令的状态码,可以用于函数返回值
    使用return命令手动指定返回值:

    复制代码 代码如下:

    [~/shell/function]# cat return.sh
    #!/bin/bash
    function fun1 {
      read -p "enter a: " a
      echo -n "print 2a: "
      return $[ $a * 2 ]
    }
    fun1
    echo "return value $?"
    [~/shell/function]# ./return.sh
    enter a: 100
    print 2a: return value 200

    由于shell状态码最大是255,所以当返回值大于255时会出错。

    复制代码 代码如下:

    [~/shell/function]# ./return.sh
    enter a: 200
    print 2a: return value 144

    3.函数输出

    为了返回大于255的数、浮点数和字符串值,最好用函数输出到变量:

    复制代码 代码如下:

    [~/shell/function]# cat ./fun_out.sh
    #!/bin/bash
    function fun2 {
      read -p "enter a: " a
      echo -n "print 2a: "
      echo $[ $a * 2 ]
    }
    result=`fun2`
    echo "return value $result"
    [~/shell/function]# ./fun_out.sh    
    enter a: 400
    return value print 2a: 800

    4.向函数传递参数(使用位置参数):

    复制代码 代码如下:

    [~/shell/function]# cat ./parameter.sh
    #!/bin/bash
    if [ $# -ne 3 ]
    then
        echo "usage: $0 a b c"
        exit
    fi
    fun3() {
        echo $[ $1 * $2 * $3 ]
    }
    result=`fun3 $1 $2 $3`
    echo the result is $result
    [~/shell/function]# ./parameter.sh  1 2 3
    the result is 6
    [~/shell/function]# ./parameter.sh  1 2
    usage: ./parameter.sh a b c

    5.全局变量与局部变量

    默认条件下,在函数和shell主体中建立的变量都是全局变量,可以相互引用,当shell主体部分与函数部分拥有名字相同的变量时,可能会相互影响,例如:

    复制代码 代码如下:

    [~/shell/function]# cat ./variable.sh   
    #!/bin/bash
    if [ $# -ne 3 ]
    then
        echo "usage: $0 a b c"
        exit
    fi
    temp=5
    value=6
    echo temp is: $temp
    echo value is: $value
    fun3() {
        temp=`echo "scale=3;$1*$2*$3" | bc -ql`  
        result=$temp
    }
    fun3 $1 $2 $3
    echo "the result is $result"
    if [ `echo "$temp > $value" | bc -ql` -ne 0 ]
    then
        echo "temp is larger"
    else
        echo "temp is still smaller"
    fi
    [~/shell/function]# ./variable.sh  12 3 2
    temp is: 5
    value is: 6
    the result is 72
    temp is larger

    在这种情况下,在函数内部最好使用局部变量,消除影响。

    复制代码 代码如下:

    [~/shell/function]# cat ./variable.sh
    #!/bin/bash
    if [ $# -ne 3 ]
    then
        echo "usage: $0 a b c"
        exit
    fi
    temp=5
    value=6
    echo temp is: $temp
    echo value is: $value
    fun3() {
        local temp=`echo "scale=3;$1*$2*$3" | bc -ql`  
        result=$temp
    }
    fun3 $1 $2 $3
    echo "the result is $result"
    if [ `echo "$temp > $value" | bc -ql` -ne 0 ]
    then
        echo "temp is larger"
    else
        echo "temp is still smaller"
    fi
    [~/shell/function]# ./variable.sh  12 3 2
    temp is: 5
    value is: 6
    the result is 72
    temp is still smaller

    6.向函数传递数组变量:

    复制代码 代码如下:

    [~/shell/function]# cat array.sh
    #!/bin/bash
    a=(11 12 13 14 15)
    echo ${a[*]}
    function array(){
      echo parameters : "$@"
      local factorial=1
      for value in "$@"
      do
        factorial=$[ $factorial * $value ]
      done
      echo $factorial
    }
    array ${a[*]}
    [~/shell/function]# ./array.sh
    11 12 13 14 15
    parameters : 11 12 13 14 15
    360360

    7.函数返回数组变量

    复制代码 代码如下:

    [~/shell/function]# cat array1.sh
    #!/bin/bash
    a=(11 12 13 14 15)
    function array(){
      echo parameters : "$@"
      local newarray=(`echo "$@"`)
      local element="$#"
      local i
      for (( i = 0; i $element; i++ ))
      {
        newarray[$i]=$[ ${newarray[$i]} * 2 ]   
      }
      echo  new value:${newarray[*]}
    }
    result=`array ${a[*]}`
    echo ${result[*]}
    [~/shell/function]# ./array1.sh
    parameters : 11 12 13 14 15 new value:22 24 26 28 30

    您可能感兴趣的文章:
    • Shell中关于时间和日期的函数总结
    • Linux 在Shell脚本中使用函数实例详解
    • shell 使用数组作为函数参数的方法(详解)
    • Shell使用Epoch进行日期时间转换和计算的几个小函数
    • Linux Shell函数返回值
    • shell中函数的应用
    • PowerShell中的函数重载示例
    • Shell中函数返回值超出问题
    • Shell脚本中使用function(函数)示例
    • 浅谈Shell中的函数
    上一篇:Shell脚本实现随机数多种方法介绍(date、random、uuid)
    下一篇:Shell去除空行的4种方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Shell函数的7种用法介绍 Shell,函数,的,7种,用法,介绍,