0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在函数库中调用指令?

Linux爱好者 来源:未知 作者:工程师郭婷 2018-08-31 15:51 次阅读

函数是一段可复用的代码。我们通常把重复的代码放进函数中并且在不同的地方去调用它。库是函数的集合。我们可以在库中定义经常使用的函数,这样其它脚本便可以不再重复代码而使用这些函数。

本文我们将讨论诸多关于函数的内容和一些使用技巧。为了方便演示,我将在 Ubuntu 系统上使用Bourne Again SHell (Bash)。

调用函数

在 Shell 中调用函数和调用其它命令是一模一样的。例如,如果你的函数名称为my_func,你可以在命令行中像下面这样执行它:

$ my_func

如果你的函数接收多个参数,那么可以像下面这样写(类似命令行参数的使用):

$ my_func arg1 arg2 arg3

定义函数

我们可以用下面的语法去定义一个函数:

functionfunction_name{

Body of function

}

函数的主体可以包含任何有效的命令、循环语句和其它函数或脚本。现在让我们创建一个简单的函数,它向屏幕上显示一些消息(注:直接在命令行里写)。

functionprint_msg{

echo"Hello, World"

}

现在,让我们执行这个函数:

$print_msg

Hello,World

不出所料,这个函数在屏幕上显示了一些消息。

在上面的例子中,我们直接在终端里创建了一个函数。这个函数也可以保存到文件中。如下面的例子所示。

#!/bin/bash

functionprint_msg{

echo"Hello, World"

}

print_msg

我们已经在 function.sh 文件中定义了这个函数。现在让我们执行这个脚本:

$chmod +xfunction.sh

$./function.sh

Hello,World

你可以看到,上面的输出和之前的是一模一样的。

更多函数用法

在上一小节中我们定义了一个非常简单的函数。然而在软件开发的过程中,我们需要更多高级的函数,它可以接收多个参数并且带有返回值。在这一小节中,我们将讨论这种函数。

向函数传递参数

我们可以像调用其它命令那样给函数提供参数。我们可以在函数里使用美元 $ 符号访问到这些参数。例如,$1 表示第一个参数,$2 代表第二个参数,以此类推。

让我们修改下之前的函数,让它以参数的形式接收信息。修改后的函数就像这样:

functionprint_msg{

echo"Hello $1"

}

在上面的函数中我们使用 $1 符号访问第一个参数。让我们执行这个函数:

$ print_msg "LinuxTechi"

执行完后,生成如下信息:

Hello LinuxTechi

从函数中返回数值

跟其它编程语言一样,Bash 提供了返回语句让我们可以向调用者返回一些数值。让我们举例说明:

functionfunc_return_value{

return10

}

上面的函数向调用者返回 10。让我们执行这个函数:

$func_return_value

$echo"Value returned by function is: $?"

当你执行完,将会产生如下的输出结果:

Value returned by function is: 10

提示:在 Bash 中使用 $? 去获取函数的返回值。

函数技巧

目前我们已经对 Bash 中的函数有了一些了解。现在让我们创建一些非常有用的 Bash 函数,它们可以让我们的生活变得更加轻松。

Logger

让我们创建一个 logger 函数,它可以输出带有日期和时间的 log 信息。

functionlog_msg{

echo"[`date '+ %F %T'` ]: $@"

}

执行这个函数:

$ log_msg "This is sample log message"

执行完,就会生成如下信息:

[ 2018-08-16 19:56:34 ]: This is sample log message

显示系统信息

让我们创建一个显示 GNU/Linux 信息的函数

执行完后会生成以下信息:

在当前目录下查找文件或者目录

下面的函数从当前目录下查找文件或者目录:

functionsearch{

find. -name$1

}

让我们使用下面的命令查找 dir4 这个目录:

$ search dir4

当你执行完命令后,将会产生如下输出:

./dir1/dir2/dir3/dir4

数字时钟

下面的函数在终端里创建了一个简单的数字时钟:

functiondigital_clock{

clear

while[1]

do

date +'%T'

sleep1

clear

done

}

函数库

库是函数的集合。将函数定义在文件里并在当前环境中导入那个文件,这样可以创建函数库。

假设我们已经在 utils.sh 中定义好了所有函数,接着在当前的环境下使用下面的命令导入函数:

$ source utils.sh

之后你就可以像调用其它 Bash 命令那样执行库中任何的函数了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4780

    浏览量

    68539
  • 函数库
    +关注

    关注

    1

    文章

    84

    浏览量

    32432

