创建函数-----------(在函数中使用变量向函数传递参数在函数中处理变量关键字local)

Posted WEL测试

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建函数-----------(在函数中使用变量向函数传递参数在函数中处理变量关键字local)相关的知识,希望对你有一定的参考价值。

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 "Lets 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

第6章创建函数-----------(在函数中使用变量、向函数传递参数、在函数中处理变量、关键字local)_shell局部变量设置

         函数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"

第6章创建函数-----------(在函数中使用变量、向函数传递参数、在函数中处理变量、关键字local)_shell全局变量_02

         变量$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

第6章创建函数-----------(在函数中使用变量、向函数传递参数、在函数中处理变量、关键字local)_全局变量_03

         变量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

第6章创建函数-----------(在函数中使用变量、向函数传递参数、在函数中处理变量、关键字local)_shell全局变量_04


以上是关于创建函数-----------(在函数中使用变量向函数传递参数在函数中处理变量关键字local)的主要内容,如果未能解决你的问题,请参考以下文章

循环函数向变量添加不准确的值,并且在跟踪代码时未定义数组。怎么修?

从主函数向线程发送信号?

匿名函数,向量化和预分配,函数的函数,P码文件

JuMP目标函数中的矩阵向​​量积,其中矩阵是一个变量

C.dll 如何向 Python 公开变量?

C++中函数参数以及Lambda 函数与表达式