自学Linux Shell16.2-函数中使用变量

点击返回 自学Linux命令行与Shell脚本之路

16.2-函数中使用变量

1. 向函数传递参数

  • 函数可以使用标准参数环境变量来表示命令行传递给函数的参数。例如,
         函数名在变量$0中定义,函数命令行的其他参数使用变量$1和$2等定义。
         专用变量$#可以用来确定传递给函数的参数数目。
  • 在脚本中指定函数时,必须在函数所在命令行提供参数值。func1 $value1 10
  • 由于函数为自己的参数值使用专用的参数环境变量,所以函数无法从脚本命令行直接访问脚本参数值。

 以上含义:函数addem首先检查传递给它的参数数目。

  • 如果没有任何参数,或者参数数目超过两个,那么返回值为-1。
  • 如果只有一个参数,那么这个参数与自己相加作为结果。
  • 如果有两个参数,那么两个参数相加作为结果。

2. 在函数中处理变量

变量作用域是shell脚本程序员遇到的常见问题。作用域是变量的可见区域。函数内定义的变量与普通变量有不同的作用域,前者能被脚本外部定义的变量所覆盖。

函数使用两种类型的变量:  

  • 全局变量
  • 局部变量

2.1 全局变量

全局变量是在shell脚本中处处有效的变量。同样,如果在函数内部定义了全局变量,那么脚本的主代码也可以获取该变量的值。
默认情况下,脚本中定义的变量都是全局变量。在函数外部定义的变量,在函数内部仍能正常访问。

 变量temp已经在函数内部使用,而又在函数外部赋值,所以生成的结果会出人意料。全局变量保存最后一次运算结果的值。

2.2 局部变量

  • 函数内部使用的变量可以称为局部变量。这只需要在变量声明前加上关键字:local temp。
  • 也可以给局部变量赋值语句前加上local关键字:local temp=$[ $value +5 ]。
  • 关键字local确保变量仅在函数内部使用。如果脚本在函数外部有同名变量,那么shell将能区分开这两个变量。可以很容易地将函数变量与脚本变量区分开来,而只共享需要的变量。

 

......

posted on 2018-07-04 07:01  CARLOS_CHIANG  阅读(...)  评论(...编辑  收藏

导航