原文标题:如何在 Linux Shell 编程中定义和使用函数

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    HAL函数调用示例

    HAL(Hardware Abstraction Layer,硬件抽象层)是STM32等微控制器中常用的,它为开发者提供了访问和控制硬件设备的接口。以下是一些常用的HAL库函数及其调用
    的头像 发表于 12-02 14:01 328次阅读

    怎么在TMDSEVM6678: 6678自带的FFT接口和CUDA提供CUFFT函数库选择?

    请教一下gpgpu上包括4个Riscv cpu和一个DPU, 没有6678,要替换原来信号处理用的6678,该怎么在6678自带的FFT接口和CUDA提供CUFFT函数库选择?
    发表于 09-27 07:20

    利用vMeasure eMobilityAnalyzer函数库分析电机性能

    本文利用vMeasure eMobilityAnalyzer函数库的克拉克变换功能,将三相电机定子电流或电压转换为两相电流或电压,帮助工程师更有效地、可视化地分析电机的行为并对控制算法进行针对性的优化,从而提高电机的性能和效率。
    的头像 发表于 09-13 11:37 388次阅读
    利用vMeasure eMobilityAnalyzer<b class='flag-5'>函数库</b>分析电机性能

    静态定义的INIT_DEVICE_EXPORT函数并没有被系统调用,为什么?

    1,将一段代码编译成静态 2,主工程链接这个静态 3,静态库里的函数并没有被主工程调用 4,静态
    发表于 07-04 06:49

    ESP32如何使用的HF相关函数发送自定义AT指令

    请问如何使用的HF相关函数发送自定义AT指令
    发表于 06-17 07:43

    何在stvd添加被人的使其编译通过,正常调用

    现有文件为“sm8”格式,请问一下,如何在stvd添加被人的使其编译通过,正常调用????
    发表于 05-17 07:05

    使用STM32FEBKC6T6开发FOC,如何使用函数库

    本人使用STM32FEBKC6T6 开发FOC,但是,不知道如何使用她的函数库, 在ST Motor Control Workbench 4.0生成《stm32f30x_MC_it.c文件》里面
    发表于 05-15 08:22

    FreeRTOS如何在中断调用内存分配函数

    最近在玩FreeRTOS,遇到一个问题,就是不知如何在中断调用内存分配函数。pvPortMalloc函数中会
    发表于 05-08 08:25

    函数多层调用的主要注意事项分析

    应用方案设计,开发者经常会碰到某个子函数需要多次多级调用的情况。
    的头像 发表于 03-27 15:36 850次阅读
    子<b class='flag-5'>函数</b>多层<b class='flag-5'>调用</b>的主要注意事项分析

    CMSIS的DSP数字信号处理函数库应用

    为了使用DSP数据,需要在IAR开发环境,对工程文件选项General的连接设置,选择CMSIS DSP。在程序
    发表于 03-25 10:52 1436次阅读
    CMSIS的DSP数字信号处理<b class='flag-5'>函数库</b>应用

    STM32G HALHAL_init()代码,为什么SysTick_Config函数调用

    STM32G HALHAL_init()代码,为什么SysTick_Config函数调用
    发表于 03-12 07:46

    怎么在Hightec编译环境调用三角函数,是需要包含某些吗?

    怎么在Hightec编译环境调用三角函数,sin(),cos(),tan(),求教,是需要包含某些吗?
    发表于 02-18 08:44

    linux用gdb调试遇到函数调用怎么办?

    。 要顺利进行函数调用的调试,首先需要准备好代码和符号表。在编译代码时,需要加上 `-g` 参数来生成调试信息。这样编译器会在可执行文件嵌入符号表,以供GDB使用。如果没有生成符号表,我们将很难进行有意义的调试。 一旦准备完毕
    的头像 发表于 01-31 10:33 712次阅读

    在开源的hbird-e-sdk,怎么用软件实现三角函数的计算,有没有数学函数库可以调用

    想请问在开源的hbird-e-sdk,怎么用软件实现三角函数的计算,有没有数学函数库可以调用?类似于“math.h”
    发表于 01-10 07:06

    博途用户自定义的使用

    博途官方提供了很多,比如:基本函数库、通信、安全、驱动等等,用户可以使用
    的头像 发表于 12-25 10:08 918次阅读
    博途用户自定义<b class='flag-5'>库</b>的使用