RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在函數(shù)庫中調(diào)用指令?

Linux愛好者 ? 來源:未知 ? 作者:工程師郭婷 ? 2018-08-31 15:51 ? 次閱讀

函數(shù)是一段可復(fù)用的代碼。我們通常把重復(fù)的代碼放進(jìn)函數(shù)中并且在不同的地方去調(diào)用它。庫是函數(shù)的集合。我們可以在庫中定義經(jīng)常使用的函數(shù),這樣其它腳本便可以不再重復(fù)代碼而使用這些函數(shù)。

本文我們將討論諸多關(guān)于函數(shù)的內(nèi)容和一些使用技巧。為了方便演示,我將在 Ubuntu 系統(tǒng)上使用Bourne Again SHell (Bash)。

調(diào)用函數(shù)

在 Shell 中調(diào)用函數(shù)和調(diào)用其它命令是一模一樣的。例如,如果你的函數(shù)名稱為my_func,你可以在命令行中像下面這樣執(zhí)行它:

$ my_func

如果你的函數(shù)接收多個參數(shù),那么可以像下面這樣寫(類似命令行參數(shù)的使用):

$ my_func arg1 arg2 arg3

定義函數(shù)

我們可以用下面的語法去定義一個函數(shù):

functionfunction_name{

Body of function

}

函數(shù)的主體可以包含任何有效的命令、循環(huán)語句和其它函數(shù)或腳本。現(xiàn)在讓我們創(chuàng)建一個簡單的函數(shù),它向屏幕上顯示一些消息(注:直接在命令行里寫)。

functionprint_msg{

echo"Hello, World"

}

現(xiàn)在,讓我們執(zhí)行這個函數(shù):

$print_msg

Hello,World

不出所料,這個函數(shù)在屏幕上顯示了一些消息。

在上面的例子中,我們直接在終端里創(chuàng)建了一個函數(shù)。這個函數(shù)也可以保存到文件中。如下面的例子所示。

#!/bin/bash

functionprint_msg{

echo"Hello, World"

}

print_msg

我們已經(jīng)在 function.sh 文件中定義了這個函數(shù)?,F(xiàn)在讓我們執(zhí)行這個腳本:

$chmod +xfunction.sh

$./function.sh

Hello,World

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

更多函數(shù)用法

在上一小節(jié)中我們定義了一個非常簡單的函數(shù)。然而在軟件開發(fā)的過程中,我們需要更多高級的函數(shù),它可以接收多個參數(shù)并且?guī)в蟹祷刂怠T谶@一小節(jié)中,我們將討論這種函數(shù)。

向函數(shù)傳遞參數(shù)

我們可以像調(diào)用其它命令那樣給函數(shù)提供參數(shù)。我們可以在函數(shù)里使用美元 $ 符號訪問到這些參數(shù)。例如,$1 表示第一個參數(shù),$2 代表第二個參數(shù),以此類推。

讓我們修改下之前的函數(shù),讓它以參數(shù)的形式接收信息。修改后的函數(shù)就像這樣:

functionprint_msg{

echo"Hello $1"

}

在上面的函數(shù)中我們使用 $1 符號訪問第一個參數(shù)。讓我們執(zhí)行這個函數(shù):

$ print_msg "LinuxTechi"

執(zhí)行完后,生成如下信息:

Hello LinuxTechi

從函數(shù)中返回數(shù)值

跟其它編程語言一樣,Bash 提供了返回語句讓我們可以向調(diào)用者返回一些數(shù)值。讓我們舉例說明:

functionfunc_return_value{

return10

}

上面的函數(shù)向調(diào)用者返回 10。讓我們執(zhí)行這個函數(shù):

$func_return_value

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

當(dāng)你執(zhí)行完,將會產(chǎn)生如下的輸出結(jié)果:

Value returned by function is: 10

提示:在 Bash 中使用 $? 去獲取函數(shù)的返回值。

函數(shù)技巧

