发际线拯救失败
- 一、shell函数
-
- 1.shell函数定义格式:
- 2.函数返回值
-
- return
- echo来返回
- 3.函数传参
-
- 传参
- 变量的局部与全局
- local的进击:
- 4.递归(调用自己)
- 5.函数库
一、shell函数
将命令序列按格式写在一起
可重复使用命令序列
1.shell函数定义格式:
1.
function 函数名{
命令序列
}
2.
函数名(){
命令序列
}
2.函数返回值
return
return 表示退出函数并返回一个退出值,脚本中可以用$?变量显示该值(0-255)
原则:
1.函数已结束就取返回值,因为 $? 只是对最后一条命令进行判断
2.0-255,超出时 除以256取余
echo也能直接返回
实验代码
[[email protected] opt]#vim aaa.sh
#!/bin/bash
#测试
function hs {
read -p "请输入任一个值" v
return $[$v*2]
}
hs
echo "$?"
echo来返回
下面用echo来返回时
3.函数传参
- 函数变量的作用范围(局部变量以及全局变量)
- 函数在shell脚本中仅在当前shell环境中有效
- shell脚本中变量默认全局有效
- 将变量限定一个函数的内部local,即局部变量
传参
[[email protected] opt]#vim demo22.sh
#!/bin/bash
#
sum1 () {
sum=$[ $1 + $2 ]
echo $sum
}
sum1 $1 $2
[[email protected] opt]#sh demo22.sh 20 30
50
变量的局部与全局
将变量限定在函数内部使用local命令
即这个local的变量仅仅在当前的函数内有效,在别的函数中无效。
[[email protected] opt]#vim demo23.sh
#!/bin/bash
abc () {
echo "函数内的未经过local的$i"
local i
i=6
echo "函数内的是$i"
}
i=9
abc
echo "函数外面的$i"
执行结果:
local的进击:
4.递归(调用自己)
第一次:总的值为 jc 2 的值乘3
此时输入的值由原来的3变成2了,再一次重复上面的步骤
第二次:总的值为 jc 1的值乘2乘3了
即123
5.函数库
就是把一般脚本的主体执行代码和定义函数部分相互分离,把定义的函数部分集中放在同一个脚本中。具体执行的时候,只需要直接进行调用函数集合的脚本文件即可。有点类似于java中的面向对象编程的既视感。
这里我把加减乘除共4个函数,做了一个函数库。
#!/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 ]
then
result=$[ $1 / $2 ]
echo "$result"
else
echo"除法所输入不能为0"
fi
}
这里时执行脚本,通过调用函数库,来完成运算。
#!/bin/bash
. /opt/ku.sh
#加减乘除
read -p "请输入第一个数字" f
read -p "请输入第二个数字" s
result1=`jia $f $s`
result2=`jian $f $s`
result3=`cheng $f $s`
result4=`chu $f $s`
echo "第一个数字与第二个数字的和为:$result1"
echo "第一个数字与第二个数字的差为:$result2"
echo "第一个数字与第二个数字的积为:$result3"
echo "第一个数字与第二个数字的商为:$result4"
执行结果: