




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、linux shell腳本語(yǔ)言基礎(chǔ)知識(shí)一.shell簡(jiǎn)介L(zhǎng)inux系統(tǒng)的shell作為操作系統(tǒng)的外殼,為用戶提供使用操作系統(tǒng)的界面,更確切的說,shell是用戶及Linux操作系統(tǒng)溝通的橋梁。用戶既可以輸入命令執(zhí)行,又可以利用 Shell腳本編程,完成更加復(fù)雜的操作。shell是一個(gè)命令解釋器,它從輸入設(shè)備讀取命令,再將其轉(zhuǎn)為計(jì)算機(jī)可以了解的指令,然后執(zhí)行它。在linux中,shell又不僅是簡(jiǎn)單的命令解釋器,而且是一個(gè)全功能的編程環(huán)境。Linux的Shell種類眾多,常見的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/
2、bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh),等等。不同的Shell語(yǔ)言的語(yǔ)法有所不同,所以不能交換使用。每種Shell都有其特色之處,基本上,掌握其中任何一種就足夠了。通常用Bash,也就是Bourne Again Shell進(jìn)行編程。二.shell使用1.建立和運(yùn)行shell程序shell腳本程序:按照一定的語(yǔ)法結(jié)構(gòu)把若干linux命令組織在一起,是這些命令按照我們的要求完成一定的功能。它可以進(jìn)行類似程序的編寫,并且不需要編譯就能執(zhí)行。(只需修改其權(quán)限)像編寫高級(jí)語(yǔ)言的程序一樣,編寫sh
3、ell程序需要一個(gè)文本編輯器,如VI和VIM,通常使用VIM文本編輯器,支持更便利的插入模式。首先使用VIM編輯器編輯一個(gè)hello.sh文件:#!/bin/bash#hello world exampleecho "hello world"這樣,一個(gè)最簡(jiǎn)單的shell程序就編寫完了。第一行:#!說明hello.sh這個(gè)文件的類型的,這有點(diǎn)類似于Windows系統(tǒng)下的用不同的文件后綴來(lái)表示不同的文件類型,但又不完全相同。Linux系統(tǒng)根據(jù)#!及該字符串后面的信息確定該文件的類型。在#!之后是一個(gè)路徑名,這個(gè)路徑名指定了一個(gè)解釋腳本中命令的程序。第二行:“#hello wor
4、ld example”就是shell程序的注釋,(但后面緊接著“!”號(hào)的除外)第三行:echo(回顯)語(yǔ)句的功能是把echo后面的字符串輸出到標(biāo)準(zhǔn)輸出中?,F(xiàn)在,建立和寫好之后,那么該程序如何運(yùn)行呢?由于該腳本沒有執(zhí)行的權(quán)限,只需要修改其執(zhí)行的權(quán)限即可,執(zhí)行:chmod a+x hello.sh。然后輸入命令:./hello.sh即可看到效果。2.shell變量變量是一個(gè)存儲(chǔ)值的實(shí)體,可以是一個(gè)名字,或者一個(gè)特殊的值。shell可以創(chuàng)建,分配和刪除變量。(1)變量設(shè)置規(guī)則:a.變量及變量?jī)?nèi)容以等號(hào)(=)來(lái)連接b.等號(hào)兩邊不能直接接空格符c.變量名稱只能是英文字母及數(shù)字或下劃線,但是數(shù)字不能是開頭
5、符d.引用變量名用“$變量名”#!/bin/bash#hello world examplea="hello world"echo $a以上例子一樣可以輸出hello world。e.若有空格符可以使用雙引號(hào)或單引號(hào)將變量?jī)?nèi)容結(jié)合起來(lái),但必須注意,雙引號(hào)的特殊字符可以保有變量的特性,但是單引號(hào)內(nèi)的特殊字符則僅為一般字符。#name="$LOGNAME is hh" /root is hh#name='$LOGNAME is hh' /$LOGNAME is hhf.通常大寫字符為系統(tǒng)預(yù)設(shè)變量,自行設(shè)定的變量可以使用小寫字符(2)取消變量:
6、用unset 變量名#!/bin/bash#hello world 例子a="hello world"unset aecho $a以上例子將不會(huì)打印出任何東西。3.shell特殊變量$0 :執(zhí)行的腳本的文件名$1 :腳本文件的第一個(gè)參數(shù)名$# :傳遞到腳本的參數(shù)個(gè)數(shù)$* :以一個(gè)單字符串顯示所有向腳本傳遞的參數(shù)$ :腳本運(yùn)行的當(dāng)前進(jìn)程ID號(hào)$? :顯示最后命令的退出狀態(tài),0表示沒有錯(cuò)誤,其它值表示有錯(cuò)誤例子a.sh#!/bin/bashecho "the $0"echo "the parameter is $1 $2"echo &qu
7、ot;number of parameter is $#"echo "all parameter is $*"echo $?加權(quán)限后執(zhí)行./a.sh hh mm gg則打印the ./a.shthe parameter is hh mmnumber of parameter is 3all parameter is hh mm gg04.常用shell內(nèi)嵌命令(1)echo:顯示變量?jī)?nèi)容(2)env:顯示目前系統(tǒng)中主要的預(yù)設(shè)變量?jī)?nèi)容(3)set:顯示目前系統(tǒng)中全部的變量?jī)?nèi)容(4)read:從鍵盤讀入變量?jī)?nèi)容(5)declare:聲明變量?jī)?nèi)容-a:定義為數(shù)組 arr
8、ay-f:定義為函數(shù) function-i:定義為整數(shù) integer-r:定義為“只讀”-x:定義為透過環(huán)境輸出變量、例子:#!/bin/basha=1+1declare -i b=1+1echo $aecho $b執(zhí)行后輸出結(jié)果為 1+125.條件測(cè)試在寫shell腳本時(shí),經(jīng)常遇到的問題就是判斷字符串是否相等,可能還要檢查文件狀態(tài)或進(jìn)行數(shù)字測(cè)試,只有這些測(cè)試完成才能做下一步動(dòng)作。test命令就是用于測(cè)試字符串,文件狀態(tài)和數(shù)字的.test命令兩種格式:test condition或 condition 使用方括號(hào)時(shí),要注意在條件兩邊加上空格三.shell腳本編程基礎(chǔ)知識(shí)1.shell基本運(yùn)算
9、符(1)算術(shù)運(yùn)算符+:對(duì)兩個(gè)變量做加法。-:對(duì)兩個(gè)變量做減法。*:對(duì)兩個(gè)變量做乘法。/:對(duì)兩個(gè)變量做除法。*:對(duì)兩個(gè)變量做冪運(yùn)算。%:取模運(yùn)算,第一個(gè)變量除以第二個(gè)變量求余數(shù)。+=:加等于,在自身基礎(chǔ)上加第二個(gè)變量。-=:減等于,在第一個(gè)變量的基礎(chǔ)上減去第二個(gè)變量。*=:乘等于,在第一個(gè)變量的基礎(chǔ)上乘以第二個(gè)變量。/=:除等于,在第一個(gè)變量的基礎(chǔ)上除以第二個(gè)變量。%=:取模賦值,第一個(gè)變量對(duì)第二個(gè)變量取模運(yùn)算,再賦值給第一個(gè)變量在使用這些運(yùn)算符時(shí),需要注意到運(yùn)算順序的問題。例如輸入下面的命令,輸出1+2的結(jié)果。echo 1+2Shell并沒有輸出結(jié)果3,而是輸出了1+2。在shell中有三種方
10、法可以更改運(yùn)算順序。a、 用expr改變運(yùn)算順序??梢杂胑cho expr 1 + 2來(lái)輸出1+2的結(jié)果,用expr表 示后面的表達(dá)式為一個(gè)數(shù)學(xué)運(yùn)算。需要注意的是,并不是一個(gè)單引號(hào),而是“Tab”鍵上面的那個(gè)符號(hào)。b、用let指示數(shù)學(xué)運(yùn)算??梢韵葘⑦\(yùn)算的結(jié)果賦值給變量b,運(yùn)算命令是b=let 1 + 2。然后用echo $b來(lái)輸出b的值。如果沒有l(wèi)et,則會(huì)輸出1+2。c、用$表示數(shù)學(xué)運(yùn)算。將一個(gè)數(shù)學(xué)運(yùn)算寫到$符號(hào)的中括號(hào)中,中括號(hào)中的內(nèi)容將先進(jìn)行數(shù)學(xué)運(yùn)算(中括號(hào)中可以包含空格)。例如命令echo $1+2,將輸出結(jié)果3。(2)關(guān)系運(yùn)算符-eq:數(shù)值相等 -ne:數(shù)值不相等 -ge:數(shù)1大于等
11、于數(shù)2-lt:數(shù)1小于數(shù)2 -gt:數(shù)1大于數(shù)2 -le:數(shù)1小于等于數(shù)2輸入test 1 -lt 2 && echo "yes"則打印yes(3)布爾運(yùn)算-a:(and)兩狀況同時(shí)成立!test -r -x file,則file同時(shí)具有r和x權(quán)限時(shí),才為true。-o:(or)兩狀況任何一個(gè)成立!test -r -x file,則file具有r或x權(quán)限時(shí),就為true。?。合喾礌顟B(tài),test ! -r file,當(dāng)file不具有r權(quán)限時(shí),就為true。(4)字符串運(yùn)算符=:兩個(gè)字符串相等 !=:兩個(gè)字符串不相等-z:空串 -n:非空串輸入test &quo
12、t;a" = "a" && echo "yes"則打印yes(5)測(cè)試文件狀態(tài)的條件表達(dá)式:-e:是否存在 -d:是目錄 -f:是文件-L:符號(hào)連接 -s文件非空 -r:可讀-w:可寫 -x:可執(zhí)行2.shell條件語(yǔ)句(1)if.fi語(yǔ)句結(jié)構(gòu)if 條件1;then執(zhí)行程序fi例子:#!/bin/bashdeclare -i a=10declare -i b=20if $a = $b ;thenecho "a is equal to b"fiif $a != $b ;thenecho "a is n
13、ot equal to b"fi輸出結(jié)果為: a is not equal to b(2)if.else.fi語(yǔ)句結(jié)構(gòu)if 條件1;then執(zhí)行程序1else執(zhí)行程序2fi例子:#!/bin/bashdeclare -i aecho "input 1 or 2"read aif $a -eq 1 ;thenecho "1"elseecho "2"fi打印為 input 1 or 211(3)if.elif.else.fi語(yǔ)句結(jié)構(gòu)if 條件1;then執(zhí)行程序1elif條件2;then執(zhí)行程序2else執(zhí)行程序3fi例子:#!
14、/bin/bashdeclare -i a=10declare -i b=20if $a = $b ;thenecho "a is equal to b"elif $a -gt $b ;thenecho "a is greater than b"elseecho "a is less than b"fi輸出結(jié)果為: a is less than b(4)case.esac語(yǔ)句結(jié)構(gòu)case $變量名稱 in“第一個(gè)變量?jī)?nèi)容”)程序1“第二個(gè)變量?jī)?nèi)容”)程序2其它程序exit 1esac例子:#!/bin/bashecho "y
15、ou like"echo "1 is apple"echo "2 is orange"echo "input your choice"read acase $a in1)echo "you like apple"2)echo "you like orange"echo "you like nothing"exit 1esac執(zhí)行后結(jié)果為:you like1 is apple2 is orangeinput your choice1you like apple3.sh
16、ell循環(huán)類型(1)for循環(huán)循環(huán)操作項(xiàng)目清單。重復(fù)一組命令列表中的每個(gè)項(xiàng)目。語(yǔ)法一:for ( 初始值; 限制值; 執(zhí)行步階 )do程序done初始值:變量在循環(huán)中的起始值限制值:當(dāng)變量值在這個(gè)限制范圍內(nèi)時(shí),就繼續(xù)進(jìn)行循環(huán)執(zhí)行步階:每作一次循環(huán)時(shí),變量的變化量例子:#!/bin/bashdeclare -i ss=0for ( i=1; i<=100; i+ )dos=s+idoneecho "the sum is $s"輸出結(jié)果為: the sum is 5050語(yǔ)法二:for var in con1 con2 con3 ./var是一個(gè)變量do程序done第一次
17、循環(huán)時(shí),$var的內(nèi)容為con1第二次循環(huán)時(shí),$var的內(nèi)容為con2第三次循環(huán)時(shí),$var的內(nèi)容為con3例子:#!/bin/bashdeclare -a AA=(1 2 3 4 5 6 7 8 9 10)declare -i cfor i in 1 3 5 7 9doc=c+A$i;doneecho "the count is $c"輸出結(jié)果為: the count is 30(2)while循環(huán)while循環(huán),使您能夠重復(fù)執(zhí)行一組命令,直到某些條件發(fā)生。它通常用于當(dāng)你需要反復(fù)操縱的變量值。語(yǔ)法如下:while 條件 do程序done當(dāng)條件成立的時(shí)候進(jìn)入while循環(huán),
18、直到條件不成立時(shí)才退出循環(huán)例子:#!/bin/bashdeclare -i a=0while $a -lt 10 doecho $aa=a+1done這將產(chǎn)生以下結(jié)果:0123456789每一次執(zhí)行這個(gè)循環(huán),變量a進(jìn)行檢查,看該值是否小于10。如果a的值小于10,則輸出該值(3)until循環(huán)完美的情況下,你需要執(zhí)行的一組命令某個(gè)條件為真時(shí),while循環(huán)執(zhí)行。有時(shí)候,你需要執(zhí)行一組命令,直到某個(gè)條件為真。語(yǔ)法如下:until 命令do程序done這種方式及while循環(huán)恰恰相反,當(dāng)命令成立的時(shí)候退出循環(huán),否則繼續(xù)循環(huán)例子:#!/bin/bashdeclare -i a=0until $a -
19、gt 10 doecho $aa=a+1done這將產(chǎn)生以下結(jié)果:0123456789(4)select循環(huán)語(yǔ)法如下:select var in word1 word2 .do程序done例子:#!/bin/bashecho "what is this?"select i in tea cofee water apple orange nonedocase $i intea|cofee|water)echo "drink"apple|orange)echo "fruit"none)break*) echo "ERROR: I
20、nvalid selection"esacdone打印信息為:what is this?1) tea2) cofee3) water4) apple5) orange6) none#? 1drink#? 6四.shell數(shù)組shell數(shù)組的使用$ a=(123 34 3 5)$ echo $a / 默認(rèn)獲取第一個(gè)元素123$ echo $a1 / 通過下標(biāo)訪問34$ echo $a / 訪問整個(gè)數(shù)組 ,或者* 獲取整個(gè)數(shù)組123 34 3 5$ echo $#a / 獲取數(shù)組的長(zhǎng)度4$ echo $#a3 / 獲取字符串長(zhǎng)度1$ echo $a:1:2 / 切片方式獲取一部分?jǐn)?shù)組內(nèi)容
21、34 3$ echo $a:2 / 從第二個(gè)元素開始3 5$ echo $a:2 / 到第二個(gè)元素123 34應(yīng)用實(shí)例:#!/bin/bashdeclare -a a=(1 2 3 4 5 )for ( i=0; i<=4; i+ )doecho $aidone這將產(chǎn)生以下結(jié)果:12345五:shell函數(shù)使用函數(shù)來(lái)執(zhí)行重復(fù)性的任務(wù),是一個(gè)很好的方式來(lái)創(chuàng)建代碼的重用。代碼重用是現(xiàn)代面向?qū)ο缶幊痰脑瓌t的重要組成部分。1.創(chuàng)建函數(shù):聲明一個(gè)函數(shù)語(yǔ)法:function_name () list of commands函數(shù)名 function_name,這就是你將使用它從其他地方在你的腳本調(diào)用。函數(shù)名必須遵循括號(hào)內(nèi),后括號(hào)內(nèi)的命令的列表。例子:#!/bin/bash# Define your function hereHello () echo "Hello World"# Invoke your functionHello當(dāng)你想執(zhí)行上面的腳本,它會(huì)產(chǎn)生以下結(jié)果:Hello World2.參數(shù)傳遞給函數(shù):你可以定義一個(gè)函數(shù),它接受參數(shù),而調(diào)用這些函數(shù)。將這些參數(shù)代表$1,$2,依此類推。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 實(shí)驗(yàn)室風(fēng)險(xiǎn)控制措施的制定與實(shí)施考核試卷
- 農(nóng)產(chǎn)品加工企業(yè)質(zhì)量管理體系持續(xù)改進(jìn)計(jì)劃考核試卷
- 健身器材安全標(biāo)準(zhǔn)與噪音控制標(biāo)準(zhǔn)考核試卷
- 萬(wàn)用表設(shè)計(jì)與生產(chǎn)考核試卷
- 數(shù)字化制鞋業(yè)中的市場(chǎng)趨勢(shì)分析與預(yù)測(cè)模型考核試卷
- 復(fù)雜介質(zhì)的熒光光譜特性研究考核試卷
- 數(shù)字化印刷品設(shè)計(jì)中的跨領(lǐng)域知識(shí)整合研究考核試卷
- 化妝品市場(chǎng)細(xì)分趨勢(shì)考核試卷
- 化學(xué)纖維在體育器材改良中的應(yīng)用考核試卷
- 2025年中國(guó)PPC堵帽數(shù)據(jù)監(jiān)測(cè)報(bào)告
- 勞動(dòng)仲裁內(nèi)部培訓(xùn)
- 工廠注塑考試題及答案
- 2024年懷化麻陽(yáng)苗族自治縣招聘事業(yè)單位工作人員筆試真題
- 湖南省長(zhǎng)沙市望城區(qū)第二中學(xué)2024-2025學(xué)年高一下學(xué)期6月第三次月考政治試卷(含答案)
- 四川省甘孜州道孚一中學(xué)2025屆七下英語(yǔ)期末統(tǒng)考試題含答案
- 廣東省深圳市寶安區(qū)2023-2024學(xué)年四年級(jí)下學(xué)期數(shù)學(xué)期末試卷(含答案)
- 緬甸語(yǔ)教學(xué)與學(xué)習(xí)作業(yè)指導(dǎo)書
- 水表制造企業(yè)生產(chǎn)條件要求征求意見稿
- 機(jī)械原理課程設(shè)計(jì)-沖壓機(jī)構(gòu)及送料機(jī)構(gòu)設(shè)計(jì)說明書
- 人民網(wǎng)刪除稿件(帖文)申請(qǐng)登記表
- 服裝校服投標(biāo)書模板(精編版)
評(píng)論
0/150
提交評(píng)論