shell脚本之函数

来源:互联网 发布:网络数据库的信息检索 编辑:程序博客网 时间:2024/04/19 18:30

1.Shell 函数有两种语法形式:

function name {    commands    return}andname () {    commands    return}

这里的 name 是函数名,commands 是一系列包含在函数中的命令。

两种形式是等价的,可以交替使用。下面我们将查看一个说明 shell 函数使用方法的脚本:

1     #!/bin/bash23     # Shell function demo45     function funct {6       echo "Step 2"7       return8     }910     # Main program starts here1112     echo "Step 1"13     funct14     echo "Step 3"
输出:

step1

step2

step3



补充1:想让函数fsum返回字符串,可以echo "${a}+${b}=${c}"输出出来,通过sum=`fsum`来捕获,给变量sum赋值

your_name='qinjx'
str="Hello, I know your are \"${your_name}aa\"! \n"
echo ${str}
function fsum(){
        a=1
        b=2
        c=3
        echo "${a}+${b}=${c}"
}
sum=`fsum`
echo ${sum}

your_name='qinjx'
str="Hello, I know your are \"${your_name}aa\"! \n"
echo ${str}
function fsum(){
        a=1
        b=2
        c=3
        echo "${a}+${b}=${c}"
}
sum=`fsum`
echo ${sum}


补充二:想让函数fsum返回字符串,可以给一个全局变量赋值

your_name='qinjx'
str="Hello, I know your are \"${your_name}aa\"! \n"//全局变量str
echo ${str}
function fsum(){
        a=1
        b=2
        c=3
        str="${a}+${b}=${c}"
}
fsum
echo ${str}

补充三,函数返回整形值,只能通过$? 系统变量获得,否则为空

function fSum()
 {
     echo $1,$2;
     return $(($1+$2));
 }
 fSum 5 7;
 total=$(fSum 3 2);
 echo $total,$?;
                  
5,7
3,2
5

2.局部变量

局部变量只能在定义它们的 shell 函数中使用,并且一旦 shell 函数执行完毕,它们就不存在了。

拥有局部变量允许程序员使用的局部变量名,可以与已存在的变量名相同,这些变量可以是全局变量, 或者是其它 shell 函数中的局部变量,却不必担心潜在的名字冲突。

这里有一个实例脚本,其说明了怎样来定义和使用局部变量:

#!/bin/bash# local-vars: script to demonstrate local variablesfoo=0 # global variable foofunct_1 () {    local foo  # variable foo local to funct_1    foo=1    echo "funct_1: foo = $foo"}funct_2 () {    local foo  # variable foo local to funct_2    foo=2    echo "funct_2: foo = $foo"}echo "global:  foo = $foo"funct_1echo "global: foo = $foo"funct_2echo "global: foo = $foo"

正如我们所看到的,通过在变量名之前加上单词 local,来定义局部变量。这就创建了一个只对其所在的 shell 函数起作用的变量。在这个 shell 函数之外,这个变量不再存在。当我们运行这个脚本的时候, 我们会看到这样的结果:

[me@linuxbox ~]$ local-varsglobal:  foo = 0funct_1: foo = 1global:  foo = 0funct_2: foo = 2global:  foo = 0

我们看到对两个 shell 函数中的局部变量 foo 赋值,不会影响到在函数之外定义的变量 foo 的值。

这个功能就允许 shell 函数能保持各自以及与它们所在脚本之间的独立性。这个非常有价值,因为它帮忙 阻止了程序各部分之间的相互干涉。这样 shell 函数也可以移植。也就是说,按照需求, shell 函数可以在脚本之间进行剪切和粘贴。


3.你的 .bashrc 文件中的 shell 函数

Shell 函数完美地替代了别名,并且实际上是创建个人所用的小命令的首选方法。别名 非常局限于命令的种类和它们支持的 shell 功能,然而 shell 函数允许任何可以编写脚本的东西。 例如,如果我们喜欢 为我们的脚本开发的这个 report_disk_space shell 函数,我们可以为我们的 .bashrc 文件 创建一个相似的名为 ds 的函数:

ds () {  echo “Disk Space Utilization For $HOSTNAME”  df -h}









0 0
原创粉丝点击