Shell函数与模块化编程

10 篇文章 0 订阅





1、函数定义与调用


在Shell脚本中,我们可以定义函数来封装可复用的代码逻辑。函数的定义格式如下:

[ function ] function_name [()] {
    # commands
    # [return 0~255]
}

定义函数后,只需要使用函数名称就可以调用它:

function_name

例如,我们定义一个加法函数并调用它:

#!/bin/bash
# 定义函数
function add () {
   z=$[ $1+$2 ]
   echo $z
}
read -p "请输入x = " x
read -p "请输入y = " y
# 调用函数
sum=$(add $x $y)
echo "x + y = $sum"

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过$n的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数

另外,需要注意的是,return命令只能返回一个介于0~255之间的整数,而两个输入数字的和可能超过这个范围,因此需要使用echo输出

2、局部变量与全局变量


在Shell脚本中,我们可以定义全局变量和局部变量。全局变量在脚本的任何地方都可以访问,而局部变量只在定义它的函数内部可见

Shell局部变量使用local关键字来定义:

#!/bin/bash
# 定义函数
func () {
   # 局部变量
   local local_var="I'm local!"
   # 全局变量
   global_var="I'm global!"
}
# 调用函数
func
# 测试局部变量与全局变量
echo $local_var            # 输出为空
echo $global_var           # I'm global!

3、函数的返回值


Shell函数通过两种方式返回值:退出状态码和函数输出

  • 退出状态码:每个命令(包括函数)在结束时都会返回一个退出状态码,0表示成功,非0表示出错。可以使用return命令来设置函数的退出状态码,使用$?来获取上一个命令的退出状态码
  • 函数输出:函数中echoprintf命令的输出可以作为返回值。我们可以使用命令替换$(func [args])来获取这些输出

例如,我们定义一个函数来检查一个数是否为正数:

#!/bin/bash
# 定义函数
is_positive () {
   if [ $1 -gt 0 ]; then
      echo "yes"
      return 1
   else
      echo "no"
      return 0
   fi
}

# 调用函数并获取返回值
result=$(is_positive 5)
# 获取函数的退出状态码
status=$?

echo $result              # yes
echo $status              # 1

4、Shell模块化编程


在复杂的Shell脚本中,我们可以通过将代码分解为独立的模块(函数或脚本)来提高代码的可读性和可维护性

  • 将复用的代码逻辑封装为函数,如上述示例所示
  • 如果有多个脚本需要共享一些函数或变量,可以将这些函数或变量写在一个单独的脚本文件中,然后在其他脚本中通过source命令或.命令来引入这个文件

例如,我们有一个包含公共函数的脚本common.sh

#!/bin/bash
common_func () {
   echo "This is a common function."
}

在另一个脚本中,我们可以引入这个外部文件并使用它的函数:

#!/bin/bash
source common.sh
# . ./common.sh

# 调用common.sh中的函数
common_func               # This is a common function.

其中,source命令可以省略当前路径前的./



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值