第6章创建函数-----------(在函数中使用变量、向函数传递参数、在函数中处理变量、关键字local)
2016-12-20 17:21
435 查看
6.3在函数中使用变量
在函数中使用变量,应当多注意如何定义和处理这些变量。6.3.1向函数传递参数
函数可以使用标准参数环境变量来表示命令行传递给函数的参数。例如,函数名在变量$0中定义,函数命令行的其他参数使用变量$1和$2等定义。专用变量$#可以用来确定传递给函数的参数数目。在脚本中指定函数时,必须在函数所在命令行提供参数值。该函数才可以使用参数环境变量获取参数值。操作实例如下所示:
#!/bin/bash #给函数传递参数 #对只有一个参数和两个参数的求和 function addem { if [ $# -eq 0 ] || [ $# -gt 2 ] then echo -1 elif [ $# -eq 1 ] then echo $[ $1 + $1 ] else echo $[ $1 + $2 ] fi } echo -n "Adding 10 and 15:" value=`addem 10 15` echo $value echo -n "Let's try add just one number:" value=`addem 10` echo $value echo -n "Now trying adding no numbers:" value=`addem abc` echo $value echo -n "Finally,try adding three numbers:" value=`addem 10 15 20` echo $value
函数addem首先检查传递给它的参数数目。如果没有任何参数,或者参数数目超过两个,那么返回值为-1。如果只有一个参数,那么这个参数与自己相加作为结果。如果有两个参数,那么两个参数相加作为结果。由于函数为自己的参数值使用专用的参数环境变量,所以函数无法从脚本命令行直接访问脚本参数值。
6.3.2 在函数中处理变量
变量作用域是shell脚本程序员遇到的常见问题。作用域是变量的可见区域。函数内定义的变量与普通变量有不同的作用域,前者能被脚本外部定义的变量所覆盖。函数使用两种类型的变量:全局变量、局部变量。
1.全局变量
全局变量是在shell脚本中处处有效的变量。同样,如果在函数内部定义了全局变量,那么脚本的主代码也可以获取该变量的值。默认情况下,脚本中定义的变量都是全局变量。在函数外部定义的变量,在函数内部仍能正常访问。
#!/bin/bash #使用全局变量传值 #定义一个函数 function db1 { value=$[ $value * 2 ] } #从键盘输入一个值,并把值赋给全局变量value read -p "Enter a value:" value #调用函数db1 db1 #输入计算后的结果 echo "The doubling value is :$value"
变量$value在函数外部定义,并在函数外部赋值。当调用函数db1时,这个变量及其数据在函数内部任然有效。该变量在函数内部赋值之后,它的新数据在引用该变量时仍然有效。这种做法存在一定的风险,尤其对多个shell脚本共用的函数。这种做法要求程序员确切清楚函数中使用了那些变量,包括那些用于计算值且不返回脚本的所有变量。操作实例如下:
#!/bin/bash #变量差的使用方法展示 #变量多重定义 function func1 { temp=$[ $value +5 ] result=$[ $temp *2 ] } #定义全局变量temp,value temp=4 value=6 echo "Before call func1 ,The temp:$temp" #调用函数 func1 echo "The result is $result" echo "After call func1 ,The temp:$temp" #两个变量比较大小 if [ $temp -gt $value ] then echo "temp is larger" else echo "temp is smaller" fi
变量temp已经在函数内部使用,而又在函数外部赋值,所以生成的结果会出人意料。全局变量保存最后一次运算结果的值。
2.局部变量
函数内部使用的变量可以称为局部变量。这只需要在变量声明前加上关键字:local temp。也可以给局部变量赋值语句前加上local关键字:local temp=$[ $value +5 ]。
关键字local确保变量仅在函数内部使用。如果脚本在函数外部有同名变量,那么shell将能区分开这两个变量。可以很容易地将函数变量与脚本变量区分开来,而只共享需要的变量。具体的操作实例如下:
#!/bin/bash #变量差的使用方法展示 #在函数内部定义局部变量 function func1 { local temp=$[ $value +5 ] result=$[ $temp *2 ] } #定义全局变量temp,value temp=4 value=6 echo "Before call func1 ,The temp:$temp" #调用函数 func1 echo "The result is $result" echo "After call func1 ,The temp:$temp" #两个变量比较大小 if [ $temp -gt $value ] then echo "temp is larger" else echo "temp is smaller" fi
相关文章推荐
- mysql数据库允许远程访问
- 提高读取文件的效率小试
- PL/SQL Developer-SQL语句大小写转换
- 调用 SMS界面
- 14.11 InnoDB and Online DDL
- 停止storm任务的两种方式
- ch11,p212,练习三
- SVN 撤回(回滚)提交的代码
- 多模块maven项目创建
- 数据结构---树
- Android调用手机系统自带录音功能实现语音录制与播放
- thinking in java学习笔记-第一章
- Git管理项目实例说明-记录和跟踪项目
- 再论如何选择GlusterFS版本?
- 自定义NSLog宏输出
- 数据结构(七)
- Classpath*加载和Classpath加载区别
- 自动装配Bean
- Hhadoop-2.7.0中HDFS写文件源码分析(二):客户端实现之DFSPacket
- 利用投影算法来计算系统矩阵左乘和右乘