国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

【RT-Thread學習筆記】bash shell -e參數

嵌入式物聯網開發 ? 來源:嵌入式物聯網開發 ? 作者:嵌入式物聯網開發 ? 2022-07-28 05:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1 前言

1.1 項目背景

這段時間博主在寫一些編譯構建的腳本,考慮到知識的儲備性,之前對bash shell解除最多,而且我們的編譯環境是在Linux下進行,所以我優選了bash shell腳本。

1.2 功能描述

期間我寫了一個腳本,大致的功能就是獲取當前操作系統是MacOS還是Linux,如果是Linux的話,還需要知道是Linux32還是Linux64。

2 場景分析

2.1 腳本實現

我們都知道Linux系統下有個uname命令可以輸出當前系統的詳細信息,而MacOS上由于它是Unix系統演變來的,所以它也是支持這個命令的。 經過一番研究,我就決定使用uname-a來獲取輸出信息,然后從輸出信息里面檢索關鍵字,進而判斷是什么系統。 腳本實現代碼如下:

  1. #! /bin/bash -e
  2. function get_os()
  3. {
  4. echo "begin to get OS ..."
  5. os=`uname -a | grep Darwin`
  6. if [ "$os" != "" ]; then
  7. host_os_name=OSX
  8. else
  9. os=`uname -a | grep x86_64`
  10. if [ "$os" != "" ]; then
  11. host_os_name=Linux64
  12. else
  13. host_os_name=Linux32
  14. fi
  15. fi
  16. echo "get OS name: $host_os_name"
  17. }
  18. function do_other_things()
  19. {
  20. echo "do other things ..."
  21. }
  22. get_os
  23. do_other_things
  24. exit 0

2.2 問題復現

從功能邏輯上分析,沒有任何問題,結果我在Linux-x64上面一跑,出乎意料了:

  1. bash_shell_e$ ./test_shell_e.sh
  2. begin to get OS ...

感覺腳本壓根就沒跑完啊?怎么回事?

2.3 問題分析

調試代碼,先從邏輯上分析沒有問題,再使用萬能的print大法,不過再bash shell里面就要用echo了。 通過一行行echo添加log,最終定位到是:

  1. os=`uname -a | grep Darwin`

執行完這句之后,后面的if語句就沒跑進去! 但是uname-a|grepDarwin在我的機器上是可以執行的,并不會報錯:

  1. bash_shell_e$ uname -a | grep Darwin
  2. bash_shell_e$

雖然是啥也沒輸出。 我們都知道在bash shell里面是通過echo $?來判斷上一條命令執行是否成功的:

  1. bash_shell_e$ echo $?
  2. 1
  3. bash_shell_e$
  4. bash_shell_e$ ls
  5. test_shell_e.sh
  6. bash_shell_e$
  7. bash_shell_e$ echo $?
  8. 0

嗯哼?返回1,這個引起了我的注意,證明這條命令執行的返回是失敗的。 回頭再看看腳本的開始,我習慣上是寫

  1. #! /bin/bash -e

至于為啥帶上-e,以前壓根就沒去考慮過,反正看到linux下的好多系統腳本就是這樣寫的,咱這樣是像標準看齊,沒想到還搞出問題了。

2.4 -e究竟是什么含義?

通過查了一些資料,發現這個-e不簡單,它可以對每一條執行的shell腳本,自動判斷其是否執行成功,如果執行失敗,就立即退出整個腳本的執行。 用代碼來體現就是,如果不加-e,你需要對一個命令的執行結果判斷,就應該這樣:

  1. excute_shell_cmd
  2. if [ $? != 0 ]; then
  3. exit 1
  4. fi

而有了-e,就只有這樣:

  1. excute_shell_cmd

看,是不是大大簡潔了腳本,而不會出現滿屏的if-fi。 但是這個帶來的最大問題就是,你可能不知道哪條語句就退出了,應該這里退出腳本執行的時候,沒有任何輸出提示,就好像我的案例場景一樣。

2.4 解決辦法1

