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

创建函数
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中。

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值