1.用函数编写脚本有什么好处呢?
可以在很大一方面简化程序。
2.函数的格式:
方法一:
函数名() {
H函数体
return n
}
方法二:
funcation 函数名(){
函数体
return n
}
3.函数的调用:
#!bin/bash
funcation fun1(){
echo "i like westos"
}
fun1 #调用函数
4.引用函数
每次引用函数时,bash回重新回到函数的定义
#!/bin/bash
function fun1() {
echo "I am a boy~"
}
count=1
while [ $count -le 5 ]
do
fun1
count=$[ $count + 1 ]
done
echo "End of loop"
fun1
echo "End of script"
5.函数不一定要在最开始定义,但是如果函数在定义前就使用,会报错
#!/bin/bash
count=1
echo "Before function definition"
function fun1() {
echo "fun1"
}
while [ $count -le 5 ]
do
fun1
count=$[ $count + 1 ]
done
echo "End of loop"
fun2
function fun2() {
echo "fun2"
}
升级脚本:
function fun1() {
echo $[ $1 * $2 ]
}
if [ $# -eq 2 ];then #如果他的个数为2
value=`fun1 $1 $2 `
echo "The result is $value"
else
echo "Usage:fun1 a b"
fi
6.函数名必须是唯一的,如果重新定义了函数,新的函数会覆盖旧的
#!/bin/bash
function fun1() {
echo "first fun1"
}
fun1
function fun1() {
echo "second fun1"
}
fun1
function fun1() {
echo "third fun1"
}
echo "End"
7.返回值
1)默认退出状态码:默认情况下,函数的退出状态码是函数中最后一条命令返回的退出状态码
脚本01:
#!/bin/bash
function fun1() {
echo "trying to display a non-existent file"
ls -l westosfile &> /dev/null
}
echo "test the function:"
fun1
echo "The exit status is : $?"
2)使用return命令
shell使用return命令来退出函数并返回特定的退出状态码
#!/bin/bash
function db1() {
read -p "Enter a value:" value
echo "doubling the value..."
return $[ $value * 2 ]
}
db1
echo "The new value is $?"
3)使用函数输出
将函数的输出保存在shell变量中
可以获得任何类型的函数输出
并将其保存到变量中
#!/bin/bash
function db1() {
read -p "Enter a value:" value
echo $[ $value * 2 ]
}
result=`db1`
echo "The new value is $result"
4)函数中使用变量
可以想函数中传递参数
函数名会再$0变量中定义,函数命令行上的任何参数都会
通过$1,$2定义
$#来判断传给函数的参数数目
脚本: fun_value.sh
没有参数 : 输出-1
一个参数: $1+$1
两个参数: $1+$2
#!bin/bash
a=$1
b=$2
c=$#
function wu(){
echo "-1"
}
function one(){
echo " $a + $a = $[ a+a ]"
}
function two(){
echo " $a + $b = $[a+b] "
}
function result(){
if [ "$c" == 0 ]; then
wu
elif [ "$c" == 1 ];then
one
elif [ "$c" == 2 ];then
two
else
echo "error"
fi
}
result
5)函数不能直接从命令行获取脚本的参数值
a=$1
b=$2
function fun1() {
echo $[ a * b ]
}
if [ $# -eq 2 ];then #如果他的个数为2
value=`fun1`
echo "The result is $value"
else
echo "Usage:fun1 a b"
fi
8.变量的作用域
1)全局变量:任何地方都生效的变量,默认
情况下,脚本主体内定义全局变量,函数内可以
用,函数外也可以用
#!bin/bash
funcation db1(){
value=$[ $value *2 ]
}
read -p "enter a value:" value
db1
echo "the new value is $value"
2)局部变量:
定义方法: local value
#!/bin/bash
function fun1() {
local temp=$[ $value + 5 ]
result=$[ $temp * 2 ]
}
temp=4
value=6
fun1
echo "The result is $result"
if [ $temp -gt $value ];then
echo "temp is larger"
else
echo "temp is smaller"
fi