shell之函数的应用

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

 

猜你喜欢

转载自blog.csdn.net/xys2333/article/details/85522161
今日推荐