Chinaunix首页 | 论坛 | 博客
  • 博客访问: 978352
  • 博文数量: 184
  • 博客积分: 10030
  • 博客等级: 上将
  • 技术积分: 1532
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-27 18:32
文章分类

全部博文(184)

文章存档

2009年(1)

2008年(63)

2007年(39)

2006年(79)

2005年(2)

我的朋友

分类:

2006-01-07 09:18:13

在Shell里允许定义函数,你当然也可以把一个大的任务做成许多小脚本,然后在一个脚本里执行另一个脚本程序,但那样效率低,并且执行结果的回传也成问题,如果任务很分散,小脚本也会因过多而难于管理。
在Shell定义个函数很简单,写出他的名字,然后是一对空括号"()",再把有关的语句放在一对花括号"{}"里:
function_name () {
    statements;
}
 
例子:
#!/bin/sh
foo() {
    echo "Function foo is executing!"
}
echo "script starting"
foo
echo "script ended"
exit 0
注意:
Shell里的函数定义和Pascal的函数定义类似,必须先定义后使用. 再调用一个函数的时候,脚本程序的位置参数 "$*","$@","$#",$!","$2" 登会被替换为函数的参数. 这也是读取传递给函数的参数的办法. 函数执行完毕后,有关参数会被恢复. 但有写比较老的SHELL在函数执行后不能恢复位置参数的值,所以如果你想让自己的脚本具有可移植性,就不要依赖这个行为.
在shell里可以通过local关键字声明局部变量,局部变量将局限在函数的作用范围内.函数可以对全局作用范围中的其他shell变量进行存取. 如果某个局部变量和某个全局变量的名字相同,前者会覆盖后者,但也仅限于函数的作用范围以内.
#!/bin/sh
sample_txt="global varible"
foo() {
    local sample_txt="local varible"
    echo "Function foo is executing"
    echo $sample_txt
}
echo "script starting"
echo $sample_txt
exit 0
----------
函数输出如下:
script starting
Function foo is executing
local varible
global varible
 
如果在函数里没有使用return命令指定返回值,它返回的就是执行最后一条命令的退出状态码. 下面这个脚本程序,演示了函数的参数是如何被传递的一急如何让函数返回一个true或false的结果.
#!/bin/sh
#Define function
yes_or_no() {
  echo "Is you name $* ?"
  while true
  do
    echo "Enter yes or no:"
    read x
    case "$x" in
      y | yes ) return 0;;
      n | no ) return 1;;
      * ) echo "Answer yes or no"
    esac
  done
}
# Main program
if [ "$#" = "0" ] ; then
  echo "Usage: myname name"
else
  echo "Original parameters are $*"
  if yes_or_no "$s*"
  then echo "Hi $*,nice name"
  else
    echo "Never mind"
  fi
fi
exit 0
阅读(1407) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~