shell函数

可以将函数看作是脚本中的一段代码,但是有一个主要区别。

执行函数时,它保留当前shelll和内存信息。

如果执行或调用一个脚本文件中的另一段代码,将创建一个单独的shell,因而去除所有原脚本中定义的存在变量。

函数可以放在同一个文件中作为一段代码,也可以放在只包含函数的单独文件中。

函数名()

{

命令...

}

或者

函数名(){

命令1...

}

如果愿意,可在函数名前加上关键字function

function 函数名()

{

命令...

}

所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。

 

例子:

#!/bin/sh

#filename:my.sh

 

hello()

{

    echo "this is function hello!"

}

 

echo "call function hello() ..."

hello

echo "call completed."

  

1.1.        传递参数和返回值

向函数参数的用法和shell脚本参数的用法一样。

函数内可以使用return返回值,如果不适用return返回或return后不带返回值,则返回值为最后一条shell命令的返回值。

#!/bin/sh

#filename:my.sh

 

hello()

{

    echo "param_count:$#"

    AAA="$1"

    BBB="$2"

    echo "AAA=$AAA"

    echo "BBB=$BBB"

    return 1

}

 

echo "call function hello() ..."

 

hello "aaa" "bbb"

if [ $? -eq 0 ] ; then

    echo "hello return 0"

else

    echo "hello return !0"

fi

 

if hello "111" "222" ; then

    echo "hello return 0"

else

    echo "hello return !0"

fi

 

echo "call completed."

 

输出:

$ ./my.sh

call function hello() ...

param_count:2

AAA=aaa

BBB=bbb

hello return !0

param_count:2

AAA=111

BBB=222

hello return !0

call completed.

 

1.2.        在shell中使用函数

当你收集一些经常使用的函数时,可以将之放入函数文件中并将文件载入s h e l l

文件头应包含语句#!/bin/sh,文件名可任意选取,但最好与相关任务有某种实际联系。

一旦文件载入shell,就可以在命令行或脚本中调用函数。可以使用set命令查看所有定义

的函数。输出列表包括已经载入shell的所有函数。

如果要改动函数,首先用unset命令从shell中删除函数,尽管unset删除了函数以便于此函数对于shell或脚本不可利用,但并不是真正的删除。

改动完毕后,再重新载入此文件。有些shell会识别改动,不必使用unset命令,但为了安全起见,改动函数时最好使用unset命令。

 

创建函数文件:

#!/bin/sh

#filename:myfun.sh

show()

{

    echo "show: $1"

}

 

add()

{

    echo "show: $1 + $2 = `expr $1 + $2`"

}

 

定位文件:

格式:

<> <空格> <斜线> <文件名>

 

$ . ./myfun.sh

 

检查载入函数:

$ set | grep "show ()"

$ set | grep "add ()"

 

执行shell函数:

要执行函数,简单地键入函数名即可。

$ show "abc"

show: abc

$ add 123 111

show: 123 + 111 = 234

 

删除shell函数:

$ unset show

$ show "abc"

程序“show”尚未安装。  您可以使用以下命令安装:

sudo apt-get install nmh

 

编辑shell函数:

#!/bin/sh

#filename:myfun.sh

show()

{

    echo "modify show..."

    echo "show: $1"

}

 

add()

{

    echo "show: $1 + $2 = `expr $1 + $2`"

}

 

重新载入并调用:

$ .  ./myfun.sh      载入shell前面的点与后面点之间有空格    (或  .   ./myfun.sh  &&  show abc      )

$ show "abc"

modify show...

show: abc

 

 

1.3.        函数调用

调用同一个脚本中定义函数前面已经介绍,只需要在调用前定义即可。

从函数文件中调用函数,这种方法不会创建另一个shell,所有函数均在当前shell下执行。

调用脚本在调用前需要载入函数文件。

函数文件:

#!/bin/sh

#filename:functions.sh

 

my_add()

{

    echo "my_add show: $1 + $2 = `expr $1 + $2`"

}

 

调用脚本:

#!/bin/sh

#filename:main.sh

 

定位函数文件

. ./functions.sh

 

#调用函数

echo "call my_add..."

my_add 10 20

echo "call completed."

 

 

 

执行结果:

$ ./main.sh

call my_add...

my_add show: 10 + 20 = 30

call completed.

 

定位文件不只针对于函数,也可以是包含组成配置文件的全局变量的脚步等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值