【Shell脚本】Shell编程之函数

目录

一.函数概述

1.作用

2.定义

2.1.格式1

2.2.格式2

二.函数返回值

1.使用原则

2.示例

2.1.

2.2.

三.函数传参

1.格式1

2.格式2

3.实操

四.函数变量的作用范围

五.递归函数

示例1:阶乘

示例2:递归目录

六.函数库

1.创建函数库

2.在脚本中加载函数库文件


一.函数概述

1.作用

  • 使用函数可以避免代码重复
  • 使用函数可以将大的工程分割为若干小的功能模块,代码的可读性更强

2.定义

2.1.格式1

function 函数名 {
	命令序列
}

2.2.格式2

函数名() {
	命令序列
}

二.函数返回值

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

1.使用原则

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

2.示例

2.1.

function db1 {
  read -p "请输入:" value
  return $[$value * 2]
}
db1
echo $?

2.2.

db1() {
  read -p "请输入:" value
  echo $[$value * 2]
}
result=`db1`
echo $result

三.函数传参

1.格式1

sum1() {
	sum=$[$1 + $2]
	echo $sum
}
read -p "输入第一个参数:" first
read -p "输入第二个参数:" second
sum1 $first $second

2.格式2


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

3.实操

题目:使用函数输出菱形,并实现可通过输入数值的大小来伸缩菱形的大小

#!/bin/bash
#题目:使用函数输出菱形,并实现可通过输入数值的大小来伸缩菱形的大小
#菱形
lingxing() {
num=$1
for ((a=1; a<=num; a++))
do
    for ((i=num; i>a; i--))
    do
        echo -n " "
    done
    c=$[(a*2)-1]
    for ((b=1; b<=c; b++))
    do
        echo -n "*"
    done
    echo ""
done


for ((a=num-1; a>=1; a--))
do
    #输出空格正三角
    for ((b=num; b>a; b--))
    do
        echo -n " "
    done

    #输出倒等腰三角
    c=$[(a*2)-1]
    for ((i=1; i<=c; i++))
    do
        echo -n "*"
    done
    echo ""
done
}

######### main #########
read -p "请输入大小数值:" NUM

lingxing $NUM

四.函数变量的作用范围

  1. 函数在Shell脚本中仅在当前Shell环境中有效
  2. Shell脚本中变量默认全局有效
  3. 将变量限定在函数内部使用local命令
myfun() {
local i
i=8
echo $i
}
i=9
myfun
echo $i

五.递归函数

  • 函数调用自己本身的函数

示例1:阶乘

fact() {
  if [ $1 -eq 1 ]
  then
    echo 1
  else
   local temp=$[$1 - 1]
   local result=$(fact $temp)
   echo $[$1 * $result]
		#  5 * $result(4*$result(3*$result(2*$result(1))))
  fi
}
read -p "请输入:" n
result=$(fact $n)
echo $result

示例2:递归目录

#!/bin/bash
#递归目录

dgdir() {
    for i in $(ls $1)
    do
        dir=$1
        if [ -d $dir/$i ];then
            echo -e "$2$i 为目录"
            dgdir $dir/$i "\t$2"
        else
            echo -e "$2$i 为文件"
        fi
    done
} 


######## main #########

read -p "请用绝对路径输入你要递归查看的目录名:" folder

dgdir $fold

六.函数库

  • 可以事先创建一个函数库,在里面定义各种常用的函数然后可以在别的shell脚本中直接引用

1.创建函数库

vim myfuncs.sh
jiafa() {
  echo $[$1 + $2]
}

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

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

2.在脚本中加载函数库文件

vim test.sh
. myfuncs.sh

value1=10
value2=5
result1=`jiafa $value1 $value2`
result2=`chengfa $value1 $value2`
result3=`chufa $value1 $value2`
echo "加法结果为:$result1"
echo "乘法结果为:$result2"
echo "除法结果为:$result3"

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值