天天看点

shell脚本中的函数、返回值、传参、函数调用函数及递归、函数库一、shell函数

发际线拯救失败

  • 一、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 "$?"
           
shell脚本中的函数、返回值、传参、函数调用函数及递归、函数库一、shell函数
shell脚本中的函数、返回值、传参、函数调用函数及递归、函数库一、shell函数

echo来返回

下面用echo来返回时

shell脚本中的函数、返回值、传参、函数调用函数及递归、函数库一、shell函数
shell脚本中的函数、返回值、传参、函数调用函数及递归、函数库一、shell函数

3.函数传参

  • 函数变量的作用范围(局部变量以及全局变量)
  • 函数在shell脚本中仅在当前shell环境中有效
  • shell脚本中变量默认全局有效
  • 将变量限定一个函数的内部local,即局部变量

传参

[[email protected] opt]#vim demo22.sh

#!/bin/bash
#
 sum1 () {

sum=$[ $1 + $2 ]
echo $sum


}

sum1 $1 $2

           
shell脚本中的函数、返回值、传参、函数调用函数及递归、函数库一、shell函数
[[email protected] opt]#sh demo22.sh 20 30
50
           
shell脚本中的函数、返回值、传参、函数调用函数及递归、函数库一、shell函数

变量的局部与全局

将变量限定在函数内部使用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"

           
shell脚本中的函数、返回值、传参、函数调用函数及递归、函数库一、shell函数

执行结果:

shell脚本中的函数、返回值、传参、函数调用函数及递归、函数库一、shell函数

local的进击:

shell脚本中的函数、返回值、传参、函数调用函数及递归、函数库一、shell函数

4.递归(调用自己)

shell脚本中的函数、返回值、传参、函数调用函数及递归、函数库一、shell函数
shell脚本中的函数、返回值、传参、函数调用函数及递归、函数库一、shell函数
shell脚本中的函数、返回值、传参、函数调用函数及递归、函数库一、shell函数

第一次:总的值为 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
}
           
shell脚本中的函数、返回值、传参、函数调用函数及递归、函数库一、shell函数

这里时执行脚本,通过调用函数库,来完成运算。

#!/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" 

           
shell脚本中的函数、返回值、传参、函数调用函数及递归、函数库一、shell函数

执行结果:

shell脚本中的函数、返回值、传参、函数调用函数及递归、函数库一、shell函数