3 24嵌入式設計課程

2021-10-04 14:11:47 字數 3952 閱讀 5901

嵌入式linux系統開發(檔案、程序、執行緒、網路)20

嵌入式系統移植8h

嵌入式驅動開發8h

自動生成: cmake autotool

嵌入式linux開發工具-shell程式設計(指令碼:批處理) linux系統運維工程師(嵌入式系統開發–系統移植)

shell:

1.命令解析器 (將使用者輸入的命令解析,呼叫相應的命令的可執行檔案)

2.指令碼語言

命令:可執行檔案

在這裡插入描述

變數 if for while until case 函式 函式傳參 函式返回值 鍵盤輸入read

底層嵌入式開發: shell命令拼裝、看懂shell

3.shell是什麼呢?

確切一點說,shell就是乙個命令列直譯器,它的作用就是遵循一定的語法將輸入的命令加以解釋並傳給系統。它為使用者提供了乙個向linux傳送請求以便執行程式的介面系統級程式,使用者可以用shell來啟動、掛起、停止甚至是編寫一些程式。

4.shell本身是乙個用c語言編寫的程式,它是使用者使用linux的橋梁。

shell既是一種命令語言,又是一種程式語言。作為命令語言,它互動式地解釋和執行使用者輸入的命令;作為程式語言,它定義了各種變數和引數,並提供了許多在高階語言中才具有的控制結構,包括迴圈和分支。它雖然不是 linux系統核心的一部分,但它呼叫了系統核心的大部分功能來執行程式、建立文件並以並行的方式協調各個程式的執行。因此,對於使用者來說,shell是最重要的實用程式,深入了解和熟練掌握shell的特性極其使用方法,是用好linux系統的關鍵。可以說,shell使用的熟練程度反映了使用者對 linux使用的熟練程度。

5.shell提供了你與作業系統之間通訊的方式。這種通訊可以以互動方式(從鍵盤輸入,並且可以立即得到響應),或者以shell script(非互動)方式執行。shell script是放在檔案中的一串shell和作業系統命令,它們可以被 重複使用。 本質上,shell script是命令列命令簡單的組合到乙個檔案裡面。程式必須以下面的行開始(必須方在檔案的第一行):

#!/bin/sh

#!用來告訴系統它後面的引數是用來執行該檔案的程式。

要使指令碼可執行:

chmod +x filename

然後,您可以通過輸入: ./filename 來執行您的指令碼

在進行shell程式設計時,以#開頭的句子表示注釋,直到這一行的結束。我們真誠地建議您在程式中使用注釋。如果您使用了注釋,那麼即使相當長的時間內沒有使用該指令碼,您也能在很短的時間內明白該指令碼的作用及工作原理

6.變數:

在其他程式語言中您必須使用變數。在shell程式設計中,所有的變數都由字串組成,並且您不需要對變數進行宣告。要賦值給乙個變數,您可以這樣寫:

變數名=值

取出變數值可以加乙個美元符號($)在變數前面

變數賦值時,「=」兩邊都不能有空格

bash中的語句結尾不需要分號

helloworld

#!/bin/sh

#對變數賦值:

a=「hello world」

現在列印變數a的內容:

echo 「a is:」

echo $a

在編輯器中輸入以上內容,然後將其儲存為乙個檔案helloworld。之後執行chmod +x helloworld

最後輸入./ helloworld執行該指令碼。

這個指令碼將會輸出:

a is:

hello world

有時候變數名很容易和其他名字混淆,比如:

s13:

num=2

echo 「this is the $numnd」

思考:輸出?why?

num=2

echo 「this is the katex parse error: expected 『}』, got 『eof』 at end of input: … 「this is the nd」

這將列印: 「this is the 2nd」

7.預設變數

$#:傳入指令碼的命令列引數個數

$*:所有命令列引數值,在各個引數值間留有空格

$0:命令本身(shell檔名)

$1:第乙個命令列引數

$2:第二個命令列引數

8.區域性變數

在變數首次被複製時加上local關鍵字可以什麼乙個區域性變數, 例s3:

#!/bin/bash

hello=「var1「

echo $hello

function func1

func1

echo $hello

輸出:?

9.if語句

if [expression]

then

#code block

fiif [expression]

then

#code block

else

#code block

fiif [expression]

then

#code block

else if [expression]

then

#code block

else

#code block

fifi

例:比較整數a和整數b是否相等:if[ $a = $b ]

比較整數a是否大於整數b:if[ $a –gt $b ]

比較字串a和b是否相等: if[ $a = $b ]

判斷字串a是否為空:if[ -z $a ]

比較整數變數a是否大於b:if[ $a –gt katex parse error: expected 『eof』, got 『#』 at position 137: …對當前使用者可以執行 例s5: #̲!/bin/sh folde…folder」 ] && echo 「can read folder「[−f"

folder「[−f"folder」 ] || echo 「this is not file」

11.for語句

for迴圈與c語言中有所不同,在bash中for迴圈的基本結構是:

for var in [list]

do#code block

done

其中var是迴圈控制變數, [list]是var需要遍歷的乙個集合,do/done包含了迴圈體,相當於c語言中的大括號。另外do和for被寫在同一行,必須在do前面加上「;」如: for var in [list];do

s7:#!/bin/bash

for day in sun mon tue wed thu fri sat

doecho $day

done

如果列表被包含在一對雙引號中,則被認為是乙個元素,如s8

#!/bin/bash

for day in "sun mon tue wed thu fri sat「

doecho

daydone上面的例子中,在for所在那行變數day是沒有加」

daydone上面的例子中,在for所在那行變數day是沒有加」」符號的,而在迴圈體內,echo所在行變數day必須加「katex parse error: expected 『eof』, got 『#』 at position 51: …condition] do #̲code block done…var」 in

contidion1)

;;contidion1)

;;*)

default statements;;

esac

s12:

#!/bin/bash

echo 「hit a key, then hit return.「

read keypress

case 「$keypress」 in

[a-z] ) echo 「uppercase letter」

[a-z] ) echo 「lowercase letter」

[0-9] ) echo 「digit」

*) echo 「punctuation, whitespace, or other」

嵌入式3 24總結

shell本身是乙個用c語言編寫的程式,它是使用者使用linux的橋梁。shell既是一種命令語言,又是一種程式語言。作為命令語言,它互動式地解釋和執行使用者輸入的命令 作為程式語言,它定義了各種變數和引數,並提供了許多在高階語言中才具有的控制結構,包括迴圈和分支。它雖然不是linux系統核心的一部...

嵌入式設計課程(3)

嵌入式linux開發工具及課程目標 vim 文字編輯器 學會使用和如何配置vim gcc 編譯器 學會製作動態庫和靜態庫及使用區別 gdp 偵錯程式 設定斷電 單步執行 除錯記憶體錯誤 make 工程管理器 編寫makefile檔案 vi vim im 命令列模式nyy p ndd u 插入模式i ...

嵌入式設計課程(4)

偵錯程式 gdb gun計畫的工具 核心除錯kgdb 程式的錯誤分類 編譯時錯誤 語法錯誤 執行時錯誤 記憶體問題,邏輯問題 gdb的功能 1.執行程式 2.設定斷點 3.檢視變數的值 hello.c gcc g hello.c o hello gdb hello 使用 tui layout asm...