多个脚本杂乱怎么办?用库啊,全都进来

一、shell函数

将命令序列按格式写在一起,这样可以方便我们平时重复使用命令序列

1.1 定义

两种定义方法

第一种

function 函数名 {

中间是命令序列

}

在这里插入图片描述

第二种
此方法使用较多

函数名(){

中间是命令序列


}

在这里插入图片描述

二、函数返回值

2.1 return

表示退出函数后会返回一个退出值,在脚本里我们用 “ $? ” 变量显示这个值

演示
在这里插入图片描述

使用原则

  • 函数结束就取返回值,因为 “ $? ” 的变量只返回执行最后一条命令的退出状态码
  • 退出状态码必须是0~255,超出时值将会是除以256取余

测试

cc () {
  read -p "请输入一个数:" num
  return $[$num*5]
}

cc
echo $?							# 在echo前不能有多个命令,否则会导致脚本输出异常

在这里插入图片描述
66*5大于255,所以取余得出结果为74

2.2 echo

演示

cc1 () {
  read -p "请输入第二个数:" aa
  echo $[$aa*5]
}

cc11=$(cc1)							# 将变量cc1赋予一个新的变量名
echo $[$cc11 *2]					# echo再输出后再给新变量名命令

在这里插入图片描述
和return不同,echo直接输出这个变量数,并且在最后输出的时候还能再给其赋予其他命令

三、传参

3.1 在外部输入变量

cc () {
  sum=$[$1 + $2]			# 这里的1.2代表外部输入变量的第一位和第二位
  echo $sum
}

cc $1 $2

在这里插入图片描述

3.2 可控参数输入

cc () {
  sum=$[$1 + $2]					# 这里的1.2代表函数名调用的第一个和第二个
  echo $sum
}
read -p "输入第一个参数:" first		# 给函数变量名
read -p "输入第二个参数:" second
cc $first $second					# 这里输出的就是变量1和变量2,根据公式就是加法

可以自定义所需要输入的参数值
在这里插入图片描述

四、作用范围

函数变量的作用范围

函数在shell脚本中仅在当前的环境中有效
shell脚本中默认是全局有效的

cc () {
  a=5				# 设置变量a
  echo $a
}

a=10				# 在函数外设置
cc
echo $a

输出的结果依旧为函数内的a
在这里插入图片描述

我们可以使用 local 将a限定在这个函数内部,出了函数就会失效

cc () {
  local a				# 限定变量a
  a=5
  echo $a
}

a=10
cc
echo $a

在这里插入图片描述

六、递归

6.1 函数内的递归

函数调用自身的函数就是函数内的递归

6.2 阶乘递归

cc () {
  if [ $1 -eq 1 ]
  then
    echo 1
  else
  local temp=$[$1 - 1]			# local限制变量只在函数内部
  local result=$(cc $temp)
  echo $[$1 * $result]
  fi
}
read -p "请输入一个数:" a
result=$(cc $a)
echo $result

阶乘就是54321,每一次循环-1后和前面相乘
在这里插入图片描述

6.3 递归目录

function list_files {
for i in `ls $1`
do
  if [ -d "$1/$i" ]
  then
    echo "$2$i"
    list_files "$1/$i" "$2"
  else
    echo "$2$i"
  fi
done
}

list_files "/var/log" ""

在这里插入图片描述

七、创建函数库

作用
可以把多个函数文件放进函数库内,调用库就可以使用这个函数库

7.1 创建库

库内可以放置你需要的脚本命令

jiafa() {
  echo $[$1 + $2]
}

chengfa() {
  echo $[$1 * $2]
}

chufa() {
  if [ $2 -ne 0 ];then
    echo $[$1 / $2]
  else
    echo "$2不能为0"
  fi
}

7.2 使用

. hanshuku.sh					# 调用函数库

read -p "请输入第一个数" a
read -p "请输入第二个数" b

result1=`jiafa $a $b`
result2=`chengfa $a $b`
result3=`chufa $a $b`

echo "加法结果为:" $result1
echo "乘法结果为:" $result2
echo "除法结果为:" $result3

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值