那曲檬骨新材料有限公司

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

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

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

剖析Linux shell 函數(shù)實現(xiàn)

jf_78858299 ? 來源:大川搬磚 ? 作者:sdc123 ? 2023-05-12 10:27 ? 次閱讀

1. 概述

作為一個嵌入式 Linux 工程師,肯定需要編寫 shell 腳本進行一些自動化工作。剛好,我最近就有類似需求——一鍵交叉編譯 DDS。本著“編寫漂亮代碼的原則”,我用到了 shell 函數(shù)

2. shell 函數(shù)簡介

基本語法:

[function] function_name [()]
{
    do something
    [return int;]
}

[function] :雖然這個關(guān)鍵字可以省略不寫,我還是建議寫上,方便閱讀;

function_name :函數(shù)名稱;

do something :函數(shù)體,實現(xiàn)函數(shù)的具體功能;

[return int] :函數(shù)返回值,return 是關(guān)鍵字,int 為具體數(shù)值(0,1,2,…)。這個關(guān)鍵字也可以省略不寫,這樣函數(shù)將以最后一條命令運行的結(jié)果作為返回值。

:帶方括號的關(guān)鍵字可以省略。

3. 使用方法

  1. 因為腳本是從上到下順序執(zhí)行,所以,函數(shù) 必須****先定義后使用
  2. 調(diào)用函數(shù)時只需函數(shù)名即可,不需要小括號。
#!/bin/sh

test_fun

function test_fun()
{
    echo "shell function test!"
}

test_fun

執(zhí)行結(jié)果:

圖片

4. 函數(shù)參數(shù)

定義函數(shù)后,在調(diào)用函數(shù)時可以向函數(shù)傳入參數(shù)。和編程語言不同的是,shell 中定義函數(shù)時 無需聲明參數(shù) ,即帶參數(shù)的函數(shù)定義還是原始的格式:

[function] function_name [()]
{
    do something
    [return int;]
}

向函數(shù)傳入?yún)?shù)時只需在調(diào)用的位置直接輸入?yún)?shù)即可,中間用空格隔開

function_name arg1 arg2 arg3 ...

4.1 參數(shù)訪問

在函數(shù)內(nèi)部訪問參數(shù)時使用 的形式,n 為 1,2,3,4 …

#!/bin/sh

function test_fun()
{
    echo "arg1:${1}"
    echo "arg2:${2}"
    echo "arg3:${3}"
    echo "arg4:${4}"
    echo "arg num:$#"
    echo "\\${0}:${0}"
}

#調(diào)用函數(shù)
test_fun "apple" "pear" "banana" "orange"

圖片

${0} :代表的是腳本的名稱,和 C 語言 main 函數(shù)中的 argv[0] 意義相同。

$# :存儲的是參數(shù)的個數(shù)。

***** 和 @ 都表示傳遞給函數(shù)的所有參數(shù)的集合。沒有被雙引號包圍時,這兩個的值相同。如果被雙引號包圍,那么意義就不同了:

"$*" 表示將所有的參數(shù)合并到一起, 成為一個參數(shù)

"$@" 表示所有的參數(shù)仍然是分離的。

通過 for 循環(huán)就能看出區(qū)別:

#!/bin/sh


function test_fun()
{
    echo "item in \\$*"

    for var in "$*"
    do
        echo "$var"
    done

    echo "item in \\$@"
    for var in "$@"
    do
        echo "$var"
    done
}

圖片

5. shift

你可能會遇到這樣的場景——在函數(shù)中,你只想 使用后面的幾個參數(shù),忽略前面的參數(shù)

這個時候就可以使用 shift 關(guān)鍵字了。

shift n 將全部參數(shù) 向左移動 n 個位置 ,后面的參數(shù)移動到前面參數(shù)的位置,前面的參數(shù)被丟棄。比如 shift 2 指令的最終結(jié)果是把原來的 **{3} 移動到 {1} 的位置,{4}移動到 **{2} 的位置 …

#!/bin/sh

function test_fun()
{

    echo "\\${1}:${1}"
    echo "\\${2}:${2}"
    echo "\\${3}:${3}"
    echo "\\${4}:${4}"

    shift 1

    echo "after shift 1:"

    echo "\\${1}:${1}"
    echo "\\${2}:${2}"
    echo "\\${3}:${3}"
}

test_fun "apple" "pear" "banana" "orange"

圖片

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

    關(guān)注

    5092

    文章

    19177

    瀏覽量

    307689
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11345

    瀏覽量

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

    關(guān)注

    3

    文章

    4346

    瀏覽量

    62973
  • Shell
    +關(guān)注

    關(guān)注

    1

    文章

    366

    瀏覽量

    23447
