shell脚本中的函数

函数的定义

变量是被我们赋予一个值来使用,函数就像一个快捷键一样,当我们定义函数后,只要引用其对应的函数名,就可以使用我们设置好的功能

函数的创建和使用

代码如下:

#!/bin/bash
function functionname(){
           ##function可以不写,functionname
							是这个函数的名字,使用时就是引用这个名字
	echo "haha"
	echo "heihei"
	echo "hello"
}
##函数定义格式 function functionname(){
     },花括号里输入我们需要的命令
##小括号里不需要写东西

functionname               ##调用函数,注意调用函数一定要在函数定义
							后才可以

试着去执行这个脚本

[root@haha ~]# sh test.sh 
haha
heihei
hello

我们可以看到,多条命令通过调用函数名,就达到了想要的效果

函数的返回值

默认情况下,函数的退出状态是函数的最后一条命令返回的退出状态

#!/bin/bash
function functionname(){
          
	echo "haha"
	echo "heihei"
	echo "hello"
	ls -l inexistent.txt                ##查看一个不存在的文件
}
functionname
echo "function's status:$?"

执行这个脚本

[root@haha ~]# sh test.sh 
haha
heihei
hello
ls: cannot access inexistent.txt: No such file or directory
function's status:2

我们可以看到函数执行成功三条命令,最后一条命令报错,状态值非0
调换函数中命令的位置

#!/bin/bash
function functionname(){
          
	ls -l inexistent.txt          
	echo "haha"
	echo "heihei"
	echo "hello"
}
functionname
echo "function's status:$?"

再去执行脚本

[root@haha ~]# sh test.sh 
ls: cannot access inexistent.txt: No such file or directory
haha
heihei
hello
function's status:0

调换位置后,状态值为0,所以说默认情况下,函数的退出状态是函数的最后一条命令返回的退出状态

return命令

return 是 Shell 关键字,专门用在函数中返回一个值

#!/bin/bash
function functionname(){
          
   echo "haha"
   echo "heihei"
   echo "hello"
   return    111         ##试着用下return
   ls -l inexistent.txt      
}
functionname
echo "function's status:$?"
[root@haha ~]# sh test.sh 
haha
heihei
hello
function's status:111

验证return后,不难看出return不仅返回了一个退出值给调用函数的程序,还退出了函数执行,ls的错误信息没有显示,就说明它没有被执行

将函数赋值给变量使用

#!/bin/bash
functionname(){
     
	read -p "input a value:" VAR
	echo $[$VAR * 5]
}
NUM=$(functionname)           ##将函数赋值给变量
echo "current num is $NUM"      ##打印这个变量
[root@haha ~]# sh test.sh 
input a value:3
current num is 15

向函数传递参数

第一种情况:在脚本内部传参

#!/bin/bash
functionname() {
     
    if [ $# -eq 0 ] || [ $# -gt 2 ]
    then
        echo "错误,需要一个或者两个位置参数"
    elif [ $# -eq 1 ]
    then
        echo $[ $1 + $1 ]
    else
        echo $[ $1 + $2 ]
    fi
}


echo -n "用两个参数的结果是:"
value=`functionname 100 200`     ##在脚本中用类似输入位置变量的形式
													对函数functionname传递参数
echo $value

echo -n "用一个参数的结果是: "
value=`functionname 100`
echo $value

echo -n "没有参数的结果是:"
value=`functionname`
echo $value

echo -n "用三个参数的结果是:"
value=`functionname 100 200 300`
echo $value
[root@haha ~]# sh test.sh 
用两个参数的结果是:300
用一个参数的结果是: 200
没有参数的结果是:错误,需要一个或者两个位置参数
用三个参数的结果是:错误,需要一个或者两个位置参数

第二种情况:以位置变量的形式手动传参

#!/bin/bash
functionname(){
     
	echo $[ $1 * $2 ]     ##这里的$1,$2引用脚本中的位置参数
     echo $3
}

if [ $# -eq 2 ]
then
	value=`functionname $1 $2 haha`    ##这里的$1$2引用外面的位置
	                                   参数 ,haha传给函数中的$3
	echo "The result is $value"
else
	echo "Usage:$0 a b"
fi
[root@haha ~]# sh test.sh 
Usage:test.sh a b
[root@haha ~]# sh test.sh 3 
Usage:test.sh a b

[root@haha ~]# sh test.sh 3 6
The result is 18
haha

总结

函数的引用,可以使我们在复杂的脚本中以简洁、美观的语言,达到我们需要的脚本效果

你可能感兴趣的:(脚本,shell)