版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第四章SHELL主要內(nèi)容Shell的作用Shell程序的編輯和運行基于Bash的Shell程序設(shè)計變量聲明表達式條件判斷控制結(jié)構(gòu)參數(shù)訪問Shell的作用shell是用戶和系統(tǒng)內(nèi)核之間的接口程序shell是命令解釋器在本章中,shell指linux的終端
即解釋用戶命令和shell程序的文字終端硬件shell操作系統(tǒng)圖形界面其它用戶界面用戶3linux下的shell用戶使用shell的設(shè)定通過查看/etc/passwd文件可以查看用戶使用的shell類型例子:/etc/passwd部分節(jié)選
webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin
xfs:x:43:43:XFontServer:/etc/X11/fs:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
gdm:x:42:42::/var/gdm:/sbin/nologin
htt:x:100:101:IIIMFHtt:/usr/lib/im:/sbin/nologin
tom:x:500:500:tom:/home/tom:/bin/bash#可見,tom用戶使用的shell為bash4linux下的shelllinux下的shell通過cat/ect/shells命令查看安裝的shellshell及路徑查看shell的命令5shell程序Shell程序的特點及用途:shell程序可以認為是將shell命令按照控制結(jié)構(gòu)組織到一個文本文件中,批量的交給shell去執(zhí)行不同的shell解釋器使用不同的shell命令語法shell程序解釋執(zhí)行,不生成可以執(zhí)行的二進制文件可以幫助用戶完成特定的任務(wù),提高使用、維護系統(tǒng)的效率了解shell程序可以更好的配置和使用linux
6登陸后進入用戶指定的shell(1)修改/etc/passwd文件(2)使用chsh修改登陸后的shell臨時改變正在使用的shell基于bash的shell程序greeting.sh
echo"ProgrammeEnds."12say_hello11echo"ProgrammeStartsHere....."10}9echo"Hello$name"8readname7echo"EnterYourName,Please.:"6{5functionsay_hello()4#aFunction3#aSimpleshellScriptExample2#!/bin/bash1解釋輸出提示,提示程序結(jié)束調(diào)用函數(shù)程序開始的第一條命令,輸出提示信息函數(shù)結(jié)束輸出讀入用戶的輸入到變量nameecho命令輸出字符串函數(shù)開始以functin
開始,定義函數(shù)同上以#開始,其后為程序注釋以#!開始,其后為使用的shell8基于bash的shell程序程序編譯和運行過程一般步驟:編輯文件保存文件將文件賦予可以執(zhí)行的權(quán)限運行及排錯常用到的命令:vi,編輯、保存文件ls-l查看文件權(quán)限chmod
改變程序執(zhí)行權(quán)限直接鍵入文件名運行文件shell程序的編輯和執(zhí)行查看權(quán)限查看權(quán)限,初始狀態(tài)無執(zhí)行(x)權(quán)限增加可執(zhí)行(x)的權(quán)限查看權(quán)限,已經(jīng)具備執(zhí)行(x)權(quán)限運行程序程序運行過程輸出shell程序設(shè)計一般結(jié)構(gòu)shell類型函數(shù)主過程#!/bin/bashfunctionfun1(){}......funciton
funn(){}.................函數(shù)定義shell類型主過程變量的聲明和使用變量的聲明和使用變量是弱類型的聲明變量不用聲明類型可以存儲不同類型的內(nèi)容使用靈活使用時要明確變量的類型大小寫區(qū)分變量聲明及賦值格式格式:
變量=值 (注意:等號兩側(cè)不能有空格)例如:
a=”hello”
b=9變量的聲明和使用變量的引用格式:
$變量名,或者${變量名}
變量名為一個字符用方式一,變量名多于一個字符建議用第2種方式例子:
a=1
abc="hello"
echo$a
echo${abc}常用的運算符整數(shù)的算術(shù)運算符+、-、*、/、%;賦值運算符+=、-=、*=、/=、%=位運算符<<、>>、&、|、~、^;位運算賦值運算符<<=、>>=、&=、|=、~=、^=;邏輯運算符:&&,||,!,>,>=,<,<=,!=,==簡單數(shù)學(xué)表達式expr命令計算一個表達式的值格式:expr
argExpr3+2例子:計算(2+3)×4的值
1、分步計算,即先計算2+3,再對其和乘4
s=`expr2+3`
expr$s\*4
2、一步完成計算:
expr`expr2+3`\*4
說明:運算符號和參數(shù)之間要有空格分開;通配符號(*),在作為乘法運算符時要用\、“”、‘’符號修飾`是ESC鍵下面的符號,不是單引號簡單數(shù)學(xué)表達式let命令格式:letarg1[arg2......]例子:計算(2+3)×4的值
lets=(2+3)*4說明:與expr命令相比,let命令更簡潔直觀當運算符中有<、>、&、|等符號時,同樣需要用引號(單引號、雙引號)或者斜杠來修飾運算符命令文件Shell程序可以直接從終端上鍵入,如:$who|wc-l也可以先把程序鍵入一個文件,然后由shell執(zhí)行該文件應(yīng)用示例:建立文件nu,通過執(zhí)行該文件完成以上命令的功能要以這種方式執(zhí)行程序,需要有執(zhí)行權(quán)限,可以利用chmod命令完成:chmod+xnu執(zhí)行:./nu變量與所有的編程語言一樣,shell也允許把值存在變量中,shell變量名以字母或下劃線字符開始,由字母、數(shù)字或下劃線組成要把值存入變量,只要寫出變量名,或緊跟一個=,再加變量值即可例如:variable=valuecount=1可以利用echo命令查看變量值例如:echo$variableechocount環(huán)境變量環(huán)境變量是一種特殊的變量,其特點為:它們可以由其他程序傳遞給腳本在腳本中被調(diào)用的任何程序都將繼承環(huán)境變量可以像定義一個變量一樣來設(shè)置環(huán)境變量,在標記它為環(huán)境變量時需要使用“export”命令應(yīng)用示例:$exportMYENV=1 $echo$MYENV使用“set”命令可以獲取當前上下文中全部的變量
特殊變量bash中存在著一些擁有特殊用途的變量,我們稱這種變量為特殊變量。其中一些變量可以讓用戶初始化,并讓bash按照特殊的方式運行;還有一些變量雖然對bash沒有什么特殊的含義,但是對系統(tǒng)程序很重要。例如:PATH變量是Linux系統(tǒng)中執(zhí)行命令時所搜索的路徑,它是由系統(tǒng)初始化的。一般它的值為:/bin:/sbin:/usr/bin:/usr/sbin。最常用的是位置變量,用來存儲bash腳本程序名后面的參數(shù)。Linux系統(tǒng)中的啟動腳本和關(guān)閉腳本使用了大量的參數(shù)。其中第一個參數(shù)保存在變量1中,可利用$1引用,第二個參數(shù)存儲在變量2中,可利用$2引用,以此類推。
bash中的引號在bash編程中,引號的使用十分靈活。不同種類的引號具有不同的含義。bash把單引號、雙引號和反斜杠(\)都用作轉(zhuǎn)意字符。在這3種符號中,單引號的功能最強。用單引號將一個字符串括起來可以屏蔽其中所有的特殊字符。例如:如希望把$1中的$當作貨幣符號賦給變量tax,應(yīng)采用如下形式的語句:$
tax=‘$1’bash中的引號(二)Linux雙引號的作用與單引號差不多,區(qū)別在于雙引號沒有那么嚴格,單引號忽略所有特殊字符,雙引號只忽略大多數(shù),不忽略以下三種符號:美元符號反引號反斜杠(\)反斜杠一次只能讓單個字符轉(zhuǎn)義,不能操作整個字符串。它的屏蔽能力與單引號相當。下面的例子中:$string=all\right反斜杠可以讓bash忽略all后的空格,這樣string接收到的將是一個單詞allright。命令替換命令替換是指shell將一個命令的標準輸出插在一個命令行中任何位置的功能,有兩種命令替換方法:反引號`command`$(command)結(jié)構(gòu)應(yīng)用示例:$echothedateandtimeis:`date`$echoYouareworkingin`pwd`
參數(shù)傳遞通過參數(shù)傳遞shell程序可以從命令行接收參數(shù),用途更加強大。下面介紹三種與參數(shù)傳遞有關(guān)的變量位置參數(shù)($1、$2…)Shell程序執(zhí)行時自動把第一個參數(shù)放在一個特殊的變量1中,以此類推,2,3…等參數(shù)放在變量2、3…中應(yīng)用示例:編輯ison文件內(nèi)容如下:who|grep$1執(zhí)行:$chmod+xison
$./ison
bcshell將用bc代替$1,命令行變?yōu)椋簑ho|grep
bc
參數(shù)傳遞(二)$#變量用于存放命令行中所鍵入的參數(shù)個數(shù)shell程序測試這個變量確定用戶輸入的參數(shù)個數(shù)是否正確應(yīng)用示例:編輯args文件內(nèi)容如下:echo$#
argumentspassedechoarg1=:$1:arg2=:$2:arg3=:$3:
執(zhí)行:$argsabc$argsab$args
從這個例子可以看到shell程序?qū)⒚钚械膮?shù)個數(shù)傳遞給了$#變量參數(shù)傳遞(三)$*變量可以引用傳遞給程序的所有參數(shù)經(jīng)常應(yīng)用在參數(shù)不確定或者參數(shù)數(shù)目可變的程序中應(yīng)用示例:編輯args2文件內(nèi)容如下:echo$#argumentspassedechotheyare$*
執(zhí)行:$chmod+xargs2 $arg2abc $arg2ab$arg2
shift命令shift命令的作用是把位置參數(shù)左移原來在$2中的內(nèi)容賦給$1,$3中內(nèi)容賦給$2,依此類推。原來$1中的值就丟失了。$#(參數(shù)變量的個數(shù))也自動減1
shift命令(二)編輯shiftdemo程序如下:echo$#$*
shiftecho$#$*shiftecho$#$*
shiftecho$#$*
執(zhí)行:chmod+xshiftdemo ./shiftabc退出狀態(tài)與$?變量 每當程序執(zhí)行完成后都會給系統(tǒng)返回一個退出狀態(tài)。該狀態(tài)是個數(shù)值,通常指示該命令運行是否成功。退出狀態(tài)為0表示運行成功,非零表示運行失敗。Shell自動將最后所執(zhí)行命令的退出狀態(tài)設(shè)置到shell變量$?中,可以用echo命令在終端上顯示它的值應(yīng)用示例:$who|grep
bc
$echo$? $who|grep123$echo$?
判斷條件判斷語句是幾乎所有編程語言中都有的語句,shell中有兩種條件判斷語句:if表達式case表達式
if表達式一般結(jié)構(gòu)
ifconmmand1thenelifcommand2thenelseFi
這個if…then…else表達式中的else和elif是可選部分。其中elif是elseif得縮寫,在if…then…else表達式中這樣的elseif語句可以有多個。其中fi表示if…then…else表達式的結(jié)束。Bash支持此類表達式的多層嵌套。 其中command1需要執(zhí)行并檢測其退出狀態(tài),如果退出狀態(tài)為0,則執(zhí)行其后then與elif之間的語句,同理執(zhí)行并檢測command2的退出狀態(tài),并根據(jù)退出狀態(tài)是否為0選擇執(zhí)行elif與else之間或else與fi之間的語句test命令shell有一條內(nèi)部命令test,經(jīng)常用來在if命令中測試一種或幾種條件,其一般格式為:testexpression其中expression表示要測試的條件。test計算expression,若結(jié)果為真,其返回的退出狀態(tài)為0,若結(jié)果為假,返回的退出狀態(tài)就不為零應(yīng)用示例:$name=bc $test“$name”=bc
$echo$?※注意:test把所有操作數(shù)($name和bc)和操作符作為單獨的參數(shù)分別對待,也就是說它們之間至少要有一個空白字符分隔
test命令(二)test命令的另一種格式shell程序使用test命令非常頻繁,因此產(chǎn)生了另一種公認的命令格式:[expression]“[”實際上就是命令的名字,同時要求在表達式的有一個配對的“]”,在“[“之后和”]”之前都要有空格應(yīng)用示例:$name=bc $[“$name”=bc]
$echo$?
test命令(三)整數(shù)操作符test命令還有一類進行整數(shù)比較的操作符,見右表:例如:操作符“-eq”檢測兩個整數(shù)是否相等,如果有一個變量名為count,想看看它的值是否為0,則可以寫成:[“$count”–eq0]操作符返回真(退出狀態(tài)為0)的條件int1–eqint2int1等于int2int1–geint2
int1大于或等于int2int1–gtint2int1大于int2int1–leint2
int1小于或等于int2int1–ltint2int1小于int2int1–neint2int1不等于int2test命令(四)文件操作符test提供了一類問詢文件狀態(tài)的一元操作符,見右表:例如:[-f/etc/fstab]檢測fstab文件是否存在且是否為普通文件
if結(jié)構(gòu)應(yīng)用示例使用if…then…else結(jié)構(gòu)編寫一個判斷命令行所傳入?yún)?shù)大小的程序?qū)⑺斎霐?shù)值存放在位置參數(shù)$1中若$1>100,則輸出:thenumberisgreaterthan100若$1<10,則輸出:thenumberissmallerthan10否則輸出:thenumberisbetween10and100
if表達式應(yīng)用示例(二)編輯ifdemo程序如下if["$1"-gt100]thenecho"thenumberisgreaterthan100."elif["$1"-lt10]thenecho"thenumberissmallerthan10."elseecho"thenumberisbetween10and100."fi執(zhí)行$chmod+xifdemo$./ifdemo100…輸入數(shù)據(jù)測試程序功能
case表達式case表達式類似于C語言中的case語句和switch語句,即從幾種情況中選擇一種執(zhí)行。一般結(jié)構(gòu)casestringinstring1)…;;string2)…;;*)…;;
esaccase表達式(二)關(guān)鍵字是case、in、雙分號和esac。字符串string首先與string1和string2比較,如果匹配就執(zhí)行它們下面的語句直到雙分號。如果字符串string與列出的字符串都不匹配,則執(zhí)行*)下面的語句
case表達式(三)應(yīng)用示例:編寫一個實現(xiàn)中英文數(shù)字轉(zhuǎn)換的程序,編輯casedemo程序如下:if["$#"-ne1]thenecho"usage:./casedemonumber"exit1ficase"$1"in0)echozero;;1)echoone;;2)echotwo;;………………8)echoeight;;9)echonine;;esac
調(diào)試程序用的-x選項可以通過鍵入sh–x后跟程序名及其參數(shù)跟蹤程序的執(zhí)行,在這種模式下執(zhí)行每條命令時都在終端上將命令顯示出來,前面加個加號執(zhí)行:$sh–xcasedemo1將會在終端上看到:+'['1-ne1']‘+case"$1"in+echooneone
循環(huán)shell中提供了可供靈活處理循環(huán)的語句,這些循環(huán)可以重復(fù)執(zhí)行一組命令,既可以是事先指定的次數(shù),也可以是直到某種條件滿足為止。shell中有三個內(nèi)部循環(huán)命令:forwhile{…}until
for命令for命令用來將一組命令循環(huán)執(zhí)行預(yù)先確定的次數(shù)基本格式:forvarinword1word2…wordndo command
done應(yīng)用示例:
$foriin123>do>echo$i>done可以看到終端上依次輸出1、2、3
不帶列表的for命令for命令也可以寫成以下形式:forvardo commanddoneshell也能認出這種少了in的特殊格式,shell會自動將命令行鍵入的所有參數(shù)依次組織成列表。應(yīng)用示例:
編輯fordemo文件內(nèi)容如下: echoNumberofargumentspassedis$# forargdoecho$argdone執(zhí)行:$chmod+xfordemo
$./fordemoabc
while命令第二種循環(huán)命令是while,格式為:whilecommand1do commanddone先執(zhí)行command1,并檢測其退出狀態(tài),如果為0則執(zhí)行do與done之間命令,再次檢測直到command1退出狀態(tài)不為0如果第一次執(zhí)行command1時退出狀態(tài)就不為0,那么do和done之間的命令可能根本不執(zhí)行while命令應(yīng)用示例(一)編輯whiledemo1程序如下: i=1 while[“$i”-le5] do echo$i i=$((i+1)) done 執(zhí)行:$chmod+xwhiledemo1
$./whiledemo1將變量i作為計數(shù)變量,初值設(shè)為1
while命令應(yīng)用示例(二)while循環(huán)通常跟shift命令結(jié)合使用,以處理命令行中鍵入的參數(shù)個數(shù)可變的情況編寫whiledemo2程序如下:
while[“$#”-ne0]do echo“$1” shiftdone執(zhí)行:$chmod+xwhiledemo2 $./whiledemo2abcshift命令使位置變量向下移($2到$1,$3到$2),并且$#遞減。until命令until命令跟while很像,區(qū)別在于只要在until后面的命令退出狀態(tài)不為0,循環(huán)就一直執(zhí)行下去,其格式為: untilcommand1 do command done跟while命令一樣,如果第一次執(zhí)行command1時返回的退出狀態(tài)為0,do和done之間的命令可能跟本不會執(zhí)行。
until命令示例程序編輯untildemo程序如下:if["$#"-ne1]thenecho"Usage:untildemouser"exit1fiuntilwho|grep"$1">/dev/nulldosleep10doneecho"$1hasloggedon"執(zhí)行:$chmod+xuntildemo $./untildemo
bc $./
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024展廳展示合同范本:創(chuàng)意市集臨時展廳設(shè)計與搭建正規(guī)范本3篇
- 管理課程培訓(xùn)課程設(shè)計
- 2024年只分紅不占股的文化產(chǎn)業(yè)合作協(xié)議3篇
- 2024年意外醫(yī)療進口器材技術(shù)交流與合作合同2篇
- 2024年版協(xié)議履行與擔保權(quán)益明確協(xié)議版B版
- 2024年糧食物流運輸服務(wù)協(xié)議規(guī)范版版B版
- 工程圖學(xué)c課程設(shè)計
- 2024年度國際貨物安全運輸合同-第二節(jié)安全防護措施與應(yīng)急預(yù)案3篇
- 2024年法定離婚合同指導(dǎo)版B版
- 2024年標準抵押房產(chǎn)買賣合同范本3篇
- 激光切割機市場需求與消費特點分析
- SWOT-CLPV理論(常用理論)
- JT∕T 860.1-2013 瀝青混合料改性添加劑 第1部分:抗車轍劑
- 2024年陜西省中考數(shù)學(xué)試題含解析
- 湖南省部分地區(qū) 下學(xué)期高二語文期末試題匯編:非文學(xué)類文本閱讀
- 敦煌的藝術(shù)智慧樹知到期末考試答案章節(jié)答案2024年北京大學(xué)
- 礦山企業(yè)風險管控與隱患排查治理雙重預(yù)防責任制度(雙重預(yù)防制度)
- DB42-T 2219-2024 建筑施工企業(yè)從業(yè)人員安全培訓(xùn)標準
- 福建省龍巖市2023-2024學(xué)年高一1月期末生物試題
- 2024年巴西玩具市場機會及渠道調(diào)研報告
- 2024廚具采購合同
評論
0/150
提交評論