传递参数
在bash shell 编程中, 向函数传递的参数仍然是位置参数的方式来传递的, 而不能传递数组等其他形式的变量, 这与C语言
或JAVA语言的函数传递是不同的.
#!/bin/bash
half()
{
let "n = $1"
let "n = n/2"
echo "In function half() n is $n"
}
#函数调用
let "m = $1"
echo "Before the function half() is called, m is $m"
half $m # 注意, 函数执行时, 不带()
echo "After the function half() is called, m is $m"
函数返回值
有时需要脚本执行完成后返回特定的值来完成脚本的后继操作, 在linux shell编程中, 函数是通过 return 返回其退出状态, 0表示无错误, 1表示有错误
在脚本中可以有选择的使用 return 语句.
看来, 返回值, 只是一个标记, 跟脚本返回值一样.
函数调用
首先, 函数之间可以调用, 后边的可以调用自己(递归调用)或前边的函数
比如有多个函数, 顺序执行函数
show_week
show_number
show_square
在函数内部调用其他函数
choice()
{
case $char in
s)
square;;
c)
cube;;
p)
power;;
*)
echo "What you input is wrong!";;
esac
}
局部变量和全局变量
首先, 局部变量定义, 另外, 局部变量可以和全局变量同名, 并且在函数内, 全局变量会被局部变量隐藏(跟C一样)
use_local_var()
{
local text="local variable"
}
另外, 如果你在函数外部定义了一个变量, 在函数内部没有使用 local 来声明跟外部同名的变量, 那么, 这两个变量实际上是一个地址,
如果你修改了这个变量在函数内部, 那么也会直接影响着函数外边的结果, 例如:
#!/bin/bash
count=1
echo "$count" # 结果是1
int_count()
{
count=2
echo "$count2" # 结果是2
}
echo "$count" # 结果是2, 注意这里, 外部变量的结果已经变了