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

    文章

    4719

    浏览量

    68209
  • 函数库
    +关注

    关注

    1

    文章

    84

    浏览量

    32414

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

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

收藏 人收藏

    评论

    相关推荐

    怎么在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 311次阅读
    利用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

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

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

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

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

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

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

    浮点应用,你也有困惑吗?

    今天小编想要给大家带来的是最近在调试一个项目时候发现的怪事,同样的函数库在使用不同的IDE时,得到的运行结果竟然是不一致的。相信眼尖的读者朋友已经从标题中猜出一二了,正是因为依赖了浮点计算
    的头像 发表于 12-21 08:55 420次阅读
    浮点<b class='flag-5'>库</b>应用,你也有困惑吗?

    何在AOSP12查看binder调用信息呢?

    部分APP不会使用常规的framework api调用系统的一些函数获取信息,但是如果他自己构建binder调用的信息获取,最后都会跑到这个函数中去。
    的头像 发表于 11-27 09:40 784次阅读

    python调用math函数的方法

    在Python编程,数学函数是非常重要的工具,我们可以使用它们进行各种数值计算、几何运算和统计分析等操作。Python的标准内置了很多数学函数
    的头像 发表于 11-22 11:01 2657次阅读

    如何查看及更改函数/函数块的调用环境

    模块化设计的思想是把一些相似的功能(比如电机控制、阀控制)设计成函数函数块,这样就可以反复调用。其优点是:使程序架构更加清晰,避免重复编写相似功能的代码。不过可能会产生一个疑惑:既然PLC的程序
    的头像 发表于 11-17 09:08 825次阅读
    如何查看及更改<b class='flag-5'>函数</b>/<b class='flag-5'>函数</b>块的<b class='flag-5'>调用</b>环境

    RA CLASS B认证函数库使用简介

    RA CLASS B认证函数库使用简介
    的头像 发表于 11-17 08:06 808次阅读
    RA CLASS B认证<b class='flag-5'>函数库</b>使用简介

    在单片机上实现动态加载功能的函数库介绍

    本项目是一个在单片机(如:STM32)上实现动态加载功能的函数库,与Windows的dll,Linux的so类似,可以将代码动态地从其他的存储介质,动态加载到RAM
    的头像 发表于 11-09 10:55 1415次阅读

    怎么封装函数库

    怎么封装函数库,只留一些回调函数和引脚定义,完整程序不让人看
    发表于 11-08 08:12