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