在函数中使用变量
向函数传递参数
func1 $value1 10
然后函数可以用位置变量来获取参数值。来看一个使用此方法向函数传递参数的例子:
- $ cat test6
- #!/bin/bash
- # passing parameters to a function
- 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 adding just one number: "
- value=$(addem 10)
- echo $value
- echo -n "Now try adding no numbers: "
- value=$(addem)
- echo $value
- echo -n "Finally, try adding three numbers: "
- value=$(addem 10 15 20)
- echo $value
- $
- $ ./test6
- Adding 10 and 15: 25
- Let''s try adding just one number: 20
- Now try adding no numbers: -1
- Finally, try adding three numbers: -1
- $
text6 脚本中的 addem 函数首先会检查脚本传给它的参数数目。如果没有参数或者参数多于两个,那么 addem 会返回-1。
如果只有一个参数,那么 addem 会将参数与自身相加。如果有两个参数,则 addem 会将二者相加。
由于函数使用位置变量访问函数参数,因此无法直接获取脚本的命令行参数。下面的例子无
法成功运行:
- $ cat badtest1
- #!/bin/bash
- # trying to access script parameters inside a function
- function badfunc1 {
- echo $[ $1 * $2 ]
- }
- if [ $# -eq 2 ]
- then
- value=$(badfunc1)
- echo "The result is $value"
- else
- echo "Usage: badtest1 a b"
- fi
- $
运行脚本
- $ ./badtest1
- Usage: badtest1 a b
- $ ./badtest1 10 15
- ./badtest1: * : syntax error: operand expected (error token is "*
- ")
- The result is
- $
尽管函数使用了$1 变量和$2 变量,但它们和脚本主体中的$1 变量和$2 变量不是一回事。
要在函数中使用脚本的命令行参数,必须在调用函数时手动将其传入:
- $ cat test7
- #!/bin/bash
- # trying to access script parameters inside a function
- function func7 {
- echo $[ $1 * $2 ]
- }
- if [ $# -eq 2 ]
- then
- value=$(func7 $1 $2)
- echo "The result is $value"
- else
- echo "Usage: badtest1 a b"
- fi
- $
运行脚本
- $ ./test7
- Usage: badtest1 a b
- $ ./test7 10 15
- The result is 150
- $
在将$1 变量和$2 变量传给函数后,它们就能跟其他变量一样,可供函数使用了。