目前我們已經(jīng)對 Bash 中的函數(shù)有了一些了解?,F(xiàn)在讓我們創(chuàng)建一些非常有用的 Bash 函數(shù),它們可以讓我們的生活變得更加輕松。

Logger

讓我們創(chuàng)建一個 logger 函數(shù),它可以輸出帶有日期和時間的 log 信息。

functionlog_msg{

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

}

執(zhí)行這個函數(shù):

$ log_msg "This is sample log message"

執(zhí)行完,就會生成如下信息:

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

顯示系統(tǒng)信息

讓我們創(chuàng)建一個顯示 GNU/Linux 信息的函數(shù)

執(zhí)行完后會生成以下信息:

在當(dāng)前目錄下查找文件或者目錄

下面的函數(shù)從當(dāng)前目錄下查找文件或者目錄:

functionsearch{

find. -name$1

}

讓我們使用下面的命令查找 dir4 這個目錄:

$ search dir4

當(dāng)你執(zhí)行完命令后,將會產(chǎn)生如下輸出:

./dir1/dir2/dir3/dir4

數(shù)字時鐘

下面的函數(shù)在終端里創(chuàng)建了一個簡單的數(shù)字時鐘:

functiondigital_clock{

clear

while[1]

do

date +'%T'

sleep1

clear

done

}

函數(shù)庫

庫是函數(shù)的集合。將函數(shù)定義在文件里并在當(dāng)前環(huán)境中導(dǎo)入那個文件,這樣可以創(chuàng)建函數(shù)庫。

假設(shè)我們已經(jīng)在 utils.sh 中定義好了所有函數(shù),接著在當(dāng)前的環(huán)境下使用下面的命令導(dǎo)入函數(shù):

$ source utils.sh

之后你就可以像調(diào)用其它 Bash 命令那樣執(zhí)行庫中任何的函數(shù)了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4779

    瀏覽量

    68521
  • 函數(shù)庫
    +關(guān)注

    關(guān)注

    1

    文章

    84

    瀏覽量

    32429

