Chinaunix首页 | 论坛 | 博客
  • 博客访问: 20495
  • 博文数量: 11
  • 博客积分: 50
  • 博客等级: 民兵
  • 技术积分: 70
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-22 09:38
文章分类
文章存档

2012年(11)

我的朋友
最近访客

分类:

2012-08-07 22:10:30

原文地址:shell function 作者:glinuxi

     函数复用是优质代码的一大特征,因此在大型的程序,会经常见到函数。
     对于shell语言来讲,执行函数并不独立创建子个进程,常用的做法,是将函数写入文件的其他文件中,当需要时将它载入脚本
   1> shell执行命令的顺序:
         交互shell在获得用户命令输入时,并不是直接就在PATH路径中查找,而是按照固定顺序依次寻找命令的位置。搜索的顺序为
  • 别名:即使用alias command="……"创建的命令
  • 关键字:如 if、for
  • 函数:function
  • 内置命令:如cd、pwd等命令
  • 外部命令:即脚本或可执行程序,这才在PATH路径中查找
2>函数的使用规则:
  • 函数必须先定义,后使用
  •  函数在当前环境下运行,共享它的脚本变量,并且,函数允许你以给位置参数赋值的方式向函数传递参数,函数体内部可以使用local创建局部变量
  • 如果函数使用exit将会退出脚本,如果想退回到原本调用函数的地方,则使用return
  • 函数的return 语句返回的是最后一条命令的退出状态
  • 使用内置命令export -f 可以将函数导入到子shell中
  • 如果函数保存在其他文件中,可以使用source和dot命令将它们装入当前脚本
  • 函数可以递归调用,并且没有调用限制
  • 使用declare -f 可以查看登录会话中的定义,使用more或者less进行查看,declare -F查看函数名
3>函数的定义:
                 function funname()  #这种情况下,空圆括号不是必须的
                 {
                         shell commands 
                 }
                 funname()
                 {
                         shell commands 
                 }
删除函数:unset -f   filename

例子:

  1. #!/bin/bash
  2. name=$1
  3. ok() {
  4.     if who | grep $name > /dev/null
  5.     then
  6.         echo "user $name is on"
  7.     else
  8.         echo "user $name is off"
  9.     fi
  10. }
  11. ok
  12. echo
注意:对于$1该脚本的参数,
运行方式:
              1>        chmod u+x filename.sh
                          ./filename.sh username
              2>       source filename.sh
4>函数的参数和返回值
 参数:可以像使用命令一样向函数传递位置参数,位置参数是私有的,对位置参数的任何操作都不会影响函数的外部操作
局部变量local :使用local时,定义在函数的内部变量,内部变量在函数返回时消失,不会影响外部同名的变量
返回方式:如果没有指定return的参数,则return 返回的最后一条语句的执行状态

例子:add.sh

  1. #!/bin/bash
  2.   var1=$1
  3.   var2=$2
  4.   add()
  5.   {
  6.        let "sum=$var1+$var2"
  7.        return $sum
  8.    }
  9.   add
命令:source add.sh 1 2
           echo $?
结果:3
 

阅读(456) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~