既然知道是-e選項引起的,我去掉試試看:

  1. #! /bin/bash
  2. function get_os()
  3. {
  4. echo "begin to get OS ..."
  5. os=`uname -a | grep Darwin`
  6. if [ "$os" != "" ]; then
  7. host_os_name=OSX
  8. else
  9. os=`uname -a | grep x86_64`
  10. if [ "$os" != "" ]; then
  11. host_os_name=Linux64
  12. else
  13. host_os_name=Linux32
  14. fi
  15. fi
  16. echo "get OS name: $host_os_name"
  17. }
  18. function do_other_things()
  19. {
  20. echo "do other things ..."
  21. }
  22. get_os
  23. do_other_things
  24. exit 0

執行一下:

  1. bash_shell_e$ ./test_shell.sh
  2. begin to get OS ...
  3. get OS name: Linux64
  4. do other things ...

得到了正確的結果,在其他平臺上,也得到了正確的結果。

2.5 解決辦法2

但是,如果我不想去掉-e呢,有沒有什么辦法? 經過一番調試,我發現這樣是可以的:

  1. #! /bin/bash -e
  2. function get_os()
  3. {
  4. echo "begin to get OS ..."
  5. osx_name=Darwin
  6. linux64_name=x86_64
  7. if [ "`uname -a | grep $osx_name`" != "" ]; then
  8. host_os_name=OSX
  9. elif [ "`uname -a | grep $linux64_name`" != "" ]; then
  10. host_os_name=Linux64
  11. else
  12. host_os_name=Linux32
  13. fi
  14. echo "get OS name: $host_os_name"
  15. }
  16. function do_other_things()
  17. {
  18. echo "do other things ..."
  19. }
  20. get_os
  21. do_other_things
  22. exit 0

輸出結果如下:

  1. bash_shell_e$ ./test_shell_ok.sh
  2. begin to get OS ...
  3. get OS name: Linux64
  4. do other things ...

這里的區別在于,直接把uname-a|grepDarwin的執行結果參與if判斷,而不是用一個變量去接收返回;這樣居然就通過了。

2.6 擴展延伸

有沒有更好的方法調試shell腳本呢?而不是滿屏的echo? 這個,下次我再發文介紹些高階手段吧,敬請期待。

3 更多分享

架構師李肯

一個專注于嵌入式IoT領域的架構師。有著近10年的嵌入式一線開發經驗,深耕IoT領域多年,熟知IoT領域的業務發展,深度掌握IoT領域的相關技術棧,包括但不限于主流RTOS內核的實現及其移植、硬件驅動移植開發、網絡通訊協議開發、編譯構建原理及其實現、底層匯編及編譯原理、編譯優化及代碼重構、主流IoT云平臺的對接、嵌入式IoT系統的架構設計等等。擁有多項IoT領域的發明專利,熱衷于技術分享,有多年撰寫技術博客的經驗積累,連續多月獲得RT-Thread官方技術社區原創技術博文優秀獎,榮獲CSDN博客專家、CSDN物聯網領域優質創作者、2021年度CSDN&RT-Thread技術社區之星、RT-Thread官方嵌入式開源社區認證專家、RT-Thread 2021年度論壇之星TOP4、華為云云享專家(嵌入式物聯網架構設計師)等榮譽。堅信【知識改變命運,技術改變世界】!

本項目的所有測試代碼和編譯腳本,均可以在我的github倉庫01workstation中找到。

歡迎關注我的github倉庫01workstation,日常分享一些開發筆記和項目實戰,歡迎指正問題。

