linux shell自定义函数(定义,返回值,变量作用域)

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。下面说说它的定义方法,以及调用需要注意那些事项。
 
一、定义shell函数(define function)
linux shell自定义函数(定义,返回值,变量作用域)[ function ] funname [()]    
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域){    
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)        action;    
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)        [return int;]    
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)}    
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)说明:    
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)1、可以带function fun()    定义,也可以直接fun() 定义,不带任何参数。    
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255    
linux shell自定义函数(定义,返回值,变量作用域) 
 
linux shell自定义函数(定义,返回值,变量作用域)实例(testfun1.sh): 
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)#!/bin/sh     
linux shell自定义函数(定义,返回值,变量作用域)fSum 3 2;     
linux shell自定义函数(定义,返回值,变量作用域)function fSum()     
linux shell自定义函数(定义,返回值,变量作用域){     
linux shell自定义函数(定义,返回值,变量作用域)            echo $1,$2;     
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)            return $(($1+$2));     
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)}     
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)fSum 5 7;     
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)total=$(fSum 3 2);     
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)echo $total,$?;     
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)                                            
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)sh testfun1.sh     
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)testfun1.sh: line 3: fSum: command not found     
linux shell自定义函数(定义,返回值,变量作用域)5,7     
linux shell自定义函数(定义,返回值,变量作用域)3,2    
linux shell自定义函数(定义,返回值,变量作用域)    
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)从上面这个例子我们可以得到几点结论: 
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)1、必须在调用函数地方之前,声明函数,shell脚本是逐行运行。不会像其它语言一样先预编译。一次必须在使用函数前先声明函数。 
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)2、total=$(fSum 3 2);    通过这种调用方法,我们清楚知道,在shell 中 单括号里面,可以是:命令语句。 因此,我们可以将shell中函数,看作是定义一个新的命令,它是命令,因此 各个输入参数直接用 空格分隔。 一次,命令里面获得参数方法可以通过:$0…$n得到。 $0代表函数本身。    
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)3、函数返回值,只能通过$? 系统变量获得,直接通过=,获得是空值。其实,我们按照上面一条理解,知道函数是一个命令,在shell获得命令返回值,都需要通过$?获得。 
linux shell自定义函数(定义,返回值,变量作用域) 
 
二、函数作用域,变量作用范围
linux shell自定义函数(定义,返回值,变量作用域)先我们看一个实例(testfun2.sh ): 
linux shell自定义函数(定义,返回值,变量作用域)view sourceprint?01 #!/bin/sh     
linux shell自定义函数(定义,返回值,变量作用域)echo $(uname);     
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)declare num=1000; 
linux shell自定义函数(定义,返回值,变量作用域)     
linux shell自定义函数(定义,返回值,变量作用域)uname()     
linux shell自定义函数(定义,返回值,变量作用域){     
linux shell自定义函数(定义,返回值,变量作用域)     echo "test!";     
linux shell自定义函数(定义,返回值,变量作用域)     ((num++));     
linux shell自定义函数(定义,返回值,变量作用域)     return 100;     
linux shell自定义函数(定义,返回值,变量作用域)}     
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)testvar()     
linux shell自定义函数(定义,返回值,变量作用域){     
linux shell自定义函数(定义,返回值,变量作用域) 
linux shell自定义函数(定义,返回值,变量作用域)         local num=10;     
linux shell自定义函数(定义,返回值,变量作用域)         ((num++));     
linux shell自定义函数(定义,返回值,变量作用域)         echo $num;     
linux shell自定义函数(定义,返回值,变量作用域)}            
linux shell自定义函数(定义,返回值,变量作用域)uname;     
linux shell自定义函数(定义,返回值,变量作用域)echo $?     
linux shell自定义函数(定义,返回值,变量作用域)echo $num;     
linux shell自定义函数(定义,返回值,变量作用域)testvar;     
linux shell自定义函数(定义,返回值,变量作用域)echo $num;     
linux shell自定义函数(定义,返回值,变量作用域)sh testfun2.sh     
linux shell自定义函数(定义,返回值,变量作用域)Linux     
linux shell自定义函数(定义,返回值,变量作用域)test!     
linux shell自定义函数(定义,返回值,变量作用域)100     
linux shell自定义函数(定义,返回值,变量作用域)1001     
linux shell自定义函数(定义,返回值,变量作用域)11     
linux shell自定义函数(定义,返回值,变量作用域)1001    
 
 




本文转自 fenghao.cn 51CTO博客,原文链接:http://blog.51cto.com/linuxguest/545865,如需转载请自行联系原作者
上一篇:node_exporter+prometheus+grafana实现clickhouse及主机监控


下一篇:Javascript高级程序设计第二版第四章--变量,作用域及内存问题--笔记