久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 學習筆記 > 嵌入式學習筆(bi)記(ji):shell腳(jiao)本學習從(cong)入門到精通(tong)

嵌入(ru)式學習(xi)(xi)筆記:shell腳本學習(xi)(xi)從(cong)入(ru)門到精(jing)通 時間:2018-09-12      來源:未(wei)知

shell腳本會了嗎,不會的看(kan)這里(li),教你一一來學,還有實例哦(e)

1.shell腳本

定義:多條(tiao)命令按(an)順序執(zhi)行,就是(shi)shell腳(jiao)本(ben)

例(li)如:vim hello.sh

兩種執行的方式(shi):

1.直(zhi)接執(zhi)行:bash hello.sh

2.給當前(qian)用戶(hu)或所有用戶(hu)加上可執行(xing)權限,再執行(xing):./hello.sh

 chmod u+x hello.sh //對當前(qian)用戶增(zeng)加執行權(quan)限

1.2 shell變量

1.2.1. 賦值(zhi):變量(liang)名(ming)=值(zhi)

(1) 變(bian)量(liang)不(bu)用定義,直接賦值(zhi)即可, 賦值(zhi)時,賦值(zhi)號前(qian)后(hou)不(bu)能有空(kong)格

(2) 賦值給變量的數據(ju)當字符串(chuan)處理

注意:shell里邊變量名(ming)提(ti)議用大(da)寫的

例(li)子:DATE=`date`

1.2.2. 取值(zhi)

$變量名或${變量名}

注意:取變量(liang)值(zhi)的時候(hou),需(xu)要給美金符號($)

1.2.3. 刪除變量值:unset 變量名

例(li)子(zi):unset DATE

 實(shi)例:給IFPO賦值(zhi)一(yi)個命(ming)令(ling), 然(ran)后echo輸(shu)出命(ming)令(ling)

1.3命(ming)令(ling)行參數變量(liang)

命令行:腳本啟動時,shell程序(xu)會自(zi)動賦值(zhi)(zhi),在(zai)腳本中可以(yi)直接取值(zhi)(zhi):

$0 腳本名

$1 - $9 腳本參數

$* 所有的命令行參(can)數

$# 命令(ling)行參數(shu)個數(shu)

$? 前一個命令的結果

$$ 當前shell腳本(ben)進程(cheng)ID

0 正(zheng)常(chang)退(tui)出(chu) //這里可以判斷一下ls -l +文件(jian)名存在的(de)時候,執行完之后的(de)結果(guo)

1 異常退出 //這(zhe)里可(ke)以(yi)判斷一下(xia)ls -l +文件名不存在的(de)時候,執(zhi)行完之后的(de)結果

同(tong)樣可以(yi)有參數(shu):

實例:

1.4系統(tong)環境變量

系(xi)統shell賦值的變(bian)量,shell腳本中可以直接(jie)使用:

$PATH 執行命令(ling)時,未(wei)指(zhi)(zhi)定(ding)命令(ling)的絕對路(lu)徑(jing),從此變(bian)量指(zhi)(zhi)定(ding)的路(lu)徑(jing)中搜索

$HOME 指定用(yong)戶主(zhu)目錄:/home/ubuntu

追加環境變量路(lu)徑:

導(dao)出環境變量:在(zai)子處調用父中變量

補充:注釋(shi):以(yi)#打頭的(de)行

1.5 read

用(yong)處:讀取一(yi)行用(yong)戶輸入

read VAR(定義變量)

echo $VAR(輸出變量值)

實例:

補充(chong):指定腳(jiao)本解析器(qi):#!/bin/bash

echo $SHELL:查看當前自己環(huan)境用的bash

1.6算術計算命令(ling)(expr.sh)

expr 數(shu)學表達(da)式(shi)

數學表達式中(zhong)支持的(de)運算符(fu):+, -, \* , /, %

注意(yi):乘法(因為*有特殊含(han)義(yi),需要(yao)轉義(yi))

實例:

注(zhu)意:運(yun)算符(fu)前后都有空格(ge),不加空格(ge),會把我們的(de)值理(li)解(jie)成字(zi)符(fu)串

等號(hao)前后不需要(yao)空格(ge)

補充:其他算法(fa)

(1)let

例(li)如:var=1

let "var+=1"

echo $var

注(zhu)意(yi):a)經(jing)測(ce)試let幾乎支持所有的運算(suan)符,在網上看到一(yi)篇文(wen)章說“let不支持++、--和(he)逗號(hao)、(、)”,但經(jing)測(ce)試自加、自減、以及括號(hao)的優先級都(dou)得到了很(hen)好(hao)的支持

b)方(fang)冪運算應使(shi)用“**”

c)參數(shu)在表(biao)達式(shi)中直(zhi)接(jie)訪問,不必(bi)加(jia)$

d)一般情況(kuang)下算數表達式可以不加(jia)雙(shuang)引(yin)號,但(dan)是若表達式中(zhong)有bash中(zhong)的(de)關(guan)鍵字(zi)則需加(jia)上(shang)

e)let后的(de)表(biao)達(da)式只能(neng)進行整數運算(suan)

(2)使用(())

var=1

((var+=1))

echo $var

輸出(chu)結果為2

注意:(())的使用(yong)方法與let完全相同

(3)使用(yong)$[]

var=1

var=$[$var+1]

echo $var

輸出結果位(wei)2

注意:a)$[]將中括號內的表達式(shi)作為數學運算先(xian)計算結果再輸(shu)出

b)對$[]中的變(bian)量(liang)進(jin)行訪問時前面需要加(jia)$

c)$[]支持(chi)的運算符與let相同,但(dan)也只支持(chi)整數運算

(4)使(shi)用expr

var=1

var=`expr $var + 1`

echo $var

輸(shu)出(chu)結果為2

注意:a)expr后的表達式個符號間(jian)需用(yong)空格隔開

b)expr支持的操作符有: |、&、<、<=、=、!=、>=、>、+、-、*、/、%

c)expr支持的操(cao)作符中所在(zai)使(shi)用(yong)時需用(yong)\進行轉義的有:|、&、<、<=、>=、>*

e)expr同樣只支持整數運算

1.7測試命令(ling)

test 表達(da)式(shi)

等價于:[ 表達式(shi) ]

注意: [ 后面一定要有(you)空格, ] 前(qian)面一定要有(you)空格

test命令(ling)沒有輸出, 只有程序退(tui)出狀態

表達(da)式(注意: 運算(suan)符(fu)合(he)操作數之(zhi)間有空(kong)格):

1. 字符串比較

str1 = str2 相(xiang)等(注意空格)

str1 != str2 不等

-z str 為空

-n str 不空

2. 整數比較(jiao)

a -eq b 相(xiang)等

-ne 不相(xiang)等

-ge 大于(yu)等于(yu)

-le 小于(yu)等于(yu)

-gt 大于

-lt 小于

3. 文件測試

-d file 目錄? (file即為要測試(shi)的文件(jian))

-e file 存在文件或目(mu)錄?

-f file 普通(tong)文件(jian)?

-r file 存在可讀?

-w file 存(cun)在(zai)可寫(xie)?

-x file 存(cun)在可執(zhi)行?

-s file 存在長度(du)不為0

f1 -nt f2 f1 比(bi) f2新(xin)?

f1 -ot f2 f1 比 f2舊?

4. 邏輯運算

a -a b 且

a -o b 或

注意;0表示真 1表示假

測試語句:echo $? //輸(shu)出(chu)上一次的返回結(jie)果

實例

 

1.8 if語(yu)句(ju)

1.8.1. if

語法

if [命令1] 相當(dang)于if()

then {

命(ming)令列表 語句

fi }

