`
memorymyann
  • 浏览: 266342 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

shell函数

阅读更多

函数语法:

函数名 () {

    命令

}

或者

function 函数名() {

     命令

}

 

调用方式

函数名 参数

 

参数和普通的shell脚本参数一模一样,以空格分隔,函数中同样以$1等来读取。

 

SHELL和其它语言的函数有个区别在于,他保存当前shell内存信息,就是函数可以访问的到父shell中的变量。例如:

#!/bin/sh
#first_function

function hello () {
        echo ${MY_WORD}
}

MY_WORD="hello world"
hello
[root@liumengli function]# ./first_function.sh
hello world
我们看到MY_WORD变量被打印了,也许这没什么,在让我们看下面一个调用方式

[root@liumengli function]# cat function.sh
#!/bin/sh
#function.sh

function say_hello () {
        echo ${VAR}
        return 0 #返回值,暂时别理他
}
[root@liumengli function]#
这是一个只定义了函数的文件,当我们某个脚本想调用say_hello函数时候,可以通过

[root@liumengli function]# cat third_function.sh
#!/bin/sh
#third_function.sh

. \/zhangchi/my_shell/function/function.sh #首先是定位文件,最好是全路径名存,前面是点空格\
VAR="hello world"
say_hello

exit 0
[root@liumengli function]# ./third_function.sh
hello world

先说下调用方式,当某个脚本想调用别的文件定义的函数时候,首先是定位文件,注释里面说明了,再调用即可,这里我们看出了,其它文件中的函数仍然可以访问得到变量VAR。

 

以上说了2种调用,这里介绍第3种,有些时候我们有大量脚本调用某个文件中的函数,那么你可以把这个文件定位到父进程SHELL中,这样每个有这个父进程启动的脚本都可以直接调用这个函数,像下面这样

[root@liumengli function]# . /zhangchi/my_shell/function/function.main (定位)
[root@liumengli function]# set
。。。。。。。

say_hello ()
{
    echo $VAR;
    return 0
}
[root@liumengli function]# cat function.main
#!/bin/sh
#function.main

function say_hello() {
        echo $VAR
        return 0
}
[root@liumengli function]#

set命令可以查看到被定为的函数,可以看到我们say_hello被定为到了父进程中,只要在这个shell下都可以直接使用say_hello,如果想修改需要先移除 say_hello,当然也可以直接修改,不过不是所有linux都直接改可以,所以建议先 unset再修改,再从新定位。

 

返回值。

 

返回值和脚本的 exit 有很大的相似,我们同样可以使用if 函数这样利用返回值来做判断条件,如果 return 0则会进入then语句中,如果是非0则会进入 else中。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics