版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第7講Shell程序設(shè)計Shell的含義Shell既是一種命令語言,又是一種程序設(shè)計語言作為命令語言,它交互式地解釋和執(zhí)行用戶輸入的命令作為程序設(shè)計語言,它定義了各種變量和參數(shù),并提供了在高級語言中才有的控制結(jié)構(gòu),如循環(huán)和分支。目前流行的Shellash:Linux中占用資源最少的一個小Shell,它只包含24個內(nèi)部命令bash:Linux系統(tǒng)默認(rèn)的Shell,包含40個內(nèi)部命令,基于GNU架構(gòu)發(fā)展而來。ksh:與商業(yè)發(fā)行版的ksh兼容,包含42個內(nèi)部命令,由AT&TBelllab.發(fā)展而來,兼容于bashcsh:是Linux比較大的內(nèi)核,共包含52個內(nèi)部命令,BillJoy設(shè)計依附亍BSD版zsh:是Linux最大的Shell之一,共包含84個內(nèi)部命令,若沒有特殊用途,沒有必要安裝。Bash的功能命令記憶能力,可多達(dá)上千個,上次登錄執(zhí)行過的命令記在~/.bash_history,本次在內(nèi)存命令補全功能,按[Tab]鍵shellscripts通配符:*,?Shell基本語法輸入輸出重定向“>”
輸出重定向到一個文件“>>”
輸出追加到一個文件“<”
輸入重定向管道“|”前臺與后臺前臺:command后臺:command&Shell常用命令bash命令解釋程序包含了一些內(nèi)部命令。內(nèi)部命令在目錄列表時是看不見的,它們由shell本身提供。1.echo命令格式:echoarg功能:在屏幕上打印出由arg指定的字符串。2.eval命令格式:evalargs功能:當(dāng)shell程序執(zhí)行到eval語句時,shell讀入?yún)?shù)args,并將它們組合成一個新的命令,然后執(zhí)行。Shell常用命令3.exec命令格式:exec命令命令參數(shù)功能:當(dāng)shell執(zhí)行到exec語句時,不去創(chuàng)建新的子進(jìn)程,而是轉(zhuǎn)去執(zhí)行指定的命令,當(dāng)指定的命令執(zhí)行完時,該進(jìn)程,也就是最初的shell就終止了,所以shell程序中exec后面的語句將不再被執(zhí)行。4.export命令格式:export變量名或:export變量名=變量值功能:shell可以用export把它的變量向下帶入子shell從而讓子進(jìn)程繼承父進(jìn)程中的環(huán)境變量。但子shell不能用export把它的變量向上帶入父shell。注意:不帶任何變量名的export語句將顯示出當(dāng)前所有的export變量。Shell常用命令5.readonly命令格式:readonly變量名功能:將一個用戶定義的shell變量標(biāo)識為不可變的。不帶任何參數(shù)的readonly命令將顯示出所有只讀的shell變量。6.read命令格式:read變量名表功能:從標(biāo)準(zhǔn)輸入設(shè)備讀入一行,分解成若干字,賦值給shell程序內(nèi)部定義的變量。7.shift語句功能:shift語句按如下方式重新命名所有的位置參數(shù)變量:$2成為$1,$3成為$2……在程序中每使用一次shift語句,都使所有的位置參數(shù)依次向左移動一個位置,并使位置參數(shù)“$#”減一,直到減到0。Shell常用命令8.wait功能:是shell等待在后臺啟動的所有子進(jìn)程結(jié)束。Wait的返回值總是真。9.exit功能:退出shell程序。在exit之后可有選擇地指定一個數(shù)字作為返回狀態(tài)。10.“.”(點)命令格式:.Shell程序文件名功能:使shell讀入指定的shell程序文件并依次執(zhí)行文件中的所有語句。創(chuàng)建和執(zhí)行shell程序1.創(chuàng)建一個別名文件:(bash)示范文件myenv,內(nèi)容如下:
#!/bin/bashclear cal echohello!!!2.在Linux下可以用以下方法來執(zhí)行mynev. chmod命令:#chmod+xmynev3.執(zhí)行shell程序
命令行上:#./mynev說明:以#開始行表示注釋變量
3種類型:環(huán)境變量:系統(tǒng)提供,不用定義,可以修改內(nèi)部變量:系統(tǒng)提供,不用定義,不能修改用戶變量:定義,可以修改與其他語言的區(qū)別:非類型性質(zhì),也就是不必指定變量是數(shù)字或字符串等。用戶變量舉例例1:字符串變量賦值shell程序my1:
var=”string”newvar=”Valueofvaris$var”echo$newvar執(zhí)行shell程序my1,可得到如下的結(jié)果:
Valueofvarisstring例2:數(shù)值變量賦值shell程序mynu:
x=15 echo$x得到如下的結(jié)果:
15
變量賦值給變量賦值locunt=0訪問變量值lcount=$var例如要把var的值賦給變量lcountlcount=$var進(jìn)行數(shù)值運算:(把var的值加5賦給lcount)lcount=$(($var+5))或letlcount=$var+5或lcount=`expr$var+5`環(huán)境變量(注意:變量名大寫)echo$PATH指令ls完整文件名為:/bin/ls(這是絕對路徑),為什么我在任何目錄下輸入ls都可以顯示呢?這是因為環(huán)境變量PATH中的定義!例如[root@www~]#echo$PATH/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
記錄所有搜索路徑環(huán)境變量還有HOME、MAIL、SHELL
常見的環(huán)境變量PATH:決定了shell將到哪些目錄中尋找命令或程序。HOME:當(dāng)前用戶主目錄。UID:用戶ID。MAIL:當(dāng)前用戶的郵件存放目錄。SHELL:當(dāng)前用戶用的是哪種Shell。HISTSIZE:保存歷史命令記錄的條數(shù)LOGNAME:當(dāng)前用戶的登錄名。HOSTNAME:主機的名稱。內(nèi)部變量部分內(nèi)部變量及其作用變量作用
$#傳給shell程序的位置參數(shù)的數(shù)目
$?最后命令的完成碼或在shell程序內(nèi)所執(zhí)行的shell程序
$0shell程序的名稱
$*調(diào)用shell程序所傳送的全部變元的單字符串
my2的示范例子:echo“Numberofparametersis”$#echo“Shellreturncodeis”$?echo“Programnameis”$0echo“Parametersasasinglestringis”$*在bash中,如果從命令行中執(zhí)行my2如下:#./my2wangzhang將得到如下的結(jié)果:Numberofparametersis2Programnameismy2
Parametersasasinglestringiswangzhang特殊字符雙引號在字符串含有嵌入的空格時,用雙引號括起來。這是一個有關(guān)bash的例子:
var=”teststring”newvar=”Valueofvaris$var”echo$newvar執(zhí)行上面的三行shell程序,可得到如下的結(jié)果:./my1
Valueofvaristeststring單引號利用單引號把字符括起來,以阻止shell解析變量。把前面的雙引號改為單引號,執(zhí)行程序可得到如下的結(jié)果:./my11
Valueofvaris$var特殊字符
字符說明
$指出shell變量名的開始
|把標(biāo)準(zhǔn)輸出通過管道傳送到下個命令
#標(biāo)記注釋開始
&在后臺執(zhí)行進(jìn)程>輸出重定向操作符
<輸入重定向操作符
>>輸出重定向操作符{添加到文件}<<跟在輸入結(jié)束自符串后(HERE)操作符.filmname執(zhí)行(“源”)filename文件空格在兩個字之間的間隔符通配符字符說明?匹配一個字符*匹配一個或幾個字符
[]列出字符的范圍,例如[abcd]
[a-z]意指a到z的全部字符
[a,z]意指a或z字符特殊字符反斜杠
在某個字符前利用反斜杠可以阻止shell把后面的字符解釋為特殊字符。例如,把$test的值賦給變量var。輸入如下命令:
var=$test如下命令才把$test存放在var中:
var=\$test
見例子./my111反引號:通知shell執(zhí)行由反引號定義的字符串。
wc當(dāng)需要把執(zhí)行命令的結(jié)果存放在變量中時,就可以在shell程序中利用反引號。例如,要統(tǒng)計當(dāng)前目錄下一個文件中test.txt有幾行并把結(jié)果存在叫做var的變量中:
var=`wc-ltest.txt`pdksh和bash環(huán)境見例子./my1111分支語句ifif語句
if語句通過判斷邏輯表達(dá)式來作出選擇,在pdksh和bash中的條件語句有如下的格式:if[expression];thenstatementselif[expression];thenstatementselsestatementsfiif條件是可以嵌套的,
位置參數(shù)及if語句
下述是一個shell程序的my3,只帶了一個參數(shù)(名字),并在屏幕上顯示這個名字:
#Namedisplayprogramif[$#-eq0];thenecho“Namenotprovided”elseecho”Yournameis”$1 fi
在bash中,如果執(zhí)行mypgm1如下:
#./my3
將得到輸出:
Namenotprovided
但是,如果執(zhí)行mypgm1如下:
#./my3wang
則得到如下的輸出:
Yournameiswang
位置參數(shù)
如果把程序my4修改為:
#Namedisplayprogramif[$#-eq0];thenecho“Namenotprovided”elseecho”Yournameis$2” fi
在bash中,如果執(zhí)行mypgm1如下:
#./my4
將得到輸出:
Namenotprovided
但是,如果執(zhí)行mypgm1如下:
#./my4wangzhang
則得到如下的輸出:
Yournameiszhang
mypgm1還說明了shell編程的另一個方面,即內(nèi)部變量。在mypgm1中的變量$#是內(nèi)部變量,并提供傳給shell程序的位置參數(shù)的數(shù)目。設(shè)計一個Shell程序,讀入一個正整數(shù),如果是奇數(shù)顯示“odd”,如果是偶數(shù)顯示“even”。readxlety=$x/2*2if[$y–eq$x];thenecho“even”elseecho“odd”fi見例子./if測試文件f1是否存在,若存在刪除它,不存在建立文件f1
測試目錄/root/u1是否存在,若存在刪除它,不存在建立它Shell程序設(shè)計流程控制bash表達(dá)式的比較1.字符串比較
=比較兩個字符串是否相等
!=比較兩個字符串是否不相等
-n判斷字符長度是否大于零
-z判斷字符長度是否等于零bash表達(dá)式的比較2.?dāng)?shù)字比較
-eq比較兩個數(shù)是否相等
-ge比較一個數(shù)是否大于或是等于另一個數(shù)
-le比較一個數(shù)是否小于或是等于另一個數(shù)
-ne比較兩個數(shù)是否不等
-gt比較一個數(shù)是否大于另一個數(shù)
-lt比較一個數(shù)是否小于另一個數(shù)bash表達(dá)式的比較3.文件操作符
-d確定文件是否為目錄
-f確定文件是否為普通文件
-r確定是否對文件設(shè)置了讀許可。
-s確定文件名是否具有大于零的長度
-w確定文件是否設(shè)置了寫許可
-x確定文件是否設(shè)置了執(zhí)行許可bash表達(dá)式的比較4.邏輯操作符
邏輯操作符用來根據(jù)邏輯規(guī)則比較表達(dá)式。!,-a,-o字符表示NOT、AND和OR!求反(”非”)邏輯表達(dá)式
-a邏輯AND(”與”)兩個邏輯表達(dá)式
-o邏輯OR(”或”)兩個邏輯表達(dá)式循環(huán)語句for語句第一種格式如下:
forcurvarinlistdostatementsdone
對list中的每個值需要執(zhí)行一次statements時應(yīng)利用這種格式。對每次循環(huán),把list中的當(dāng)前值賦給變量curvar,list可以使含有幾個項的變量,或是用空格分隔的值表。For語句的這種格式是由pdksh和bash使用的。循環(huán)語句1.for語句假設(shè)需要把目錄中的每個文件在一個叫做backup的子目錄中建立備份,可以在bash
中執(zhí)行如下的程序:
mkdirbackup forfilein*.txtdocp$filebackup/$filedone
執(zhí)行后把當(dāng)前目錄下的.c為后綴的文件拷貝到子目錄backup下見例子./my5求前5個自然數(shù)之和見例子./my6循環(huán)語句while語句格式如下:
whileexpression
dostatementsdone
循環(huán)語句前
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 西門子杯S120培訓(xùn)
- 10 巴黎奧運-2025年中考英語新熱點時文閱讀
- 2024年山東省淄博市中考化學(xué)試題卷(含答案解析 ) +2023年中考化學(xué)及答案
- 天津市紅橋區(qū)2024-2025學(xué)年八年級上期中-生物試卷
- 2024年江蘇省淮安市中考語文試題卷(含答案解析)+2023年中考語文及答案
- 2024年聚合工藝?yán)碚摽荚?00題及答案
- 質(zhì)量管理體系過程方法和風(fēng)險思維專業(yè)解讀與應(yīng)用之34:9績效評價-9.1監(jiān)視、測量、分析和評價-9.1.3分析與評價(雷澤佳編制-2024B1)
- 關(guān)于城鎮(zhèn)道路工程與質(zhì)量驗收規(guī)范及新增改表格
- Windows Server網(wǎng)絡(luò)管理項目教程(Windows Server 2022)(微課版)8.5 拓展案例1 RDS的RemoteApp功能
- 心理健康教案
- Q/GDW.-電力用戶用電信息采集系統(tǒng)通信協(xié)議:主站與采集終端通信協(xié)議
- IMD絲網(wǎng)油墨及其應(yīng)用技術(shù)
- 一一間隔排列PPT(公開課)
- (完整版)維保應(yīng)急預(yù)案
- 一層框架施工方案
- 工程變更申請單ECR
- 彩鋼瓦檢驗批DOC
- 贊美詩歌400首全集
- 智能垃圾桶項目
- 安徽華電六安電廠有限公司份運行分析報告報告
- 室內(nèi)照明設(shè)計課件PPT
評論
0/150
提交評論