函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高。像其他编程语言一样,Shell也支持函数。Shell函数必须先定义后使用。

1.Shell函数的定义格式

可以带function关键字使用function fun_name()来定义,也可以直接给出函数名fun_name()定义。不能带任何参数,函数名必须唯一,使时可以传递参数,使用$1,$2,...,$* ,$@来获取参数。建议使用function关键字来定义函数,便于代码阅读。定义格式如下:

function_name()
{
  list of commands
  [ return value ]
}

#或
function function_name()
{
  list of commands
  [ return value ]
}

函数返回值,可以显式增加return语句;如果不加,会将最后一条命令运行结果作为返回值。

Shell 函数返回值只能是整数,一般用来表示函数执行成功与否,0表示成功,其他值表示失败。如果 return 其他数据,比如一个字符串,往往会得到错误提示:“numeric argument required”。

如果一定要让函数返回字符串,那么可以先定义一个变量,用来接收函数的计算结果,脚本在需要的时候访问这个变量来获得函数返回值。

#!/bin/bash

funcWorld()
{
    echo "world"
}
res=`funcWorld`
echo "hello $res"

运行结果:

hello world

2.Shell函数的调用方式

要在脚本中调用函数, 只需给出函数名。比如要调用小节“1.Shell函数的定义格式”中的函数funcWorld(), 只需给出函数名funcWorld,函数名无需后跟小括号()。Shell函数的调用方式与Shell命令很相似。

3.Shell函数返回值的获取

使用$"htmlcode">

#!/bin/bash

add()
{
    varAddRes=`expr $1 + $2`
    return $varAddRes
}
add 1 2		#调用函数,传递参数
echo $"htmlcode">
#!/bin/bash

function test()
{
	local localVar=dablelv	#局部变量
}
test
echo $localVar			 	#输出为空

5.Shell函数使用时需要前置申明吗

Shell函数在使用前必须定义,没有申明的说法!一个通常的办法是把函数定义放在脚本开始部分。

6.Shell函数的删除

像删除变量一样,删除函数也可以使用unset命令,不过要加上-f选项,如下所示:

unset -f function_name

7.在命令行中使用函数

如果想在命令行中使用函数,需要在命令行执行函数的定义。直接在命令行定义Shell函数有个缺点,一旦退出Shell,函数定义将失效。可以将函数定义在Home目录下的.bash_profile文件,或者对所有用户均生效的/etc/profile文件,这样每次登录后,profile文件都会被调用,在命令提示符后面输入函数名字就可以立即调用。

注意:修改文件后要想马上生效需要执行source /etc/profile或者source ~/.bash_profile,不然只能在下次重新登录时才生效。

以上就是浅谈Shell中的函数的详细内容,更多关于shell 函数的资料请关注其它相关文章!

标签:
shell,函数

免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
评论“浅谈Shell中的函数”
暂无“浅谈Shell中的函数”评论...

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。