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

男儿欲遂平生志,六经勤向窗前读。这篇文章主要讲述创建函数-----------(在函数中使用变量向函数传递参数在函数中处理变量关键字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=https://www.songbingjia.com/android/`addem 10 15`
echo $value

echo -n "Lets try add just one number:"
value=https://www.songbingjia.com/android/`addem 10`
echo $value

echo -n "Now trying adding no numbers:"
value=https://www.songbingjia.com/android/`addem abc`
echo $value

echo -n "Finally,try adding three numbers:"
value=https://www.songbingjia.com/android/`addem 10 15 20`
echo $value


                函数addem首先检查传递给它的参数数目。如果没有任何参数,或者参数数目超过两个,那么返回值为-1。如果只有一个参数,那么这个参数与自己相加作为结果。如果有两个参数,那么两个参数相加作为结果。由于函数为自己的参数值使用专用的参数环境变量,所以函数无法从脚本命令行直接访问脚本参数值。
6.3.2 在函数中处理变量
                变量作用域是shell脚本程序员遇到的常见问题。作用域是变量的可见区域。函数内定义的变量与普通变量有不同的作用域,前者能被脚本外部定义的变量所覆盖。
                函数使用两种类型的变量:全局变量、局部变量。
                1.全局变量
                全局变量是在shell脚本中处处有效的变量。同样,如果在函数内部定义了全局变量,那么脚本的主代码也可以获取该变量的值。默认情况下,脚本中定义的变量都是全局变量。在函数外部定义的变量,在函数内部仍能正常访问。        


#!/bin/bash
#使用全局变量传值

#定义一个函数
function db1
value=https://www.songbingjia.com/android/$[ $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=https://www.songbingjia.com/android/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=https://www.songbingjia.com/android/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

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



    推荐阅读