收藏 人收藏

    評論

    相關(guān)推薦

    shell是什么?shell實現(xiàn)原理分析基于MM32 MCU的shell腳本源碼

    在前兩節(jié)中,我們講解了如何在MM32 MCU上使用shell來輔助開發(fā),分別介紹的是通過串口方式和J-Link RTT方式的shell,本次課程我們分析源碼來講解shell實現(xiàn)原理。
    發(fā)表于 12-02 15:58 ?2530次閱讀

    Linux Shell腳本入門到實戰(zhàn)詳解

    Linux Shell腳本入門到實戰(zhàn)詳解
    發(fā)表于 02-17 15:03 ?662次閱讀

    Linux shell腳本分享

    今天浩道跟大家分享幾個Linux運維中常用到的shell腳本!
    發(fā)表于 07-18 09:53 ?581次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>shell</b>腳本分享

    Linux shell函數(shù)簡介和使用方法

    作為一個嵌入式 Linux 工程師,肯定需要編寫 shell 腳本進行一些自動化工作。剛好,我最近就有類似需求——一鍵交叉編譯 DDS。本著“編寫漂亮代碼的原則”,我用到了 shell 函數(shù)
    發(fā)表于 08-25 16:21 ?1208次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>shell</b><b class='flag-5'>函數(shù)</b>簡介和使用方法

    Linux Shell系列教程之(十五) Shell函數(shù)簡介

    知識先為大家介紹到這里,Shell中的函數(shù)非常強大,在此不再展開講,希望大家能夠自己多多練習,熟練掌握。linux學習交流群:690327559
    發(fā)表于 09-07 16:46

    linux shell命令/unix shell命令教程

    linux shell命令/unix shell命令教程:為了防止未授權(quán)用戶訪問你的文件,可以在文件和目錄上設(shè)置權(quán)限位。還可以設(shè)定文件在創(chuàng)建時所具有的缺省權(quán)限:這些只是整個系統(tǒng)安全問題中
    發(fā)表于 12-06 13:08 ?61次下載
    <b class='flag-5'>linux</b> <b class='flag-5'>shell</b>命令/unix <b class='flag-5'>shell</b>命令教程

    Linux常見調(diào)用shell腳本的三種方法

    編寫Linux下的應用程序時有時需要調(diào)用Linux的相關(guān)shell腳本,在這些腳本中通過調(diào)用Linux的相關(guān)函數(shù)
    的頭像 發(fā)表于 06-28 14:28 ?8482次閱讀

    米爾科技Linux Shell編程介紹

    Shell是用戶與內(nèi)核進行交互操作的一種接口,是Linux最重要的軟件之一。
    的頭像 發(fā)表于 11-25 08:58 ?1667次閱讀
    米爾科技<b class='flag-5'>Linux</b> <b class='flag-5'>Shell</b>編程介紹

    Linux開發(fā)_Shell腳本編程語言

    介紹LinuxShell編程,介紹shell里語句、變量、函數(shù)、運算符的使用。
    的頭像 發(fā)表于 09-17 15:39 ?1244次閱讀

    Linux命令行與shell腳本編寫

    Linux命令行與shell腳本編寫
    發(fā)表于 01-11 16:50 ?4次下載

    Linux基礎(chǔ)知識中的Shell

    Shell便是Linux命令行環(huán)境CLI,直觀意思是“外殼”,這一點與Linux內(nèi)核對應。
    的頭像 發(fā)表于 02-15 10:54 ?872次閱讀

    shell命令和linux命令一樣嗎

    結(jié)合在一起,形成一個相當于面向過程的程序,即shell script,從而實現(xiàn)一些復雜的功能。 而Linux命令則是用來對Linux系統(tǒng)進行管理的命令。這些命令通常是由系統(tǒng)管理員或用戶
    的頭像 發(fā)表于 11-08 10:51 ?2980次閱讀

    linux命令和shell編程有什么聯(lián)系

    的命令,并提供了許多功能和特性,如變量、控制結(jié)構(gòu)、函數(shù)等,這些功能和特性使得Shell編程成為可能。 其次,Linux命令是Shell編程的重要組成部分。通過使用
    的頭像 發(fā)表于 11-08 10:53 ?969次閱讀

    linux命令行與shell編程實戰(zhàn)

    Linux命令行與Shell編程實戰(zhàn)主要涉及以下內(nèi)容: Linux命令行基礎(chǔ):學習Linux命令行的基本操作,如文件管理、進程管理、網(wǎng)絡(luò)配置等。熟悉使用命令行能夠提高工作效率,提升自己
    的頭像 發(fā)表于 11-08 10:57 ?839次閱讀

    Linux從零到精通:最簡單的Shell腳本入門教程

    通過簡單的命令和腳本,實現(xiàn)對系統(tǒng)的靈活控制和自動化管理。 shell腳本前言 shell腳本入門 shell變量基礎(chǔ) shell變量子串
    的頭像 發(fā)表于 12-05 09:56 ?669次閱讀
    <b class='flag-5'>Linux</b>從零到精通:最簡單的<b class='flag-5'>Shell</b>腳本入門教程
    易胜博棋牌| 百家乐官网之对子的技巧| 赌神网百家乐官网的玩法技巧和规则 | 太阳百家乐官网代理| 大发888游戏平台 df888ylcxz46| 百家乐官网游戏规则玩法| 叶氏百家乐平注技巧| 美高梅百家乐官网娱乐城| 百家乐2号说名书| 百家乐官网网上真钱麻将| 如何看百家乐的玩法技巧和规则| 百家乐官网打法内容介绍| 百家乐赌场高手| 百家乐官网加牌规则| 下载百家乐官网的玩法技巧和规则 | 昂仁县| 网上百家乐怎么赌能赢钱| 真钱百家乐官网游戏排行| 康莱德百家乐的玩法技巧和规则 | V博百家乐官网的玩法技巧和规则| 德州扑克高级技巧| 百家乐存在千术吗| 网上现金赌场| 海威百家乐赌博机| 真钱百家乐官网开户试玩| 太阳城洋伞官网| 百家乐官网园云鼎赌场娱乐网规则 | 百家乐官网游戏机论坛| 大发888娱乐城casinolm0| 回力百家乐官网的玩法技巧和规则 | 百家乐视频百家乐| 博乐百家乐官网游戏| 庞博百家乐的玩法技巧和规则| 利高百家乐官网的玩法技巧和规则 | 足球百家乐投注计算| 百家乐官网发牌的介绍| 百家乐那个平好| 破战百家乐官网的玩法技巧和规则| 六合彩投注网| 利博百家乐官网的玩法技巧和规则| 澳门赌场招聘网|