闇の光

读书笔记 经验感受

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

Functions

我们可以在shell中定义函数。定义一个shell函数,结构如下:

function_name () {
   statements
}
示例:
#!/bin/sh

foo(){
    echo "Function foo is executing"
}

echo "script starting"
foo
echo "script ended"

exit 0
结果显示如下:
script starting
Function foo is executing
script ended

在shell脚本里面,我们必须在调用函数前定义好函数,除非你在调用前声明该函数。不过所有的脚本都是从头开始执行,因此基本上函数都定义在脚本的最前面。当函数被调用后,脚本的定位参数(如:$*,$@,$#,$1,$2等等)都将由函数的参数所替代。一旦函数结束,这些参数将恢复先前的数值。另外,我们可以通过使用return命令来返回一个数值,最通常的用法就是让函数返回一个字符串,并将之存到一个变量中,从而在函数结束之后使用。例如:

foo() {echo JAY;}
...
result="$(foo)"

除此之外,我们还可以通过local关键字来为shell函数定义本地变量,这个变量只在此函数的范围内有效。当此本地变量同其他的全局变量名字相同时,在该函数中,本地变量的值将覆盖全局变量的值。这点同其他编程语言一样。例子如下所示:

#!/bin/sh

sample_text="global variable"

foo(){
    local sample_text="local variable"
    echo "Function foo is executing"
    echo $sample_text
}

echo "script starting"
echo $sample_text
foo
echo "$script ended"
echo $sample_text

exit 0

下面是一个简单而全面的函数调用脚本(my_name)的例子:
#!/bin/sh

yes_or_no(){
   echo "Is your name $* ?"
   while true
   do
        echo -n "Enter yes or no:"
        read x
        case "$x" in
           y | yes ) return 0;;
           n | no )  return 1;;
           * )       echo "Answer yes or no"
        esac
   done
}

echo "Original parameters are $*"
if yes_or_no "$1"
then
   echo "Hi $1, nice name"
else
   echo "Nerver mind"
fi
exit 0
脚本运行情况如下:
$ ./my_name Ricky Neil
Original prarmeters are Ricky Neil
Is your name Ricky?
Enter yes or no: yes
Hi Ricky, nice name
$
posted on 2008-03-06 11:16  taizi  阅读(227)  评论(0编辑  收藏  举报