Shell函数
2016-04-10 11:25
746 查看
1.函数定义
Shell函数有3中定义方式:第一种定义:
function func(){ do something... }
第二种定义,函数名与“{”之间必须有空格。
function func { do something... }
第三种定义:
func(){ do something... }
Shell函数有点儿类似于C语言的函数,由于Shell函数没有函数声明,所以函数定义必须放在函数使用之前。同时,函数名必须是唯一的,否则会有问题,如果你重新定义了函数,那么新定义的函数会覆盖原函数,而不会产生错误信息。代码如下:
#!/usr/bin/env bash function func1(){ name=func1 echo "This is function $name" } func1 # 函数名与“{”之间必须有空格 function func2 { name=func2 echo "This is function $name" } func2 func3(){ name=func3 echo "This is function $name" } func3
输出:
This is function func1 This is function func2 This is function func3
2.返回值
2.1默认退出状态码
默认情况下,函数的退出状态码是函数中最后一条命令返回的退出状态码。在函数执行结束后,你可以用标准的“$?”变量来读取退出状态码。这种默认情况有个弊端,就是退出状态码只能显示函数中最后一条命令的执行状态,而无法保证函数中其他命令的执行状态。下面的例子中,改变函数中命令的顺序,得到不同的退出状态码:
function func(){ ls -l test echo "test return status code" } func echo "return status code: $?" function func(){ echo "test return status code" ls -l test } func echo "return status code: $?"
2.2使用return命令指定退出状态码
在Shell脚本中,return命令不是返回函数的值,而是返回退出状态码。在使用return返回退出状态码时,需要注意:函数一结束就取退出状态码。如果在函数执行结束后,执行了其他命令,那么退出状态码可能会丢失。
退出状态码必须在0~255之间。
function func(){ read -p "Enter a value: " value return $[ $value * 2 ] } func echo "return status code: $?"
2.3函数返回值
如果要得到函数字符串、浮点数、整型等类型的返回值,那么首先需要用echo命令输出,然后将输出保存到变量里。获取返回值有两种方式:一是,将函数看作命令,用反引号“`”括起函数名;二是,用“$(函数名)”的形式。function func(){ name=func1 echo "This is function $name" } val1=`func` echo "The return value: $val1" val2=$(func) echo "The return value: $val2"
3.在函数使用变量
3.1向函数传递参数
函数可以使用标准的参数环境变量来代表命令行上传给函数的参数。例如,函数名在$0中定义,函数命令行上的任何参数在$1、$2等定义,特殊变量$#代表传给函数的参数数目。但是,函数的$#、$0、$1、$2等这些变量,和脚本主体参数的$#、$0、$1、$2等这些变量是完全不同的。注意,在脚本中给函数传参时,函数名和参数必须在同一行。function func(){ arg1=$1 val=4 echo $[ $out * $arg1 * $2 ] } out=3 val1=`func $out 5` echo "The return value: $val1" val2=$(func $out 5) echo "The return value: $val2"
3.2在函数中使用变量
在了解函数中使用变量之前,我们需要先知道全局变量和局部变量。全局变量:在Shell脚本的任何地方都有效的变量。默认情况下,在脚本中定义的任何变量都是全局变量。
局部变量:函数内部使用的任何变量都可以被声明为局部变量。声明局部变量时,在变量名前加上“local”关键字就行了;也可以在给变量赋值时,在变量名前加上“local”。
function func(){ local arg arg=$1 local temp=$[ $arg * 2 ] echo $temp } temp=3 val=`func 5` echo "The global temp: $temp" echo "The return value: $val"
4.数组变量和函数
如果对Shell数组不熟,可以先看Shell数组。4.1向函数传递数组参数
向脚本函数传递数组变量时,有些复杂。如果将数组变量当做单个参数传递的话,函数只会取数组变量的第一个值。要解决这个问题,你必须将该数组变量的值分解成单个值,然后将这些值作为函数参数使用。在函数内部,你可以将所有的参数重组到新的数组变量中。function func(){ #local newarr=$1 只会得到数组的第一个元素 local newarr=(`echo $@`) for i in ${!myarr[*]};do newarr[i]=$[ ${newarr[i]} * 2 ] done echo "The new array: ${newarr[*]}" } myarr=(1 2 3 4 5) echo "My array: ${myarr[*]}" func ${myarr[*]}
输出:
My array: 1 2 3 4 5 The new array: 2 4 6 8 10
4.2从函数返回数组
从函数里向Shell脚本传回数组变量,也用类似接收数组参数的方法。函数用echo语句来按正确顺序输出单个数组值,然后脚本再将它们重新放进一个新的数组变量中。function func(){ local newarr=(`echo $@`) for i in ${!myarr[*]};do newarr[i]=$[ ${newarr[i]} * 2 ] done echo ${newarr[*]} } myarr=(1 2 3 4 5) echo "My array: ${myarr[*]}" val=(`func ${myarr[*]}`) echo "The return array: ${val[*]}" echo "The 5th element in the return array: ${val[4]}"
输出:
My array: 1 2 3 4 5 The return array: 2 4 6 8 10 The 5th element in the return array: 10
相关文章推荐
- android wifi 无线调试
- 运维入门
- 动态清空 nohup 输出文件
- install scrapy with pip and easy_install
- Linux Shell常用技巧
- Shell 脚本编程陷阱
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- shell字符串操作详解
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua实现split函数
- Lua常用时间函数使用实例