一、概述

函数其实就是一堆命令的合集,用来完成特定功能的代码块,你可以对它进行自定义命令,并且可以在脚本中任意位置使用这个函数,要使用定义的函数,只需要填写函数名称就可以了。

二、Shell函数定义

1.方法1

#!/bin/bash
#定义函数
function first {
echo "holle world"
}
########主体#######
#调用函数
first

Shell脚本—函数应用_传参

Shell脚本—函数应用_数据库_02

2.方法2

#!/bin/bash
#定义函数
second() {
echo "bye world"
}
########主体#######
#调用函数
second

Shell脚本—函数应用_Shell函数定义_03

Shell脚本—函数应用_数据库_04

三、函数返回值

return表示退出函数并返回一个退出值,脚本中可以使用$?变量表示该值。

使用原则:

  1. 函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码。
  2. 退出状态码要在0~255之间,超出时值将处以256取余。

1.示例一

#!/bin/bash
function a {
read -p "输入数值:" b
return $[$b * 2]
}
#######主体#######
a
echo $?

Shell脚本—函数应用_子目录_05

Shell脚本—函数应用_数据库_06

Shell脚本—函数应用_调用函数_07

2.示例二

#!/bin/bash
a() {
read -p "请输入:" b
b=$[ $b*2 ]
echo $b
}
########主体######
result=`a`
echo $result

Shell脚本—函数应用_数据库_08

Shell脚本—函数应用_调用函数_09

四、函数传参

传参就是传递参数。

1.示例1

#!/bin/bash
sum() {
a=$[$1 + $2]
echo $a
}
read -p "输入数值:" first
read -p "输入数值:" second
sum $first $second

Shell脚本—函数应用_调用函数_10

Shell脚本—函数应用_数据库_11

2.示例2

sum1() {
sum=$[$1 + $2]
echo $sum
}
result=$(sum1 $1 $2)
echo $result

Shell脚本—函数应用_子目录_12

Shell脚本—函数应用_Shell函数定义_13

推荐使用第二种,比较快速高效。

五、函数变量的作用范围

  1. 函数在Shell脚本中仅在当前Shell环境中有效。
  2. Shell脚本中变量默认全局有效。
  3. 将变量限定在函数内部使用local命令。

示例

#!/bin/bash
myfun() {
echo $i
local i
i=9
echo $i
}
i=1
myfun
echo $i

Shell脚本—函数应用_传参_14

Shell脚本—函数应用_数据库_15

六、递归

函数调用自己本身的函数

1.阶乘

#!/bin/bash
fact() {
if [ $1 -eq 1 ]
then
echo 1
else
local temp=$[$1 - 1]
local result=$(fact $temp)
echo $[$1 * $result]
fi
}
read -p "输入要阶乘的数值:" n
result=$(fact $n)
echo "$n 的阶乘结果:$result"

Shell脚本—函数应用_传参_16

Shell脚本—函数应用_调用函数_17

2.递归目录

#!/bin/bash
file() {
#遍历指定目录或子目录的所有文件
for f in $(ls $1)
do
if [ -d "$1/$f" ]
then
#如果是目录则输出目录
echo "目录:$2$f"
#递归调用函数判断子目录里的文件或者目录,并且输出时进行缩进
file "$1/$f" " $2"
else
#如果是子目录里的文件输出时进行缩进
echo "文件:$2$f"
fi
done
}
#递归查看指定目录
#第一个位置变量用于判断是目录或是文件,第二个位置变量用于给子目录或者子文件实现位移作用
file "/jiaobenHanShu" ""

Shell脚本—函数应用_传参_18

七、创建数据库

先建一个函数库的脚本

#!/bin/bash
jia() {
echo $[$1 + $2]
}
jian() {
echo $[$1 - $2]
}
cheng() {
echo $[$1 * $2]
}
chu() {
if [ $2 -ne 0 ]
then
echo $[$1 / $2]
else
echo "被除数不能为0"
fi
}

Shell脚本—函数应用_调用函数_19

在另一个脚本使用数据库脚本文件,直接调用函数

#!/bin/bash
v1=$1
v2=$2
res1=$(jia $v1 $v2)
res2=$(jian $v1 $v2)
res3=$(cheng $v1 $v2)
res4=$(chu $v1 $v2)
echo "加的结果:$res1"
echo "减的结果:$res2"
echo "乘的结果:$res3"
echo "除的结果:$res4"
~

Shell脚本—函数应用_Shell函数定义_20

Shell脚本—函数应用_子目录_21