基本使用
-
创建函数
-
采用关键字function
funtion name{ #脚本中每一个函数都必须有唯一的名称 commands }
-
类似其他编程语言
name() { commands }
-
-
调用函数
#!/bin/bash # using a function in a script function func1 { echo "This is an example of a function" } count=1 while [ $count -le 5 ] do func1 count=$[ $count + 1 ] done echo "This is the end of the loop" func1 # 指定函数名即可调用函数 echo "Now this is the end of the script"
-
函数调用要在函数定义之后
-
函数名必须是唯一的
函数的返回值 成功状态码返回0
- 默认退出状态码:默认情况下,函数的退出状态码是函数中最后一条命令返回的退出状态码。在函数执行结束后,可以用标准变量
$?
来确定函数的退出状态码- 默认状态码并不安全
- return命令
状态码:$?
函数中的变量
function addem {
if [ $# -eq 0 ] || [ $# -gt 2 ] # 判断传递给函数的参数个数 -gt是大于为真
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 trying adding no numbers: "
value=$(addem)
echo $value
echo -n "Finally, try adding three numbers: "
value=$(addem 10 15 20)
echo $value
#输出:
Adding 10 and 15: 25
Let's try adding just one number: 20
Now trying adding no numbers: -1
Finally, try adding three numbers: -1
-
全局变量:默认情况下,你在脚本中定义的任何变量都是全局变量。在函数外定义的变量可在函数内正常访问,
#!/bin/bash function dbl { value=$[ $value * 2 ] } value=450 dbl echo "The new value is: $value" #输出 The new value is :900
但也会产生问题
-
局部变量:local 关键字保证了变量只局限在该函数中。如果脚本中在该函数之外有同样名字的变量,那么 shell 将会保持这两个变量的值是分离的
- local temp = $[ $value + 5 ]
函数中的文件包含
[root@pre-host-work02 opt]# cat test1.sh
#!/bin/bash
test(){
url='www.educoder.net'
}
[root@pre-host-work02 opt]# cat test2.sh
#!/bin/bash
hello(){
echo "i am from test3.sh"
}
[root@pre-host-work02 opt]# cat test3.sh
#!/bin/bash
##包含多个文件时,一行智能写一个文件,分开写。
. ./test1.sh ##包含test1.sh ./test1.sh表示当前目录下
. ./test2.sh ##包含test2.sh ./test2.sh表示当前目录下
echo "编程平台:$url"
hello
#结果如下:
[root@pre-host-work02 opt]# bash test3.sh
编程平台:
i am from test3.sh