首页 > 技术文章 > shell函数-3

webDepOfQWS 2019-04-04 14:50 原文

1、shell函数

1.1、shell函数定义

对于重复出现的代码,在shell中可以定义函数,然后在指定的地方调用即可。便于代码复用,提高开发效率。

定义函数的语法如下:

1 function 函数名(){
2  语句块
3  返回值
4 }

示例:

1 function hello(){
2 echo "Hello"
3 }

2、调用函数

通过函数名称来调用已定义的函数

1 function_name

两个数相加的函数与定义:

 1 #定义函数add
 2 function add(){
 3     a=1
 4     b=3
 5     val=`expr ${a} + ${b}`
 6     echo "${a} + ${b} is :${val}"
 7          
 8 }
 9 #调用函数
10 add

输出:

1 1 + 3 is :4

1.3、带参数的函数

上面的add函数a,b的值已写死,可用性太差。下面传入参数来重写add函数

 1 #定义函数add
 2 function add(){
 3     #$1表示第一个参数
 4     #$2表示第二个参数
 5     #$n表示第n个参数
 6     a=$1
 7     b=$2
 8     val=`expr ${a} + ${b}`
 9     echo "${a} + ${b} is :${val}"
10          
11 }
12 #调用函数
13 add 1 3
14 add 2 25

输出:

1 1 + 3 is :4
2 2 + 25 is :27

 1.4、函数返回值

1 #函数返回值不是必须的,与一般语言的返回值含义不同
2 #语法 return status_code,表示函数的退出状态
#退出状态是个数字,一般成功为0,失败为1
#$? 用来获取上一个命令的退出状态或返回值。
1 #调用函数
2 add 1 2
3 echo "add func exit code is : $?"

输出:

1 add func exit code is : 0

假如把add函数执行成功的退出状态定义为200,重写add函数并判断是否执行成功

示例:

 1 #定义函数add
 2 function add(){
 3         #定义成功状态码
 4     ok_code=200
 5     err_code=100    
 6     a=$1
 7     b=$2
 8     val=`expr ${a} + ${b}`
 9         if [ $? -eq 0 ]
10     then
11             return ${ok_code}
12     else
13             return ${err_code}
14     fi
15          
16 }
17 #调用函数
18 add 1 e
19 if [ $? -eq 200 ]
20 then
21     echo "add func run sucess."
22 else
23     echo "add func run fail."
24 fi

输出:

1 expr: 非整数参数
2 add func run fail.

1.5、如果获取函数的处理结果

a、使用全局变量

 1 #定义函数add
 2 function add(){
 3         #定义成功状态码
 4     ok_code=200
 5     err_code=100    
 6     a=$1
 7     b=$2
 8     val=`expr ${a} + ${b}`
 9         if [ $? -eq 0 ]
10     then
11             return ${ok_code}
12     else
13             return ${err_code}
14     fi
15          
16 }
17 #调用函数
18 add 1 2
19 echo "add 1 2 result is : ${val}"

输出:

1 add 1 2 result is : 3

b、在函数内部echo 出变量,在函数外部用$(func_name arg1  argn)捕捉

1 #定义函数add
2 function add(){    
3     a=$1
4     b=$2
5     val=`expr ${a} + ${b}`
6         echo ${val}
7 }
8 #使用$(add 1 2)捕捉结果
9 echo "add 1 2 result is : $(add 1 2)"

输出:

1 add 1 2 result is : 3

推荐使用第二种

1.6、break和continue

break用于退出循环,退出后循环不再执行。

cotinue用于退出本次循环,继续执行下一次循环。

break示例:

 1 #寻找1~10之间第一个偶数
 2 #找到后即跳出循环,不再继续
 3 for i in `seq 1 10`
 4 do
 5     tmp=`expr ${i} % 2`
 6     if [ ${tmp} -eq 0 ];then
 7     echo $i
 8         #continue
 9     break
10         fi
11 done

break输出:

1 2 

continue示例:

 1 #寻找1~10之间所有的偶数
 2 for i in `seq 1 10`
 3 do
 4     tmp=`expr ${i} % 2`
 5     if [ ${tmp} -eq 0 ];then
 6     echo $i
 7         continue
 8         #下面这句echo永远不会被执行
 9     echo "statement after cotinue"
10         fi
11 done

cotinue输出:

1 2
2 4
3 6
4 8
5 10

 

推荐阅读