十四、函数

1 函数的定义和基本知识

在linux shell中,所有的函数定义都是平行的,即不允许在函数体内再定义其他的函数,但允许函数之间相互调用

1.1 函数的定义和基本知识

  • 说明

    • linux shell中函数的返回值只能为退出状态0或1
  • 语法

    [function] function_name(){
    	command1
    	command2
    	...
    	commandN
    }
    
    • 在函数名前可以加上关键字function,可选
    • 函数体中的命令集合必须含有至少一条命令,函数不允许空命令
    • 函数之间通过参数、函数返回值通信
    • 函数在脚本中出现的次序可以是任意的,但必须按照脚本中的调用次序执行这些函数

2 向函数传递参数

  • 说明

    • 在bash shell编程中,向函数传递的参数仍然是以位置参数的方式来传递的,而不能传递数组等其他形式变量
    • linux shell脚本编程使用间接变量需使用变量${!parameter}来实现
  • 示例

    #! /bin/bash
    
    function half(){
    	let "n=$1"
    	let "n=n/2"
    	echo "In the function half() ,the value is $n"
    }
    
    m=$1
    echo "Before the value m is $m"
    half $m
    echo "After the value m is $m"
    
    

3 函数返回值

  • 说明
    • 在linux shell编程中,函数通过return返回其退出状态,0表示无错误,1表示有错误

4 函数调用

  • 说明
    • 函数之间允许相互调用
    • 允许一个函数调用多个函数

5 局部变量和全局变量

  • 说明
    • 在linux shell编程中,可以通过local关键字在shell函数中声明局部变量,局部变量将局限在函数范围内
    • 函数可调用函数外的全局变量,如果一个局部变量和一个全局变量的名字相同,则在函数中局部变量将会覆盖掉全局变量

6 函数递归

  • 说明

    • Linux shell中可以递归调用函数,即函数可以直接或间接地调用其自身
    • 需要加控制条件,避免无穷递归
  • 示例

    #! /bin/bash
    
    fucntion fact(){
    	let "num=$1"
    	if [ "$num" -eq 0 ]
    		then 
    			factorial=1
    		else
    			let "decnum=num-1"
    			fact $decnum
    			let "factorial=$num*$?"
    	fi
    	return $factorial
    }
    
    fact $1
    
    echo "Factorial of $1 is $?"
    
    exit 0;
    
原文地址:https://www.cnblogs.com/nuochengze/p/14563381.html