设为首页 加入收藏

TOP

Shell编程关于函数要注意的几点
2015-11-10 13:45:23 来源: 作者: 【 】 浏览:2
Tags:Shell 编程 关于 函数 注意

今天上午一个朋友突然QQ问到,shell编程中的函数为什么return只能是整数,怎么样才能将函数的执行结果返回并保存至某个变量中。其实这个问题很好解决---只需要认真了解下shell函数即可。以下是根据聊天记录整理了关于函数的几个点:


shell编程中关于函数需要知道的几点


?一、无论是在函数内,还是在函数外,$0的值都是该脚本本身。


? ? [root@target ~]# cat test.sh
? ? #!/bin/bash
? ?
? ? echo $0
? ?
? ? function testFunc(){
? ? ? ? echo "In function:"
? ? ? ? echo "\$0=$0"
? ? ? ? echo "\$1=$1"
? ? }
? ?
? ? testFunc 'test test'
? ? [root@target ~]# bash test.sh
? ? test.sh
? ? In function:
? ? $0=test.sh
? ? $1=test test


?二、函数内定义的变量(如果不是必须要修改全局变量的话)尽量使用local关键字定义成局部变量,以免覆盖全局变量值


? ?
[root@target ~]# cat local.sh
? ? #!/bin/bash
? ?
? ? TESTDATA="Hello world."
? ? TESTDATA1="Hello shell."
? ?
? ? function localFunc(){
? ? ? ? TESTDATA="Hello python."
? ? ? ? local TESTDATA1="Hello PHP."
? ? ? ? echo "In function:"
? ? ? ? echo "\$TESTDATA=$TESTDATA"
? ? ? ? echo "\$TESTDATA1=$TESTDATA1"
? ? }
? ?
? ? #call function
? ? localFunc
? ?
? ? echo "Out of function:"
? ? echo "\$TESTDATA=$TESTDATA"
? ? echo "\$TESTDATA1=$TESTDATA1"
? ? [root@target ~]# bash local.sh
? ? In function:
? ? $TESTDATA=Hello python.
? ? $TESTDATA1=Hello PHP.
? ? Out of function:
? ? $TESTDATA=Hello python.
? ? $TESTDATA1=Hello shell.


?三、函数内使用return 关键字返回一个0-255的值,表示该函数退出状态码(即该函数是否执行成功),0表示执行成功,非0表示失败。在日常工作中,可以根据条件使函数返回是否执行成功,供其他程序做判断使用。若需要函数返回一个结果值,并存储到一个变量中,要使用echo语句。


? ? [root@target ~]# cat return.sh
? ? #!/bin/bash
? ?
? ? function returnFunc(){
? ? ? ? echo "value"
? ? ? ? return 247
? ? }
? ?
? ? DATA=$(returnFunc)
? ? echo "\$?=$?"
? ? echo "\$DATA=$DATA"
? ? [root@target ~]# bash return.sh
? ? $?=247
? ? $DATA=value


?


四、如果有多个shell脚本,一个脚本需要调用另外一个脚本里的函数,需要执行以下命令,将指定的脚本文件载入:


. ./func.sh


或者


source ./func.sh


上边的操作类似于其他语言的include操作。


?


? [root@target ~]# cat func.sh
? ? #!/bin/bash
? ?
? ? function func1(){
? ? ? ? echo "This is func1"
? ? }
? ?
? ? function func2(){
? ? ? ? echo "This is func2"
? ? }
? ?
? ? function func3(){
? ? ? ? echo "This is func3"
? ? }
? ? [root@target ~]# cat call.sh
? ? #!/bin/bash
? ?
? ? #source ./func.sh
? ? . ./func.sh
? ?
? ? func1
? ? func2
? ? func3
? ? [root@target ~]# bash call.sh
? ? This is func1
? ? This is func2
? ? This is func3


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android中Parcelable接口的使用 下一篇pyinfo():一个像 phpinfo 一样的..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: