Shell 脚本编程:函数
Shell 脚本编程:函数
将命令序列按格式写在一起
可重复使用命令序列
一、函数定义格式
格式一:
function 函数名 {命令序列
}
格式二:
函数名() {命令序列
}
二、函数返回值
-
使用
return
返回值(0-255),可通过$?
获取 -
0-255,超出时 除以256取余
示例:
#!/bin/bash
function cy {read -p "请输入一个整数: " nreturn $[n*2]
}
cy
echo "返回值: $?"
3. 函数传参与变量作用域
函数变量的作用范围(局部变量以及全局变量)
函数在shell脚本中仅在当前shell环境中有效
shell脚本中变量默认全局有效
将变量限定一个函数的内部local,即局部变量
示例:传参计算两数之和
#!/bin/bash
sum() {sum=$[ $1 + $2 ]echo $sum
}
sum $1 $2
示例:局部变量与全局变量
将变量限定在函数内部使用local命令
即这个local的变量仅仅在当前的函数内有效,在别的函数中无效
#!/bin/bash
abc() {echo "函数内未定义local的i: $i"let i++local ii=6echo "函数内local的i: $i"
}
i=9
abc
echo "函数外的i: $i"
四、递归函数
示例:计算阶乘
#!/bin/bash
function yy() {if [ $1 -eq 1 ]; thenecho 1elselocal temp=$[$1 - 1]local result=$(yy $temp)echo $[result * $1]fi
}
read -p "输入一个值: " value
result=$(yy $value)
echo "阶乘值为: $result"
五、函数库
将常用函数集中在一个脚本中,方便其他脚本调用
示例
编辑函数库脚本
#!/bin/bash
jia() {result=$[$1 + $2]echo "$result"
}jian() {result=$[$1 - $2]echo "$result"
}cheng() {result=$[$1 * $2]echo "$result"
}chu() {if [ $2 -ne 0 ]; thenresult=$[$1 / $2]echo "$result"elseecho "除法中分母不能为0"fi
}
编辑调用函数库脚本
#!/bin/bash
. /root/test5.shread -p "请输入第一个数字: " n
read -p "请输入第二个数字: " mresult1=$(jia $n $m)
result2=$(jian $n $m)
result3=$(cheng $n $m)
result4=$(chu $n $m)echo "两数之和为: $result1"
echo "两数之差为: $result2"
echo "两数之积为: $result3"
echo "两数之商为: $result4"