shell脚本(五)函数

创建函数

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

#第一种function 
function name {    
	[commands] 
} 
#第二种 
name() { 
	[commands]  
}

使用函数

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

#!/bin/bash 
#定义一个函数,输出Hello world 
funct1() {    
	echo "Hello world" 
} 
echo "自定义函数输出" 
funct1

返回值

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

#!/bin/bash 
funct1() {   
	echo "hello world"
} 
funct1 
echo "函数退出状态码:$?"

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

#!/bin/bash 
funct1() {   
	echo "hello world"
return 11 
}
echo "函数退出状态码:$?"

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

#!/bin/bash 
funct1() { 
	read -p "enter a value: " value   
	echo $[ $value * 2 ]   
}
#接收函数输出 
result=`funct1` 
echo "result = $result" 
result1=$(funct1) 
echo "result1 = $result1"

在函数中使用变量

传递参数

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

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

全局变量

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

#!/bin/bash 
#在函数内使用全局变量 
funct() {    
	value=$[ $value * 2 ] 
} 
value=2 
#调用函数改变全局变量value的值 
funct 
echo "value = $value"

局部变量

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

#!/bin/bash 
fun() {    
	var1=zqq    
	local var2=var2-2       
} 
var2=var2-1 
fun 
echo "var1=$var1" 
echo "var2=$var2"

向函数传输入参数

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

#!/bin/bash 
funct() {   
	local array=($('echo "$@"'))    
	echo "${array[*]}" 
} 
array=(a b c d) 
funct

从函数返回数组

#!/bin/bash 
#从函数返回数组 
fun1() {    
	local array=(a b c d e)    
	echo "${array[*]}" 
} 
result=$(fun1) 
while a in $result 
do    
	echo "数组:$a" 
done

函数递归

#!/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"

创建库

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

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

在命令行创建函数

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

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

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

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

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

  1. 直接定义函数
  2. 读取函数文件,通过source命令引入,简写:. . /home/myfunmy fun
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值