執行流程(cheng):(1) 執行 命令1

(2) 如(ru)果為(wei)真($? 為(wei) 0), 執行 命令(ling)列表

5.8.2 if ... else

語法

if 命令1

then

命令列表1

else

命令列表2

fi

執行流程(cheng):(1) 執行 命令1

(2) 如果為真($? 為 0), 執行命令列表1

如果為(wei)假, 執行命令列(lie)表2

1.8.3 if ...elif...elif...

語法

if 命令1

then

命令列表1

elif 命令2

then

命令列表2

else

命令列表*

fi

執行流程:(1) 執行 命令1

(2) 如果為真(zhen), 執行 命令列表1

(3) 如果為假, 執(zhi)行 命令2

(4) 如果為(wei)真(zhen), 執行 命(ming)令列表2

如果為(wei)假, 命令列表*

實例:

1.9 case語句

1.9.1語法

case 值(結果為字符串的表達式或變量) in

模式1)(類似于通(tong)配符)

命令

;;(類似于(yu)break)

模式2)

命令

...

;;

*)//默認模式

命令

...

;;

Esac

注意:模(mo)式(shi)可以包含 *, ?, [...]等文件名匹配模(mo)式(shi)(模(mo)式(shi)就是正則表達式(shi))

例(li)如:y | yes | Y | Yes)

實例:

 

1.10 while

1.10.1 語法

while [ 關系表達式 ]

do

命令列表

done

1.10.2 流(liu)程

(1) 執行(xing) [ 關系表達式(shi) ]

(2) 結(jie)果(guo)為真, 執行 命令列表后(hou),再執行(1)

假(jia) 結束(shu) while語句

實例:

1.11 continue

1.11.1語法

continue n

n 為整數

1.11.2 執行流程

結束(shu)n層的本次(ci)循環

實(shi)例:計算(suan)奇數和

 

1.12 for

1.12.1. 語法

for 變量 in 字符(fu)串列表(biao)

do

命令列表

done

注意:in 后面(mian)到列表省略,表示使用(yong)腳本參數(shu)做為字符串列表

1.12.2 執行(xing)流程

變量按順序取字符串列表(biao)中到值(zhi),每(mei)個值(zhi)執(zhi)行一次命令列表(biao)

實例:

 

1.13 break

1.13.1 語法

break n(n 為整(zheng)數)

1.13.2 執(zhi)行流程

結(jie)束n層(ceng)循環

實例:

 

1.14 函數

1.14.1 定(ding)義

function 函數名()

{

local 變量賦值

命令列表

...

return 值

}

注意:function 關(guan)鍵字可以沒有(you),但(dan)是(shi)函數名()必須有(you)

函(han)數(shu)可以用$0 - $9的變量(liang),從函(han)數(shu)外獲取值

return 命令(ling)可以返回值給$?變(bian)量

local申明的變量(liang)作用范圍為函數(shu)內部

2. 調用

OUT=`function_name 參數1 參數2`

function_name 參數1 參數2

定義在前,調用在后,且必須在同一(yi)個腳本中(zhong)

OUT變(bian)量可以獲(huo)取(qu)到函數的輸出

實例:

 

注(zhu)意:在文(wen)件系統(tong)中,禁止(zhi)將自(zi)己(ji)(ji)的目(mu)錄下(xia)的所有文(wen)件拷貝(bei)到(dao)自(zi)己(ji)(ji)目(mu)錄下(xia)的某個文(wen)件

上一篇:嵌入式學習筆記:linux軟件包安裝程序介紹

下一篇:嵌入式學習筆記:C高級函數快速學

熱點文章推薦
華清學員就業(ye)榜單
高薪學員經驗分(fen)享
熱點新聞推薦
前臺專線(xian):010-82525158 企(qi)業培(pei)訓洽(qia)談專(zhuan)線:010-82525379 院校合作(zuo)洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部