chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內不再提示

【RT-Thread學習筆記】結合案例學習調試shell腳本

嵌入式物聯(lián)網開發(fā) ? 來源:嵌入式物聯(lián)網開發(fā) ? 作者:嵌入式物聯(lián)網開發(fā) ? 2022-07-29 03:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1 問題回顧

在之前的文章 【shell編程掃盲系列】結合真實案例分析“bash shell -e”到底是啥意思? 中,我提到了我遇到一個bash shell-e引發(fā)的問題,不瞞大家說,當時我是用echo大法找到出問題的地方,加以修改才解決的。 那么,我們有沒有更加優(yōu)雅的調試方法,解決這類型的問題呢? 本篇文章將會給出答案。

2 shell腳本如何調試

2.1 特別說明

本文中提及的shell腳本,無特殊說明的情況下,指的是bash shell。這里做這個強調的主要原因是,不同的shell的一些基礎語法可能有微小的差異,導致在bash shell中可以跑的腳本,但在別的shell上就跑不了。 這種案例可以參見:【Linux Shell】你知道bash shell和dash shell的區(qū)別嗎?

2.2 shell腳本如何被啟動的?

初次看shell腳本的朋友,一定有所疑問為何大部分shell腳本都是#!/bin/bash開頭??? 這里幫你解除疑問: 因為shell腳本說白了就是一系列命令行組成的一個文本文件,由于各式各樣的腳本非常多,那么該用哪種腳本的語法去解析這個腳本文件呢? 這里就有2種方式:

  • 通過腳本文件的首行,使用#!/bin/bash指定,像這樣就表示它是一個bash shell語法的腳本,應該用/bin/bash去解析;
  • 通過啟動的時候,直接用/bin/bash xxx.sh來啟動,這樣就是手動指定腳本的解析器。

注意:使用方式1的時候,運行腳本只需要./xxx.sh就可以了,但是方式2卻不行。

2.3 shell腳本的三個調試選項

從之前的文章中,我們了解了-e選項,其實它還有其他幾個跟調試相關的選項,如下所示:

  • -v (verbose 的簡稱) - 告訴 Shell 讀取腳本時顯示所有行,激活詳細模式。
  • -n (noexec 或 no ecxecution 簡稱) - 指示 Shell 讀取所有命令然而不執(zhí)行它們,這個選項激活語法檢查模式。
  • -x (xtrace 或 execution trace 簡稱) - 告訴 Shell 在終端顯示所有執(zhí)行的命令和它們的參數(shù)。 這個選項是啟用 Shell 跟蹤模式。

2.4 shell腳本的三種調試方式

2.4.1 在shell腳本的首行加選項

這個就跟-e的方式是一樣的,注意加選項的時候,是連著-e起來,比如-evx,而不能這樣-e-v-x。 這里的選項是可以加多個調試選項。 選項不對報錯:

  1. bash_shell_e$ ./test_shell_e.sh
  2. /bin/bash: - : invalid option

正常示例如下:

  1. #!/bin/shell -evx 的執(zhí)行結果
  2. /bash_shell_e$ ./test_shell_e.sh
  3. # ~/.bashrc: executed by bash(1) for non-login shells.
  4. # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
  5. # for examples
  6. # If not running interactively, don't do anything
  7. case $- in
  8. *i*) ;;
  9. *) return;;
  10. esac
  11. + case $- in
  12. + return
  13. #! /bin/bash -evx
  14. function get_os()
  15. {
  16. echo "begin to get OS ..."
  17. os=`uname -a | grep Darwin`
  18. if [ "$os" != "" ]]; then
  19. host_os_name=OSX
  20. else
  21. os=`uname -a | grep x86_64`
  22. if [ "$os" != "" ]; then
  23. host_os_name=Linux64
  24. else
  25. host_os_name=Linux32
  26. fi
  27. fi
  28. echo "get OS name: $host_os_name"
  29. }
  30. function do_other_things()
  31. {
  32. echo "do other things ..."
  33. }
  34. get_os
  35. + get_os
  36. + echo 'begin to get OS ...'
  37. begin to get OS ...
  38. ++ uname -a
  39. ++ grep Darwin
  40. + os=

從這里結果,我們就可以知道,在執(zhí)行完os=xxx賦值這條語句就退出了,這跟我們使用echo大法得出的結論是一致的。

2.4.2 手動顯示shell腳本時加選項

即類似這樣: /bin/bash -evx 啟動腳本

  1. bash_shell_e$ /bin/bash -vxe test_shell_e.sh
  2. # ~/.bashrc: executed by bash(1) for non-login shells.
  3. # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
  4. # for examples
  5. # If not running interactively, don't do anything
  6. case $- in
  7. *i*) ;;
  8. *) return;;
  9. esac
  10. + case $- in
  11. + return
  12. #! /bin/bash -e
  13. function get_os()
  14. {
  15. echo "begin to get OS ..."
  16. os=`uname -a | grep Darwin`
  17. if [ "$os" != "" ]; then
  18. host_os_name=OSX
  19. else
  20. os=`uname -a | grep x86_64`
  21. if [ "$os" != "" ]; then
  22. host_os_name=Linux64
  23. else
  24. host_os_name=Linux32
  25. fi
  26. fi
  27. echo "get OS name: $host_os_name"
  28. }
  29. function do_other_things()
  30. {
  31. echo "do other things ..."
  32. }
  33. get_os
  34. + get_os
  35. + echo 'begin to get OS ...'
  36. begin to get OS ...
  37. ++ uname -a
  38. ++ grep Darwin
  39. + os=

