关闭

linux学习(九) shell脚本(6)

467人阅读 评论(0) 收藏 举报
分类:
创建函数
1.基本脚本函数
1.1创建函数
方式一:使用关键字 function,后跟代码块的函数名。
function name{
	commands
}
name名称需要唯一在一个脚本中,
方式二:
name(){
commands
}
函数引用,直接调用函数名即可。
函数定义不一定位于shell脚本的起始部分,但应该注意,如果在函数定义之前使用函数,会受到错误信息。
1.2返回值
(1)默认退出状态
	默认情况下,函数的退出状态是函数的最后一条命令返回的退出状态。函数执行完毕之后可以使用标准变量$? 来获得函数的退出状态。
(2)使用return命令
	bash shell使用return命令以特定退出状态退出函数。return命令可以使用单个整数值来定义函数退出状态,提供了一种通过编程设置函数退出状态的简单方法:
function fun1 {
	read -p"Enter a value:" value
	echo "doubling the value"
	return $[$value * 2]
}
fun1
echo "The new value is : $?"
////上例中,将value乘2后的结果作为结束状态返回,通过$?获得结束状态,也就是希望得到的结果。
需要注意:
(a)在函数完成之后尽快提取返回值,因为再次执行其他命令会覆盖返回值{$?为最近一次命令的返回状态
(b)退出状态的取值范围为0-255
(c)使用函数输出
	函数的输出也可以捕获并存放到shell变量中,这种方法可以从函数获取任意类型的输出并给变量赋值:
result=`fun1`
	这个方法可以返回浮点数和字符串,所以这种方法可以非常灵活的从函数返回数据。
1.3 在函数中使用变量
(1)向函数传递参数
	函数可以使用标准参数环境变量来表示命令行传递给函数的参数。如,函数名在$0定义,函数命令行的其他参数使用变量$1, $2.等。专用变量$#可以用来确定传递给函数的参数数目(不包括函数名$0)
	在脚本中指定函数时,必须在函数所在的命令行提供参数。如下:
fun1 $value1  10
这样,该函数才可以使用参数环境变量获取参数值。使用这种方法向函数传递值。
additem () {
	if [ $# -eq 0 ] || [ $# -gt 2 ]
	then
		echo -1
	elif [ $# -eq 1 ]
	then
		echo $[$1 + $1]
	else
		echo $[$1 + $2]
	fi
}

echo -n "Adding 10 and 15":
value=`additem 10 15`
echo $value


函数的变量$0, $1, $2 等等,不同于脚本主代码的 $0, $1, $2 等等。如果想在函数中使用命令行参数送来的值,需要在调用该函数时,手动传递这些数据。
mulitem () {
	echo $[$1 * $2]
}

if [ $# -eq 2 ]
then
	value=`mulitem $1 $2`
	echo result is $value
fi

./test.sh 3 4

(2)在函数中处理变量
全局变量
	如果脚本的主体定义了全局变量,则在函数内部可以获取这个变量的值;如果在函数内部定义了全局变量,脚本的主体代码也可以获取该变量的值。
	默认情况下,脚本中定义的变量都是全局变量。在函数外部定义的变量,在函数内部仍能访问。
局部变量
	函数内部使用的变量为局部变量,这只需要在变量声明前加上local关键字 :local value
也可以给局部变量赋值语句加上local关键字: local value=$[$value + 2]
	关键字local确保变量仅在函数内部使用。如果脚本在函数外部有同名变量,则shell能区分开这两个变量。在函数内部操作局部变量时,函数外部的同名变量不受影响。

4.数组变量和函数

5.使用库文件
	可以将一个shell脚本中定义多个函数和变量,作为库文件;这样其他shell脚本可以直接引用该库文件。如:
test.sh
#!/bin/bash
#test bash shell
mulitem () {
	echo $[$1 * $2]
}
additem () {
	echo $[$1 + $2]
}

test1.sh
#!/bin/bash


. ./test.sh 
#相当于引用库, 注意前面的点操作符+库文件的路径

value1=`additem 1 3`
value2=`mulitem 3 4`
echo "The additem result is : $value1"
echo "The mulitem result is : $value2"
6.在shell终端中直接使用函数:
可以在命令行中定义函数,此次终端会话中,该函数有效,如果关闭了终端,则函数失效。
为了下次打开终端仍然能够使用函数,则可以
1)将函数定义写在.bashrc中,这样每次打开shell终端之后,仍然能够使用该函数。
jason@Ubuntu:~$ function additem { echo $[$1 + $2]; }
jason@Ubuntu:~$ additem 10 3
13
这样要求,每条语句后面要有分号隔开;
jason@Ubuntu:~$ function mulitem {
> echo $[$1 * $2]
> }
jason@Ubuntu:~$ mulitem 3 4
12
2)提供函数文件:在一个shell 脚本文件中创建函数,将该脚本文件完整路径名添加到.bashrc中。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    文章分类