目录
一、函数
函数定义:封装的可重复利用的具有特定功能的代码
函数的作用:语句块定义成函数约等于别名,定义函数,再引用函数,封装的可重复利用的具有特定功能的代码
将命令序列按格式写在一起,可方便重复使用命令序列
1、函数的基本格式
格式1
function 函数名 {
命令序列
}
格式2
函数名() {
命令序列
}
2、函数的返回值
return表示退出函数并返回一个退出值,脚本中可以用 $ ? 变量显示该值
函数的使用原则:
1.函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
2.退出状态码必须是0~255,超出时值将为除以256取余
例1
return
#!/bin/bash
#在文件上方先定义函数,然后在主代码部分调用函数
function test1 {
read -p "请输入一个值: " value
return $[$value * 2]
}
test1 #调用函数
echo $? #输出返回值
超出255,取余
例2
#!/bin/bash
function test1 {
read -p "请输入一个整数:" num
echo $[num * 2]
#改为echo直接在函数中输出
}
test1
3、函数传参
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…即使用位置参数来实现参数传递
#!/bin/bash
sum() {
echo "请输入第一个参数:" $1
echo "请输入第二个参数:" $2
let n=$1+$2
echo $n
}
sum $1 $2
shell脚本内的参数 再传递给函数内参数
$1 $2 外部命令行输入的位置参数传递给shell脚本内的参数
22 33 在脚本中位置为$1 $2在函数中是依次读取
4、函数变量的作用范围
函数在Shell脚本中仅在当前Shell环境中有效
Shell脚本中变量默认全局有效
将变量限定在函数内部使用local命令
#!/bin/bash
aa () {
a=10
}
a=20
aa
echo $a
#!/bin/bash
aa () {
local a=10
}
a=20
aa
echo $a
5、函数的递归
函数调用自己本身的函数
实例演示
求任意数的阶乘
#!/bin/bash
fact () {
#判断传入的参数,如果是0,则直接输出1
if [ $1 -eq 0 -o $1 -eq 1 ]
then
echo 1
else
#如果传入的参数不是1,则函数调用函数自身,传入参数计算
echo $[$1* $(fact $[$1-1])]
fi
}
fact $1
6、函数库
创建函数库
#!/bin/bash
jiafa() {
echo $[$1 + $2]
}
chengfa() {
echo $[$1 * $2]
}
jianfa() {
echo $[$1 - $2]
}
chufa() {
if [ $2 -ne 0 ];then
echo $[$1 / $2]
else
echo "$2不能为0"
fi
}
调用函数
#!/bin/bash
. /root/hsk.sh
read -p "输入第一个参数值:" first
read -p "输入第二个参数值:" second
result1=`jiafa $first $second`
result3=$(chengfa $first $second)
result2=`jianfa $first $second`
result4=$(chufa $first $second)
echo $result1
echo $result2
echo $result3
echo $result4