• shell脚本(五)函数


    创建函数

    shell脚本创建函数有两种方式

    #第一种function 
    function name {    
    	[commands] 
    } 
    #第二种 
    name() { 
    	[commands]  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    使用函数

    使用函数只需在脚本中指定函数名便可,但是函数使用如果在函数定义之前会报错

    #!/bin/bash 
    #定义一个函数,输出Hello world 
    funct1() {    
    	echo "Hello world" 
    } 
    echo "自定义函数输出" 
    funct1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    返回值

    base shell会把函数当作一个小型脚本,运行结束时会返回一个退出状态码,默认情况下函数的退出状态是函数中最后一条命令返回的退出状态码。在函数运行结束后可以用$?来确定函数的退出状态码。

    #!/bin/bash 
    funct1() {   
    	echo "hello world"
    } 
    funct1 
    echo "函数退出状态码:$?"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    使用return命令自定义函数状态码,退出状态码必须0-255之间

    #!/bin/bash 
    funct1() {   
    	echo "hello world"
    return 11 
    }
    echo "函数退出状态码:$?"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在shell脚本中定义的函数,使用的时候相当于一个命令,可以通过变量接命令的输出,同样也可以接受函数的输出

    #!/bin/bash 
    funct1() { 
    	read -p "enter a value: " value   
    	echo $[ $value * 2 ]   
    }
    #接收函数输出 
    result=`funct1` 
    echo "result = $result" 
    result1=$(funct1) 
    echo "result1 = $result1"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在函数中使用变量

    传递参数

    base shell会将函数当作小型脚本来对待,所以可以像脚本那样像函数传参数。在函数中使用$1跟脚本中的$1不一样,如果想在函数中使用执行脚本时传入的变量需要再传入到函数中。

    #!/bin/bash 
    funct1() {    
    	echo "param is $1" 
    } 
    #向函数内传递参数10 
    funct1 10
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    全局变量

    全局变量是在shell脚本中任何地方都有效的变量,默认情况下,在脚本中定义的任何变量都是全局变量。

    #!/bin/bash 
    #在函数内使用全局变量 
    funct() {    
    	value=$[ $value * 2 ] 
    } 
    value=2 
    #调用函数改变全局变量value的值 
    funct 
    echo "value = $value"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    局部变量

    在函数中使用变量可以定义为局部变量,local关键字可以把变量声明成局部变量。如果全局变量和局部变量有重名的变量名,shell将会保持着两个变量的值是分离的。

    #!/bin/bash 
    fun() {    
    	var1=zqq    
    	local var2=var2-2       
    } 
    var2=var2-1 
    fun 
    echo "var1=$var1" 
    echo "var2=$var2"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    向函数传输入参数

    向函数传入数组,将数组变量传入数组只会传入数组第一个值,应该将数组分解成单个值,然后将这些值传入函数,在函数内部再将传入的参数重新组合成一个数组。

    #!/bin/bash 
    funct() {   
    	local array=($('echo "$@"'))    
    	echo "${array[*]}" 
    } 
    array=(a b c d) 
    funct
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    从函数返回数组

    #!/bin/bash 
    #从函数返回数组 
    fun1() {    
    	local array=(a b c d e)    
    	echo "${array[*]}" 
    } 
    result=$(fun1) 
    while a in $result 
    do    
    	echo "数组:$a" 
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    函数递归

    #!/bin/bash 
    #函数递归算阶乘 5!=  1*2*3*4*5  =  120 
    #定义阶乘递归函数 
    fun1() {    
    	if[ $1 -eq 1 ]    
    	then        
    		#如果传入的值为1直接输出        
    		echo 1    
    	else        
    		#临时存储下一位        
    		local temp=$[ $1 - 1 ]       
    		#递归一直获取到1  *  2        
    		local var1=$(fun1 $temp)        
    		echo $[ $1 * $var1 ]    
    	fi 
    } 
    #接受用户收入的值 
    read -p "enter value: " val 
    #调用函数,接收函数输出 
    result=$(fun1 $val) 
    echo "result=$result"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    创建库

    多个脚本用到同一功能,可以把函数封装到函数库文件,然后通过source命令引入,在shell脚本中运行库文件,只需要用:. ./filepath

    #库文件  位置:/home/add.sh 
    #创建add函数 
    function add {   
    	echo $[ $1 + $2 ]  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    #!/bin/bash 
    #引入库文件,里面定义add函数
    . ./home/add.sh 
    #调用函数接收输出 
    result=$(add 10 20) 
    echo "result=$result"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在命令行创建函数

    函数可以封装一些多切复杂的常用操作,函数用的时候像命令一样使用,可以在命令行上直接创建函数,直接调用。在命令行上创建函数每个命令要用分号;结尾

    #在命令行上创建函数,不退出的情况下直接调用 
    >function add { echo $[ $1 + $2 ]; } >add 10 20
    
    • 1
    • 2

    在命令行创建文件退出shell就会消失,想长久存在可以在.bashrc文件中定义函数。base shell每次启动时都会在主目录下查找这个文件

    返回用户主目录m命令:cd ~

    有两种方式可以在.bashrc文件中定义函数

    1. 直接定义函数
    2. 读取函数文件,通过source命令引入,简写:. . /home/myfunmy fun
  • 相关阅读:
    DI依赖注入-P8,P9,P10,P11
    安全学习_开发相关_Java反射机制基础及对安全测试影响
    空间参考简介
    深度学习开发流程
    纯css+js自制下拉框
    linux傻瓜式安装Java环境及中间件
    JavaGUI------------常用的组件(单选、复选框、下拉列表)
    JVM 运行时数据区和垃圾收集算法
    Mysql查询去空格方法汇总
    windows下mysql的数据主主同步
  • 原文地址:https://blog.csdn.net/zhaoqingquanajax/article/details/126654540