函数复用是优质代码的一大特征,因此在大型的程序,会经常见到函数。
对于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
- #!/bin/bash
- name=$1
- ok() {
- if who | grep $name > /dev/null
- then
- echo "user $name is on"
- else
- echo "user $name is off"
- fi
- }
- ok
- echo
注意:对于$1该脚本的参数,
运行方式:
1> chmod u+x filename.sh
./filename.sh username
2> source filename.sh
4>函数的参数和返回值
参数:可以像使用命令一样向函数传递位置参数,位置参数是私有的,对位置参数的任何操作都不会影响函数的外部操作
局部变量local :使用local时,定义在函数的内部变量,内部变量在函数返回时消失,不会影响外部同名的变量
返回方式:如果没有指定return的参数,则return 返回的最后一条语句的执行状态
- #!/bin/bash
- var1=$1
- var2=$2
- add()
- {
- let "sum=$var1+$var2"
- return $sum
- }
- add
命令:source add.sh 1 2
echo $?
结果:3
阅读(456) | 评论(0) | 转发(0) |