嵌入式Linux學習5 Shell程式設計

2021-08-26 04:37:25 字數 3326 閱讀 3264

shell 使用:

1.shell簡介:

簡單的說shell就是一種命令解析器,是一種程式設計互動介面,通過驅動作業系統核心完成指定的工作,它是使用者與作業系統之間的橋梁。

分類:linux主流的shell有三種bash tcsh korn shell

這裡我學習的是bash 它是標準的uxin shell 是由 at&t開發出來的 以快捷、簡介著名

2.shell基本使用:

vim hello.sh 開啟vi 輸入

#!/bin/sh //#!表示指定該指令碼的解析程式

echo "hello" //答應hello

儲存 執行./hello 你發現 執行不了 為什麼呢??因為這是的 檔案不可執行 該怎麼辦呢 使用 chmod 777 hello 是其具有可執行屬性

下面具體介紹一下

開頭指定所需的 解析器 #!/bin/sh

注釋 使用#開頭的一行表示注釋語句

變數 在shell中所有的變數都是字串組成 並且無需對其預先宣告 當輸出時需要在變數後加入字元 比如2nd 在變數2後加上nd字元則需要在列印中把變數用{}闊起來

這樣才能正確的列印出所需的字元

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

$*:所有命令列引數,在個引數前用空格隔開

$0、$1、$2: 對應命令本身 第乙個命令列引數 第二個命令列引數

區域性變數:子啊首次複製時加上local關鍵字

(注意 變數賦值(注意只在這個時候)時 「=」左右兩邊不能有空格 bash語句結尾不加;分號)

如果不加local 關鍵字看看:

echo:列印

read:輸入

例:#! /bin/sh

echo "input name and age"

read name age

echo "name is :"$name

echo "age is:"$age

執行看看 注意 在等待輸入時 要輸入name變數值 和age變數值中間用空格隔開

shell 陣列:

賦值方法:陣列名[下標值]=值(對單個值賦值) 陣列名=(value1 value2 value3...)一次性對陣列賦值

取值方法:$

#!/bin/sh

name=

echo "name[0] is : " $

echo "name[1] is : " $

echo "name[2] is : " $

看看結果

3:shell控制語句:

(1) if 語句

原型:if 條件 if 條件

if 條件

then 語句1 then 語句1

then 語句1

fi else 語句2 elif 條件2

fi then 語句2

else 語句3

fi所有測試條件

字串測試:

-z s1 s1的長度為0為真

-n s1 s1長度大於0為真

s1 s1不為空則返回真

s1 = s2 (注意此處的空格) 在s1=s2時為真

同理s1 > s2 s1 < s2

對於數字運算子:

n1 -eq n2 測試n1 = n2

n1 -ne n2 n1!=n2

n1 -lt n2 n1

n1 -le n2 n1<=n2

n1 -gt n2 n1>n2

n1 -ge n2 n1>=n2

邏輯運算子

! 邏輯非

-a 邏輯與

-o 邏輯或

()把邏輯做一整體

檔案運算子:

-r/-w/-x 判斷檔案存在且是否可讀、可寫、可操作

-f 判斷檔案是否是普通檔案

-d 判斷檔案是目錄檔案

-b 塊裝置檔案

-c 字元裝置檔案

-s 檔案長度大於零

#!/bin/bash

#將第乙個命令列引數傳遞給變數a,第二個命令列引數傳遞給變數b

a=$1

b=$2

#判斷a或者b變數是否為空,只要有乙個為空就列印提示語句並退出

if [ -z $a ] || [ -z $b ]

then

echo "please enter 2 no"

exit 1

#判斷a和b的大小,並根據判斷結果列印語句

fiif [ $a -eq $b ] ; then

echo "number a = number b"

else if [ $a -gt $b ]

then

echo "number a>number b"

elif [ $a -lt $b ]

then

echo "number a(2)case語句:

case 字串 in

模式串表示式1 ) 語句1;;

模式串表示式2 ) 語句2;;

........

esac 例:

#! /bin/sh

echo please enter your name:

read name

case $name in

tom ) echo your name is tom;;

xiaoming ) echo your name is xiaoming;;

* ) echo "we don't kown your name";;

esac

4.shell迴圈語句:

(1) for語句

原型1: 原型2: 原型3:

for 變數 in 取值集合 for 變數 in 檔案正規表示式 for 變數 in $*

do do do

語句 語句 語句

done done done

(2)while語句

while 條件測試語句 do

語句done

#!/bin/bash

#提示使用者輸入

echo -n "pleasw enter number : "

read n #讀入輸入的值放到變數n中

sd=0

rev=""

on=$n #將變數n的值儲存到變數on中,方便以後用到

echo "you put number is $n"

while [ $n -gt 0 ]

dosd=$(( $n % 10 )) #求餘

n=$(( $n / 10 )) #去掉當前的最後一位數後剩下的數

rev="$rev$sd" #將當前的最後一位數放到字串之後

done

echo "$on in a reverse order $rev"

嵌入式linux如何學習

俗話說萬事開頭難 然後中間難,最後難?剛開始的時候,你是否根本就不知如何開始,上網查資料被一堆堆新名詞搞的找不到北,去圖書館看書也是找不到方向?又是arm,又是linux,又是uboot頭都大了。不知道自己究竟從 開始?嵌入式linux如何學習 簡單說,從arm基礎知識到裸機程式設計,從ucosii...

嵌入式Linux學習筆記

嵌入式linux學習筆記 學習 一 linux的優勢 1 廣泛的硬體支援 linux能夠支援x86 arm mips alpha powerpc等多種體系結構,目前已經成功移植到數十種硬體平台,幾乎能夠執行在所有流行的cpu上。linux有著異常豐富的驅動程式資源,支援各種主流硬體裝置和最新硬體技術...

嵌入式linux學習筆記

1 溢位 兩個數相加,如果最高位的進製和此高位的進製不同,則產生溢位。2 進製和溢位的概念不一樣。3 預取 取得是編譯後得到的機器 解碼 執行 4 arm的彙編指令長度是確定的,32位。5 一條彙編指令 條件碼 4bit 操作碼 分類碼 s 1bit 目的暫存器 4bit 源暫存器 4bit 立即數...