原文標(biāo)題:如何在 Linux Shell 編程中定義和使用函數(shù)

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    HAL函數(shù)調(diào)用示例

    HAL(Hardware Abstraction Layer,硬件抽象層)是STM32等微控制器中常用的,它為開發(fā)者提供了訪問和控制硬件設(shè)備的接口。以下是一些常用的HAL庫函數(shù)及其調(diào)用
    的頭像 發(fā)表于 12-02 14:01 ?313次閱讀

    怎么在TMDSEVM6678: 6678自帶的FFT接口和CUDA提供CUFFT函數(shù)庫選擇?

    請教一下gpgpu上包括4個Riscv cpu和一個DPU, 沒有6678,要替換原來信號處理用的6678,該怎么在6678自帶的FFT接口和CUDA提供CUFFT函數(shù)庫選擇?
    發(fā)表于 09-27 07:20

    利用vMeasure eMobilityAnalyzer函數(shù)庫分析電機性能

    本文利用vMeasure eMobilityAnalyzer函數(shù)庫的克拉克變換功能,將三相電機定子電流或電壓轉(zhuǎn)換為兩相電流或電壓,幫助工程師更有效地、可視化地分析電機的行為并對控制算法進(jìn)行針對性的優(yōu)化,從而提高電機的性能和效率。
    的頭像 發(fā)表于 09-13 11:37 ?384次閱讀
    利用vMeasure eMobilityAnalyzer<b class='flag-5'>函數(shù)庫</b>分析電機性能

    靜態(tài)定義的INIT_DEVICE_EXPORT函數(shù)并沒有被系統(tǒng)調(diào)用,為什么?

    1,將一段代碼編譯成靜態(tài) 2,主工程鏈接這個靜態(tài) 3,靜態(tài)庫里的函數(shù)并沒有被主工程調(diào)用 4,靜態(tài)
    發(fā)表于 07-04 06:49

    ESP32如何使用的HF相關(guān)函數(shù)發(fā)送自定義AT指令?

    請問如何使用的HF相關(guān)函數(shù)發(fā)送自定義AT指令
    發(fā)表于 06-17 07:43

    何在stvd添加被人的使其編譯通過,正常調(diào)用?

    現(xiàn)有文件為“sm8”格式,請問一下,如何在stvd添加被人的使其編譯通過,正常調(diào)用????
    發(fā)表于 05-17 07:05

    使用STM32FEBKC6T6開發(fā)FOC,如何使用函數(shù)庫?

    本人使用STM32FEBKC6T6 開發(fā)FOC,但是,不知道如何使用她的函數(shù)庫, 在ST Motor Control Workbench 4.0生成《stm32f30x_MC_it.c文件》里面
    發(fā)表于 05-15 08:22

    FreeRTOS如何在中斷調(diào)用內(nèi)存分配函數(shù)

    最近在玩FreeRTOS,遇到一個問題,就是不知如何在中斷調(diào)用內(nèi)存分配函數(shù)。pvPortMalloc函數(shù)中會
    發(fā)表于 05-08 08:25

    函數(shù)多層調(diào)用的主要注意事項分析

    應(yīng)用方案設(shè)計,開發(fā)者經(jīng)常會碰到某個子函數(shù)需要多次多級調(diào)用的情況。
    的頭像 發(fā)表于 03-27 15:36 ?837次閱讀
    子<b class='flag-5'>函數(shù)</b>多層<b class='flag-5'>調(diào)用</b>的主要注意事項分析

    CMSIS的DSP數(shù)字信號處理函數(shù)庫應(yīng)用

    為了使用DSP數(shù)據(jù),需要在IAR開發(fā)環(huán)境,對工程文件選項General的連接設(shè)置,選擇CMSIS DSP。在程序
    發(fā)表于 03-25 10:52 ?1433次閱讀
    CMSIS的DSP數(shù)字信號處理<b class='flag-5'>函數(shù)庫</b>應(yīng)用

    STM32G HALHAL_init()代碼,為什么SysTick_Config函數(shù)調(diào)用?

    STM32G HALHAL_init()代碼,為什么SysTick_Config函數(shù)調(diào)用?
    發(fā)表于 03-12 07:46

    怎么在Hightec編譯環(huán)境調(diào)用三角函數(shù),是需要包含某些嗎?

    怎么在Hightec編譯環(huán)境調(diào)用三角函數(shù),sin(),cos(),tan(),求教,是需要包含某些嗎?
    發(fā)表于 02-18 08:44

    linux用gdb調(diào)試遇到函數(shù)調(diào)用怎么辦?

    。 要順利進(jìn)行函數(shù)調(diào)用的調(diào)試,首先需要準(zhǔn)備好代碼和符號表。在編譯代碼時,需要加上 `-g` 參數(shù)來生成調(diào)試信息。這樣編譯器會在可執(zhí)行文件嵌入符號表,以供GDB使用。如果沒有生成符號表,我們將很難進(jìn)行有意義的調(diào)試。 一旦準(zhǔn)備完畢
    的頭像 發(fā)表于 01-31 10:33 ?710次閱讀

    在開源的hbird-e-sdk,怎么用軟件實現(xiàn)三角函數(shù)的計算,有沒有數(shù)學(xué)函數(shù)庫可以調(diào)用?

    想請問在開源的hbird-e-sdk,怎么用軟件實現(xiàn)三角函數(shù)的計算,有沒有數(shù)學(xué)函數(shù)庫可以調(diào)用?類似于“math.h”
    發(fā)表于 01-10 07:06

    博途用戶自定義的使用

    博途官方提供了很多,比如:基本函數(shù)庫、通信、安全、驅(qū)動等等,用戶可以使用
    的頭像 發(fā)表于 12-25 10:08 ?913次閱讀
    博途用戶自定義<b class='flag-5'>庫</b>的使用
    RM新时代网站-首页