shell脚本函数

Posted zqq_hello_world

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于shell脚本函数的主要内容,如果未能解决你的问题,请参考以下文章

使用cat和EOF生成 shell 脚本时会自动解析变量的解决办法

linux中新增一个shell命令的方法

shell脚本应用的基本概念

shell脚本应用的基本概念

shell脚本的调试

shell实战之tomcat看门狗