前言:
Shell编程是一种强大的脚本编程语言,它为我们提供了丰富的工具和功能,可以帮助我们自动化各种任务和处理各种数据。在Shell编程中,我们可以定义自己的函数,以便在脚本中多次使用相同的代码逻辑。自定义函数使得我们的代码更加模块化、可读性更高,并且提高了代码的复用性和可维护性。本文将介绍Shell编程中自定义函数的基本概念、语法和用法,帮助读者更好地理解和运用Shell编程中的函数。
基本语法
function_name(){
#函数体
[return int;]
}
调⽤直接写函数名:function_name [值]
- 案例⼀:定义⼀个函数:getSum,计算输⼊两个参数的和。
具体步骤:
1.执⾏touch funtest.sh;2.执⾏vim funtest.sh,编辑内容如下
#!/bin/bash
getSum(){
#$1和$2代表传⼊的参数
SUM=$[$1+$2]
echo "$1 plus $2 equal to $SUM"
}
需要注意的是:
上述代码中的$1和$2指的是调⽤getSum函数时传⼊的参数,⽽不是从命令⾏传⼊的参数。
3.可以通过下⾯的代码调⽤⾃定义函数:
#!/bin/bash
getSum(){
#$1和$2代表传⼊的参数
SUM=$[$1+$2]
echo "$1 plus $2 equal to $SUM"
}
getSum 1 2
- 如何给getSum函数传⼊动态的参数呢?
可以对代码做如下改动:
#!/bin/bash
getSum(){
#$1和$2代表传⼊的参数
SUM=$[$1+$2]
echo "$1 plus $2 equal to $SUM"
}
read -p "please enter a num n1: " n1
read -p "please enter a num n2: " n2
getSum $n1 $n2
- 如何接收getSum函数的返回值呢?
可以对代码做如下改动:
#!/bin/bash
getSum(){
#$1和$2代表传⼊的参数
SUM=$[$1+$2]
echo "$1 plus $2 equal to $SUM"
}
read -p "please enter a num n1: " n1
read -p "please enter a num n2: " n2
#把getSum函数的返回值赋值给result
result=`getSum $n1 $n2`
执⾏结果如下:
执⾏上述代码后,会发现并没有输出结果。这是因为,我们还未将result的值进⾏输出。再次修改代
码:
#!/bin/bash
getSum(){
#$1和$2代表传⼊的参数
SUM=$[$1+$2]
echo "$1 plus $2 equal to $SUM"
}
read -p "please enter a num n1: " n1
read -p "please enter a num n2: " n2
result=`getSum $n1 $n2`
echo "result value is: $result"
执⾏结果如下:
案例⼆:
具体要求如下:
1.定义⼀个函数getSum,计算输⼊两个参数的和;
2.定义⼀个函数getMultiply,计算输⼊两个参数的乘积;
3.在while循环中,接收⽤户输⼊的值:
(1).如果⽤户输⼊的值为:sum,则调⽤getSum。并输出getSum返回的值;
(2).如果⽤户输⼊的值为:mul,则调⽤getMultiply。并输出getMultiply返回的值;
(3).如果⽤户输⼊的值不是sum或者mul,则退出程序。
- 第⼀步,⾃定义getSum函数,计算输⼊两个参数的和。
代码如下:
#!/bin/bash
getSum(){
#$1和$2代表传⼊的参数
SUM=$[$1+$2]
echo $SUM
}
第二步,⾃定义getMultiply函数,计算输⼊两个参数的乘积。
代码如下
#!/bin/bash
getMultiply(){
MUL=$[$1*$2]
echo $MUL
}
第三步,在while循环中,接收⽤户输⼊的值,并调⽤getSum函数。
代码如下:
#!/bin/bash
getSum(){
# $1和$2代表传⼊的参数
SUM=$[$1+$2]
echo $SUM
}
getMultiply(){
MUL=$[$1*$2]
echo $MUL
}
while true
do
read -p "please enter your selection: " sel
if [ $sel == "sum" ];then
read -p "please enter a num n1: " n1
read -p "please enter a num n2: " n2
result=`getSum $n1 $n2`
echo result=$result
fi
done
执⾏结果如下:
第四步,在while循环中,接收⽤户输⼊的值,并调⽤getSum函数。
代码如下:
#!/bin/bash
getSum(){
#$1和$2代表传⼊的参数
SUM=$[$1+$2]
echo $SUM
}
getMultiply(){
MUL=$[$1*$2]
echo $MUL
}
while true
do
read -p "please enter your selection: " sel
if [ $sel == "sum" ];then
read -p "please enter a num n1: " n1
read -p "please enter a num n2: " n2
result=`getSum $n1 $n2`
echo result=$result
elif [ $sel == "mul" ];then
read -p "please enter a num n1: " n1
read -p "please enter a num n2: " n2
result=`getMultiply $n1 $n2`
echo result=$result
fi
第五步,在while循环中,接收⽤户输⼊的值,如果⽤户输⼊值不是sum或者mul,则退出程序。
代码如下:
#!/bin/bash
getSum(){
#$1和$2代表传⼊的参数
SUM=$[$1+$2]
echo $SUM
}
getMultiply(){
MUL=$[$1*$2]
echo $MUL
}
while true
do
read -p "please enter your selection: " sel
if [ $sel == "sum" ];then
read -p "please enter a num n1: " n1
read -p "please enter a num n2: " n2
result=`getSum $n1 $n2`
echo result=$result
elif [ $sel == "mul" ];then
read -p "please enter a num n1: " n1
read -p "please enter a num n2: " n2
result=`getMultiply $n1 $n2`
echo result=$result
else
echo "byebye"
exit
fi
done
优化代码
#!/bin/bash
getSum(){
#$1和$2代表传⼊的参数
SUM=$[$1+$2]
echo $SUM
}
getMultiply(){
MUL=$[$1*$2]
echo $MUL
}
#将调⽤getSum和getMultiply封装到⼀个函数中
getResult(){
read -p "please enter a num n1: " n1
read -p "please enter a num n2: " n2
if [ $1 == "sum" ];then
result=`getSum $n1 $n2`
echo $result
else
result=`getMultiply $n1 $n2`
echo $result
fi
}
while true
do
read -p "please enter your selection: " sel
if [[ $sel == "sum" || $sel == "mul" ]];then
result=`getResult $sel`
echo result=$result
else
echo "byebye"
exit
fi
done
结尾:
通过本文的介绍,我们了解了Shell编程中自定义函数的重要性和使用方法。自定义函数使得我们能够将代码逻辑封装成可重用的模块,提高了代码的可读性和可维护性。在实际的Shell脚本开发中,合理地运用自定义函数可以大大提高我们的开发效率,并且让我们的代码更加健壮和可扩展。希望本文对读者在Shell编程中使用自定义函数方面提供了一些帮助和指导,能够让你的Shell脚本更加优雅和高效。如果你对Shell编程感兴趣,不妨多加实践和探索,相信你会在Shell编程的世界中收获更多的技能和乐趣。