同時也非常歡迎關注我的專欄,有問題的話,可以跟我討論,知無不答,謝謝大家。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Shell
    +關注

    關注

    1

    文章

    375

    瀏覽量

    25375
  • 腳本
    +關注

    關注

    1

    文章

    409

    瀏覽量

    29193
  • Bash
    +關注

    關注

    0

    文章

    57

    瀏覽量

    10751
  • RT-Thread
    +關注

    關注

    32

    文章

    1613

    瀏覽量

    44869
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    恩智浦亮相RT-Thread 20周年開發者大會

    日前,“開源向實·生產力進化啟示錄”全球峰會暨RT-Thread 20周年開發者大會在上海成功舉辦,恩智浦作為RT-Thread的緊密合作伙伴,在活動中重磅亮相,展示雙方在共建RT-Thread OS開發生態方面的新成果、新方案
    的頭像 發表于 01-26 09:07 ?552次閱讀

    首搭RT-Thread程翧車控平臺| RT-Thread程翧 S32K344 快速原型開發平臺正式上市!| 產品動態

    在智能汽車邁向高集成與高安全的時代,VCU/ECU開發正面臨效率與可靠性的雙重考驗。依賴單一硬件或拼湊軟件方案的傳統模式,已成為制約創新的瓶頸。為此,RT-Thread帶來里程碑式的解決方案
    的頭像 發表于 10-31 11:53 ?992次閱讀
    首搭<b class='flag-5'>RT-Thread</b>程翧車控平臺| <b class='flag-5'>RT-Thread</b>程翧 S32K344 快速原型開發平臺正式上市!| 產品動態

    RT-Thread×玄鐵 | 硬核直播】RISC-V新核E901發布!RT-Thread手把手帶你玩轉玄鐵生態! | 博觀講堂

    重磅消息!下周四!RT-Thread攜手阿里巴巴達摩院玄鐵,帶來RISC-V技術深度直播!2025年8月,玄鐵正式發布嵌入式E系列全新一代產品——玄鐵E901處理器。旨在以更低功耗、更高代碼密度
    的頭像 發表于 10-21 19:47 ?567次閱讀
    【<b class='flag-5'>RT-Thread</b>×玄鐵 | 硬核直播】RISC-V新核<b class='flag-5'>E</b>901發布!<b class='flag-5'>RT-Thread</b>手把手帶你玩轉玄鐵生態! | 博觀講堂

    基于RT-Thread的EK-RA2E2 設備驅動移植與應用 | 技術集結

    目錄前言環境配置HelloRT-ThreadGPIO輸入與中斷I2C主機驅動SPI主機驅動ADC設備驅動PWM設備驅動Flash設備驅動WDT設備驅動1前言本文說明如何在RT-Thread下配置與使用EK-RA2E2的板載外設
    的頭像 發表于 10-05 10:06 ?6163次閱讀
    基于<b class='flag-5'>RT-Thread</b>的EK-RA2<b class='flag-5'>E</b>2 設備驅動移植與應用 | 技術集結

    學習強國深度報道 RT-Thread“1+X+N”戰略,國產操作系統賦能高端制造引關注|媒體視角

    近日,國產嵌入式操作系統領軍企業RT-Thread睿賽德在工博會發布的“1+X+N”戰略體系,獲得了國家級權威媒體平臺“學習強國”的重點報道。該報道從產業高度深入剖析了RT-Thread睿賽德以自主
    的頭像 發表于 09-29 17:37 ?1204次閱讀
    <b class='flag-5'>學習</b>強國深度報道 <b class='flag-5'>RT-Thread</b>“1+X+N”戰略,國產操作系統賦能高端制造引關注|媒體視角

    2025年RT-Thread開發者巡回培訓報名正式啟動!

    親愛的RT-Thread社區成員們:新程再啟,共赴熱愛!2025年RT-Thread開發者巡回培訓正式啟動報名!今年,我們選擇了西安、武漢、北京、杭州、深圳、上海、成都這7座城市,為大家帶來
    的頭像 發表于 09-27 10:39 ?1964次閱讀
    2025年<b class='flag-5'>RT-Thread</b>開發者巡回培訓報名正式啟動!

    rt-thread studio 2.2.9如何使用最新的RT-Thread v5.2.0 released?

    rt-thread studio2.2.9如何使用最新的RT-Thread v5.2.0 released? 原先以為修改index_all.json,發現聯網的時候,會自動覆蓋 另lastet版本
    發表于 09-16 06:06

    在Ubuntu上開發基于先楫MCU的RT-Thread應用指南

    1、前言RT-ThreadEnv是RT-Thread推出的開發輔助工具,針對基于RT-Thread操作系統的項目工程,提供編譯構建環境、圖形化系統配置及軟件包管理功能。其內置的menuconfig
    的頭像 發表于 08-29 12:22 ?1776次閱讀
    在Ubuntu上開發基于先楫MCU的<b class='flag-5'>RT-Thread</b>應用指南

    【好書推薦】RT-Thread第20本相關書籍!《嵌入式實時操作系統RT-Thread原理與應用》| 技術集結

    01內容簡介ContentSummary本書為讀者提供了一個全面、系統的RT-Thread學習指南,旨在幫助初學者及有經驗的開發者掌握RT-Thread實時操作系統和STM32嵌入式微控制器的核心
    的頭像 發表于 08-24 10:05 ?1022次閱讀
    【好書推薦】<b class='flag-5'>RT-Thread</b>第20本相關書籍!《嵌入式實時操作系統<b class='flag-5'>RT-Thread</b>原理與應用》| 技術集結

    RT-Thread 遇上 Rust:安全內核 RusT-Thread 的誕生

    大家好,我們是中國科學技術大學操作系統原理與設計(H)課oooooS小組。這個項目是我們的課程大作業:參考RT-Thread架構,使用Rust搭建一個原生的嵌入式操作系統內核。初識Rust是因為xk
    的頭像 發表于 08-02 11:03 ?3538次閱讀
    <b class='flag-5'>RT-Thread</b> 遇上 Rust:安全內核 RusT-<b class='flag-5'>Thread</b> 的誕生

    RT-Thread榮獲2025優秀開源項目 | 新聞速遞

    6月底,RT-Thread睿賽德受邀參與由上海開源信息技術協會主辦的2025上海開源創新精英薈。上海市商委副主任張杰出席會議并致辭。RT-Thread嵌入式操作系統項目憑借其卓越的技術創新與開源生態
    的頭像 發表于 07-04 09:04 ?2642次閱讀
    <b class='flag-5'>RT-Thread</b>榮獲2025優秀開源項目 | 新聞速遞

    RT-Thread BSP全面支持玄鐵全系列RISC-V 處理器 | 技術集結

    RT-Thread標準版已全面適配玄鐵E、R、C系列內核,并在C906內核上支持RT-Smart微內核操作系統。本文將以E906運行RT-Thre
    的頭像 發表于 07-03 18:03 ?3228次閱讀
    <b class='flag-5'>RT-Thread</b> BSP全面支持玄鐵全系列RISC-V 處理器 | 技術集結

    揭秘RT-Thread上的AUTOSAR CP系統

    本文探討了RT-Thread與AUTOSARCP的融合,解決車載ECU開發中實時性、安全性與靈活性的平衡問題。通過分層安全內核(rt-safetyos/autoos)和工具鏈整合,兼容AUTOSAR
    的頭像 發表于 06-23 20:22 ?3222次閱讀
    揭秘<b class='flag-5'>RT-Thread</b>上的AUTOSAR CP系統

    2025 RT-Thread全球技術大會議程正式發布!

    RT-ThreadGlobalTechConference(RT-ThreadGTC,RT-Thread全球技術大會)是聚焦基礎軟件技術創新與實踐的嵌入式技術盛會,持續推動技術價值轉化
    的頭像 發表于 05-27 19:28 ?1358次閱讀
    2025 <b class='flag-5'>RT-Thread</b>全球技術大會議程正式發布!

    RT-Thread審核團招募: 深度參與開源RTOS社區治理與演進

    全球開發者招募:RT-Thread審核團(ReviewTeam)正式開放申請!在開源的世界里,代碼審查(CodeReview)是保證軟件質量、促進技術交流的關鍵環節。RT-Thread作為全球領先
    的頭像 發表于 05-21 18:02 ?1255次閱讀
    <b class='flag-5'>RT-Thread</b>審核團招募: 深度參與開源RTOS社區治理與演進