• Shell函数的7种用法介绍


    这篇文章主要介绍了Shell函数的7种用法介绍,本文讲解了在shell文件内部定义函数并引用、返回值、函数输出、向函数传递参数、全局变量与局部变量等内容,需要的朋友可以参考下。

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

    点击(此处)折叠或打开

    1. [~/shell/function]# cat factorial.sh
    2. #!/bin/bash
    3. function factorial
    4. {
    5. factorial=1
    6. for (( i=1;i <= $1;i++ ))
    7.         do
    8.         factorial=$[ $factorial * $i ]
    9.         done
    10. echo $1的阶乘是:$factorial
    11. }
    12. echo '程序名':$0,用于求阶乘
    13. factorial $1
    14. [~/shell/function]# ./factorial.sh 10
    程序名:./factorial.sh,用于求阶乘
    10的阶乘是:3628800

    2.返回值

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


    点击(此处)折叠或打开

    1. [~/shell/function]# cat return.sh
    2. #!/bin/bash
    3. function fun1 {
    4.   read -p "enter a: " a
    5.   echo -n "print 2a: "
    6.   return $[ $a * 2 ]
    7. }
    8. fun1
    9. echo "return value $?"
    10. [~/shell/function]# ./return.sh
    11. enter a: 100
    12. print 2a: return value 200
    由于shell状态码最大是255,所以当返回值大于255时会出错。

    点击(此处)折叠或打开

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

    3.函数输出

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


    点击(此处)折叠或打开

    1. [~/shell/function]# cat ./fun_out.sh
    2. #!/bin/bash
    3. function fun2 {
    4.   read -p "enter a: " a             #接收用户输入
    5.   echo -n "print 2a: "
    6.   echo $[ $a * 2 ]
    7. }
    8. result=`fun2`                          #这里是反单引号
    9. echo "return value $result"
    10. [~/shell/function]# ./fun_out.sh
    11. enter a: 400
    12. return value print 2a: 800
    4.向函数传递参数(使用位置参数):


    点击(此处)折叠或打开

    1. [~/shell/function]# cat ./parameter.sh
    2. #!/bin/bash
    3. if [ $# -ne 3 ]
    4. then
    5.     echo "usage: $0 a b c"
    6.     exit
    7. fi
    8. fun3() {
    9.     echo $[ $1 * $2 * $3 ]
    10. }
    11. result=`fun3 $1 $2 $3`
    12. echo the result is $result
    13. [~/shell/function]# ./parameter.sh 1 2 3
    14. the result is 6
    15. [~/shell/function]# ./parameter.sh 1 2
    16. usage: ./parameter.sh a b c

    5.全局变量与局部变量

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


    点击(此处)折叠或打开

    1. [~/shell/function]# cat ./variable.sh
    2. #!/bin/bash
    3. if [ $# -ne 3 ]
    4. then
    5.     echo "usage: $0 a b c"
    6.     exit
    7. fi
    8. temp=5
    9. value=6
    10. echo temp is: $temp
    11. echo value is: $value
    12. fun3() {
    13.     temp=`echo "scale=3;$1*$2*$3" | bc -ql`
    14.     result=$temp
    15. }
    16. fun3 $1 $2 $3
    17. echo "the result is $result"
    18. if [ `echo "$temp > $value" | bc -ql` -ne 0 ]
    19. then
    20.     echo "temp is larger"
    21. else
    22.     echo "temp is still smaller"
    23. fi
    24. [~/shell/function]# ./variable.sh 12 3 2
    25. temp is: 5
    26. value is: 6
    27. the result is 72
    28. temp is larger
    在这种情况下,在函数内部最好使用局部变量,消除影响。

    点击(此处)折叠或打开

    1. [~/shell/function]# cat ./variable.sh
    2. #!/bin/bash
    3. if [ $# -ne 3 ]
    4. then
    5.     echo "usage: $0 a b c"
    6.     exit
    7. fi
    8. temp=5
    9. value=6
    10. echo temp is: $temp
    11. echo value is: $value
    12. fun3() {
    13.     local temp=`echo "scale=3;$1*$2*$3" | bc -ql`            #多了个local关键字
    14.     result=$temp
    15. }
    16. fun3 $1 $2 $3
    17. echo "the result is $result"
    18. if [ `echo "$temp > $value" | bc -ql` -ne 0 ]
    19. then
    20.     echo "temp is larger"
    21. else
    22.     echo "temp is still smaller"
    23. fi
    24. [~/shell/function]# ./variable.sh 12 3 2
    25. temp is: 5
    26. value is: 6
    27. the result is 72
    28. temp is still smaller
    6.向函数传递数组变量:


    点击(此处)折叠或打开

    1. [~/shell/function]# cat array.sh
    2. #!/bin/bash
    3. a=(11 12 13 14 15)
    4. echo ${a[*]}                                                            #打印数组的所有元素
    5. function array(){
    6.   echo parameters : "$@"                     #打印参数列表
    7.   local factorial=1
    8.   for value in "$@"
    9.   do
    10.     factorial=$[ $factorial * $value ]
    11.   done
    12.   echo $factorial
    13. }
    14. array ${a[*]}
    15. [~/shell/function]# ./array.sh
    16. 11 12 13 14 15
    17. parameters : 11 12 13 14 15
    18. 360360
    7.函数返回数组变量

    点击(此处)折叠或打开

    1. [~/shell/function]# cat array1.sh
    2. #!/bin/bash
    3. a=(11 12 13 14 15)
    4. function array(){
    5.   echo parameters : "$@"
    6.   local newarray=(`echo "$@"`)
    7.   local element="$#"                                         #参数的个数
    8.   local i
    9.   for (( i = 0; i < $element; i++ ))
    10.   {
    11.     newarray[$i]=$[ ${newarray[$i]} * 2 ]
    12.   }
    13.   echo new value:${newarray[*]}
    14. }
    15. result=`array ${a[*]}`
    16. echo ${result[*]}
    17. [~/shell/function]# ./array1.sh
    18. parameters : 11 12 13 14 15 new value:22 24 26 28 30
  • 相关阅读:
    MYSQL增量备份与恢复
    Centos7上MariaDB数据库启动问题解决
    mysql数据库的常用命令
    mysql数据库用户权限设置
    使mysql数据库支持简体中文
    如何在mysql数据库中开启使用tab键补全功能
    忘记mysql超户密码的解决方法
    Excel教程(复习)
    MySQL教程(复习)
    Linux教程(复习)
  • 原文地址:https://www.cnblogs.com/xialiaoliao0911/p/7523963.html
Copyright © 2020-2023  润新知