精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

    文章

    4753

    瀏覽量

    68369
  • 函數庫
    +關注

    關注

    1

    文章

    84

    瀏覽量

    32424

原文標題:如何在 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 ?336次閱讀
    利用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 ?740次閱讀
    子<b class='flag-5'>函數</b>多層<b class='flag-5'>調用</b>的主要注意事項分析

    CMSIS的DSP數字信號處理函數庫應用

    為了使用DSP數據,需要在IAR開發環境,對工程文件選項General的連接設置,選擇CMSIS DSP。在程序
    發表于 03-25 10:52 ?1317次閱讀
    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 ?691次閱讀

    在開源的hbird-e-sdk,怎么用軟件實現三角函數的計算,有沒有數學函數庫可以調用

    想請問在開源的hbird-e-sdk,怎么用軟件實現三角函數的計算,有沒有數學函數庫可以調用?類似于“math.h”
    發表于 01-10 07:06

    博途用戶自定義的使用

    博途官方提供了很多,比如:基本函數庫、通信、安全、驅動等等,用戶可以使用
    的頭像 發表于 12-25 10:08 ?880次閱讀
    博途用戶自定義<b class='flag-5'>庫</b>的使用

    浮點應用,你也有困惑嗎?

    今天小編想要給大家帶來的是最近在調試一個項目時候發現的怪事,同樣的函數庫在使用不同的IDE時,得到的運行結果竟然是不一致的。相信眼尖的讀者朋友已經從標題中猜出一二了,正是因為依賴了浮點計算
    的頭像 發表于 12-21 08:55 ?445次閱讀
    浮點<b class='flag-5'>庫</b>應用,你也有困惑嗎?