shell函数
shell函数
shell函数的作用
- 使用函数可以避免代码重复
- 使用函数可以将大的工程分割为若干小的功能模块,代码的可读性更高
shell函数的定义:
方法一:
function 函数名 {
命令序列
}
方法二:
函数名 () {
命令序列
}
函数的返回值:
return表示退出函数并返回一个退出值,脚本中可以用$?变量显示该值
使用原则:
- 函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
- 退出状态码必须是0~255,超出时,值将为除以256取余
- 利用函数输出两个数之和:
- 两个数之差:
- 两个数之差(更换$1与$2的位置):
利用函数将十进制转换为二进制
使用函数输出菱形,并且实现可通过输入数值的大小来伸缩菱形的大小
函数变量的作用范围
函数在shell脚本中仅在当前shell环境中有效
shell脚本中变量默认全局有效
将变量限定在函数内部使用local命令
#!/bin/bash
myfun() {
echo $i
i=8
echo $i
}
i=9
myfun
echo $i
[root@localhost yy]#bash yy15.sh
9
8
8
#!/bin/bash
myfun() {
echo $i
local i=8 # 将变量限定在函数内部
echo $i
}
i=9
myfun
echo $i
[root@localhost yy]#bash yy15.sh
9
8
9
递归
- 函数调用自己本身的函数
阶乘
使用递归求阶乘
#!/bin/bash
fact () {
num=$1
if [ $num -eq 1 ];then #判断获取的变量值是否为1.若为1,直接输出结果1
echo 1
else
temp=$[num - 1]
local result=$(fact $temp)
echo $[num * result] # 5*$result (4*$result (3*$result (2*result(1) )))
fi
}
###### main #######
read -p "请输入一个正整数:" n
result=$(fact $n)
echo "$n阶乘的值为$result"
result=$(fact $temp) 过程:
n=5 fact 5
$1=5 temp=$1-1=4 result=$(fact 4)
$1=4 temp=3 result=$(fact 3)
$1=3 temp=2 result=$(fact 2)
$1=2 temp=1 result=$(fact 1)
$1=1
递归目录
例题:使用循环的方法把/var/log 目录下的文件和目录区分出来并输出
#!/bin/bash
list_dir() {
for dir in $(ls $1) #for循环遍历目标目录
do
if [ -d $dir ];then #判断是否为目录
echo "$dir 为目录:"
list_dir "$dir" " $2" #再次调用本函数遍历这个子目录。$2的使用是为了形成层级效果,没进行一次递归,输出前面就会多两个空格
else
echo "$dir 为文件"
fi
done
}
主代码调用函数
######## main ########
list_dir "/var/log" "" #由于函数中定义了位置变量$2,所以需要这个空的参数在这
创建函数库
本文含有隐藏内容,请 开通VIP 后查看