Shell函数是在Shell脚本中定义的一段可重复使用的代码块,用于实现代码的模块化和提高代码的可读性。函数可以接收参数,执行一系列命令和操作,并返回结果。通过将常用的代码块封装为函数,可以避免重复编写相同的代码,提高代码的复用性和维护性。函数的定义包括函数名、参数列表和函数体,函数可以通过参数传递和返回值传递实现与调用脚本的交互。
shell函数的作用:
-
代码封装和模块化:通过将一段常用的代码封装为函数,可以提高代码的可读性和可维护性,避免重复编写相同的代码。
-
提高代码复用性:函数可以在不同的地方调用,从而实现代码的复用。可以将一段常用的逻辑抽象为函数,使得多个脚本可以共享同一个函数。
-
参数传递和结果返回:通过函数的参数列表,可以向函数传递输入参数,函数可以根据参数进行相应的操作。同时,函数可以通过return语句返回结果,或者通过全局变量将结果传递给调用函数。
-
提高脚本执行效率:通过将一些耗时的操作封装为函数,可以提高脚本的执行效率。函数可以被多次调用,从而避免了重复执行相同的操作。
-
代码组织和结构化:通过使用函数,可以将脚本的逻辑分成多个模块,使得代码更加结构化和可读。函数可以按照功能或者逻辑进行划分,提高代码的可维护性。
定义函数的格式
格式一:
function 函数名 {
命令操作
}
格式二:
函数名(){
命令操作
}
查看函数与删除函数(Linux命名行环境中)
- 查看函数 : declare -F
- 删除函数: unset 函数名
函数的返回值
return 返回值
1)"return"是用来结束函数并返回结果的关键字。可以将一个值作为函数的返回结果,该值可以是整数类型,范围在0-255之间。默认情况下,函数的返回结果为0。当使用"return"关键字并跟随一个数字时,该数字会成为函数的返回结果,可以通过"$?"变量获取函数的返回结果。
2)在使用"return"时,如果返回的结果超过了0-255的范围,将会被256取余,取余的结果作为函数的返回码。例如,如果return后面跟着的数值是260,则返回的结果将是4(260 % 256)。
函数的参数
函数中如何获取参数 $1 $2 .... $N
如何传递参数到函数中
语法: 函数名 参数1 参数2 ... 参数3
变量作用域
全局变量: 函数外声明的变量,函数内声明的变量默认为全局变量
局部变量:函数内部声明变量前加local 关键字
例如:local age=0
实战演练,使用函数写脚本
菱形打印
# 定义一个函数,接受一个参数n,打印一个由"*"构成的菱形
function print_diamond() {
local n=$1
# 打印上半部分菱形
for ((i=1; i<=n; i++)); do
for ((j=1; j<=n-i; j++)); do
echo -n " "
done
for ((j=1; j<=2*i-1; j++)); do
echo -n "*"
done
echo
done
# 打印下半部分菱形
for ((i=n-1; i>=1; i--)); do
for ((j=1; j<=n-i; j++)); do
echo -n " "
done
for ((j=1; j<=2*i-1; j++)); do
echo -n "*"
done
echo
done
}
# 调用函数,传入参数4,打印菱形
print_diamond 4
递归函数进行阶乘运算
#!/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 $result
结果