shell脚本中的函数

一、shell函数概述
1.函数的作用

函数是用来实现某些功能运算和完成各种特定操作的重要手段。

2.函数的优点

①允许标准组件式编程,提高了SQL语句的重用性、共享性和可移植性。
② 可以减少重复编写程序段的工作量,提高程序可读性。
③提高程序编译和运行效率,产生质量较高的目标代码,满足算法设计的“正确性、可读性、健壮性、效率与低存储量需求”的基本要求。
④能够实现较快的执行速度,能够减少网络流量

二、函数格式
函数格式一:
function 函数名 {
  命令序列
}

函数格式二:
函数名() {
  命令序列
}

调用函数格式一:直接调用
函数名

调用函数格式二:赋值再输出
result=`函数名`
echo "想要输出的结果"
三、函数返回值return
1.return概念及使用原则

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

使用原则:
(1)函数一结束就取返回值,因为 $?变量只返回执行的最后一条命令的退出状态码
(2)退出状态码必须是0~255,超出时值将为除以256取余
在这里插入图片描述

四、函数传参
1.函数传参概念

当某个函数定义好了以后,用户就可以通过函数名来调用该函数了。
(1)在定义方法时后面跟的参数就是形参,全称为"形式参数"
(2)在调用方法时后面跟的参数就是实参,全称为"实际参数"
在这里插入图片描述

五、函数变量作用范围

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

ak () {
local i         #设置局部变量
 i=8
 echo $i
}


i=9             #全局环境
ak
echo $i

#!/bin/bash
   abc () {
local i         #设置局部变量
 i=8
 echo $i
}


i=9             #全局环境
abc
echo $i
六、函数使用方法
1.递归阶乘
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
2.递归目录

方法一

function list_files () {
for f in 'ls $1' 
do
if [-d "$1/$f" ] ;then
    echo "$2$f"               #如果是目录就输出这个目录,$2为空格是用于区分父子目录
list_files "$1/$f" " $2"        

else
    echo "$2$f"               #不是目录则输出$f结果
fi

done
}

list_files "/var/log" ""

方法二

#!/bin/bash
OLDIFS=$IFS
IFS=$IFS:       #创建临时变量
for a in $PATH
do
 echo "$a:"
 f=`find $a -type f`
 for b in $f
 do
  if [ -x $b ]
  then
    echo $b可执行
  fi
 done
done

IFS=$OLDIFS 
七、创建库
建立库
vim functions.sh #不需要给权限

#!/bin/bash
jiafa() {
   echo $[$1 + $2]
}
jianfa() {
   echo $[$1 - $2]
}
chengfa() {
   echo $[$1 * $2]
}
chufa() {
if [ $2 -ne 0 ];then
   echo $[$1 / $2]
else
   echo "$2不能为0"
fi
}


使用库
vim suanfa.sh  #新建一个文件,直接调用函数库

. functions.sh

num1=10
num2=20

res1=`jiafa $num1 $num2`
res2=`jianfa $num1 $num2`
res3=`chengfa $num1 $num2`
res4=`chufa $num1 $num2`


echo "加法结果为:$res1"
echo "减法结果为:$res2"
echo "乘法结果为:$res3"
echo "除法结果为:$res4"

chmod +x suanfa.sh
./sunfa.sh
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值