嵌入式課程 第五周

2021-10-04 13:34:05 字數 3960 閱讀 5867

嵌入式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」;;

嵌入式第五周課堂總結

自動生成 cmake autotool 嵌入式linux開發工具 shell程式設計 指令碼 批處理 linux系統運維工程師 嵌入式系統開發 系統移植 shell 1.命令解析器 將使用者輸入的命令解析,呼叫相應的命令的可執行檔案 2.指令碼語言 命令 可執行檔案 變數 if for while ...

嵌入式課程作業 第二週

bin 普通使用者命令 sbin 管理員命令 etc 存放的是系統中的所有配置檔案 dev 系統中所有裝置檔案 home 普通使用者的工作目錄 root root使用者的工作目錄 usr 存放的是系統中安裝的軟體 boot 包含引導linux的重要檔案 lib 系統的庫檔案,有點像windows的p...

嵌入式課程設計總結(五)

自動生成 cmake autotool 嵌入式linux開發工具 shell程式設計 指令碼 批處理 linux系統運維工程師 嵌入式系統開發 系統移植 將使用者輸入的命令解析,呼叫相應的命令的可執行檔案 命令 可執行檔案 在這裡插入描述 變數 if for while until case 函式 ...