注意:當使用命令行傳遞輸入選項后,腳本文件首行的選項就不生效了,這也是我實踐過程中才發(fā)現(xiàn)的。 如下所示: 我的腳本首行是指定了-e的,但是它依然跑成功了,因為我使用-x啟動,沒有帶-e。

  1. bash_shell_e$ /bin/bash -x test_shell_e.sh
  2. + case $- in
  3. + return
  4. + get_os
  5. + echo 'begin to get OS ...'
  6. begin to get OS ...
  7. ++ uname -a
  8. ++ grep Darwin
  9. + os=
  10. + '[' '' '!=' '' ']'
  11. ++ uname -a
  12. ++ grep x86_64
  13. + os='Linux ubuntu 5.4.0-65-generic #73-Ubuntu SMP Mon Jan 18 17:25:17 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux'
  14. + '[' 'Linux ubuntu 5.4.0-65-generic #73-Ubuntu SMP Mon Jan 18 17:25:17 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux' '!=' '' ']'
  15. + host_os_name=Linux64
  16. + echo 'get OS name: Linux64'
  17. get OS name: Linux64
  18. + do_other_things
  19. + echo 'do other things ...'
  20. do other things ...
  21. + exit 0

2.4.3 通過set命令設置調試選項

使用方法如下,它可以在腳本中調試任意一個函數(shù),用法非常靈活

  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. # open debug option
  23. set -xv
  24. get_os
  25. # close debug option
  26. set +xv
  27. # re-open debug option
  28. set -xv
  29. do_other_things
  30. # close debug option
  31. set +xv
  32. exit 0

增加這些調試之后,運行結果如下:

  1. bash_shell_e$ ./test_shell_e_debug.sh
  2. get_os
  3. + get_os
  4. + echo 'begin to get OS ...'
  5. begin to get OS ...
  6. ++ uname -a
  7. ++ grep Darwin
  8. + os=

從這個輸出,我們也可以看到在執(zhí)行完ox=xxx賦值之后,腳本就停止運行,退出了,這跟我們之前的分析是一致的。 這個方法對于調試shell的函數(shù)非常有用,值得注意的是,set-xxx需要加在執(zhí)行部分,而不是聲明部分。

3 經驗總結

  • 調試shell腳本有3個選項,-x -n -v 用法各異,靈活使用;
  • 調試shell腳本的方式也有3種,選用自己熟悉且方便的一種即可,高效排查問題。

4 更多分享

架構師李肯

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

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

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

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

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

    關注

    1

    文章

    375

    瀏覽量

    25355
  • 腳本
    +關注

    關注

    1

    文章

    408

    瀏覽量

    29166
  • RT-Thread
    +關注

    關注

    32

    文章

    1602

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

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

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

    rt-thread studio 導入BSP 失敗怎么解決?

    rt-thread studio 手動導入bsp 失敗。 版本: 2.2.8 構建ID: 202405200930 導入的bsp 是直接從rt-thread 代碼倉庫下載的 .log
    發(fā)表于 10-11 11:07

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

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

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

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

    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,發(fā)現(xiàn)聯(lián)網的時候,會自動覆蓋 另lastet版本
    發(fā)表于 09-16 06:06

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

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

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

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

    揭秘!基于RT-Thread探究“優(yōu)先級反轉”下的任務調度究竟是什么樣的?| 技術集結

    本文將基于RT-Thread結合RT-Trace調試器細化到實際任務調度的粒度,來調試并逐步講解“優(yōu)先級反轉”的調度和運行邏輯。如果對
    的頭像 發(fā)表于 08-17 10:07 ?3234次閱讀
    揭秘!基于<b class='flag-5'>RT-Thread</b>探究“優(yōu)先級反轉”下的任務調度究竟是什么樣的?| 技術集結

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

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

    RT-Thread榮獲2025優(yōu)秀開源項目 | 新聞速遞

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

    深度剖析 RT-Thread 線程調度流程

    RT-Thread調度第一個線程的主要流程分如下:rtthread_startup:RTT的啟動函數(shù),主要負責板級驅動,調度器,系統(tǒng)線程初始化,啟動調度的工作
    的頭像 發(fā)表于 06-25 18:24 ?1738次閱讀
    深度剖析 <b class='flag-5'>RT-Thread</b> 線程調度流程

    揭秘RT-Thread上的AUTOSAR CP系統(tǒng)

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

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

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

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

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