版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
第7講Shell程序設計Shell的含義Shell既是一種命令語言,又是一種程序設計語言作為命令語言,它交互式地解釋和執(zhí)行用戶輸入的命令作為程序設計語言,它定義了各種變量和參數(shù),并提供了在高級語言中才有的控制結(jié)構(gòu),如循環(huán)和分支。目前流行的Shellash:Linux中占用資源最少的一個小Shell,它只包含24個內(nèi)部命令bash:Linux系統(tǒng)默認的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設計依附亍BSD版zsh:是Linux最大的Shell之一,共包含84個內(nèi)部命令,若沒有特殊用途,沒有必要安裝。Bash的功能命令記憶能力,可多達上千個,上次登錄執(zhí)行過的命令記在~/.bash_history,本次在內(nèi)存命令補全功能,按[Tab]鍵shellscripts通配符:*,?Shell基本語法輸入輸出重定向“>”
輸出重定向到一個文件“>>”
輸出追加到一個文件“<”
輸入重定向管道“|”前臺與后臺前臺:command后臺:command&Shell常用命令bash命令解釋程序包含了一些內(nèi)部命令。內(nèi)部命令在目錄列表時是看不見的,它們由shell本身提供。1.echo命令格式:echoarg功能:在屏幕上打印出由arg指定的字符串。2.eval命令格式:evalargs功能:當shell程序執(zhí)行到eval語句時,shell讀入?yún)?shù)args,并將它們組合成一個新的命令,然后執(zhí)行。Shell常用命令3.exec命令格式:exec命令命令參數(shù)功能:當shell執(zhí)行到exec語句時,不去創(chuàng)建新的子進程,而是轉(zhuǎn)去執(zhí)行指定的命令,當指定的命令執(zhí)行完時,該進程,也就是最初的shell就終止了,所以shell程序中exec后面的語句將不再被執(zhí)行。4.export命令格式:export變量名或:export變量名=變量值功能:shell可以用export把它的變量向下帶入子shell從而讓子進程繼承父進程中的環(huán)境變量。但子shell不能用export把它的變量向上帶入父shell。注意:不帶任何變量名的export語句將顯示出當前所有的export變量。Shell常用命令5.readonly命令格式:readonly變量名功能:將一個用戶定義的shell變量標識為不可變的。不帶任何參數(shù)的readonly命令將顯示出所有只讀的shell變量。6.read命令格式:read變量名表功能:從標準輸入設備讀入一行,分解成若干字,賦值給shell程序內(nèi)部定義的變量。7.shift語句功能:shift語句按如下方式重新命名所有的位置參數(shù)變量:$2成為$1,$3成為$2……在程序中每使用一次shift語句,都使所有的位置參數(shù)依次向左移動一個位置,并使位置參數(shù)“$#”減一,直到減到0。Shell常用命令8.wait功能:是shell等待在后臺啟動的所有子進程結(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進行數(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:當前用戶主目錄。UID:用戶ID。MAIL:當前用戶的郵件存放目錄。SHELL:當前用戶用的是哪種Shell。HISTSIZE:保存歷史命令記錄的條數(shù)LOGNAME:當前用戶的登錄名。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特殊字符雙引號在字符串含有嵌入的空格時,用雙引號括起來。這是一個有關bash的例子:
var=”teststring”newvar=”Valueofvaris$var”echo$newvar執(zhí)行上面的三行shell程序,可得到如下的結(jié)果:./my1
Valueofvaristeststring單引號利用單引號把字符括起來,以阻止shell解析變量。把前面的雙引號改為單引號,執(zhí)行程序可得到如下的結(jié)果:./my11
Valueofvaris$var特殊字符
字符說明
$指出shell變量名的開始
|把標準輸出通過管道傳送到下個命令
#標記注釋開始
&在后臺執(zhí)行進程>輸出重定向操作符
<輸入重定向操作符
>>輸出重定向操作符{添加到文件}<<跟在輸入結(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當需要把執(zhí)行命令的結(jié)果存放在變量中時,就可以在shell程序中利用反引號。例如,要統(tǒng)計當前目錄下一個文件中test.txt有幾行并把結(jié)果存在叫做var的變量中:
var=`wc-ltest.txt`pdksh和bash環(huán)境見例子./my1111分支語句ifif語句
if語句通過判斷邏輯表達式來作出選擇,在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ù)目。設計一個Shell程序,讀入一個正整數(shù),如果是奇數(shù)顯示“odd”,如果是偶數(shù)顯示“even”。readxlety=$x/2*2if[$y–eq$x];thenecho“even”elseecho“odd”fi見例子./if測試文件f1是否存在,若存在刪除它,不存在建立文件f1
測試目錄/root/u1是否存在,若存在刪除它,不存在建立它Shell程序設計流程控制bash表達式的比較1.字符串比較
=比較兩個字符串是否相等
!=比較兩個字符串是否不相等
-n判斷字符長度是否大于零
-z判斷字符長度是否等于零bash表達式的比較2.數(shù)字比較
-eq比較兩個數(shù)是否相等
-ge比較一個數(shù)是否大于或是等于另一個數(shù)
-le比較一個數(shù)是否小于或是等于另一個數(shù)
-ne比較兩個數(shù)是否不等
-gt比較一個數(shù)是否大于另一個數(shù)
-lt比較一個數(shù)是否小于另一個數(shù)bash表達式的比較3.文件操作符
-d確定文件是否為目錄
-f確定文件是否為普通文件
-r確定是否對文件設置了讀許可。
-s確定文件名是否具有大于零的長度
-w確定文件是否設置了寫許可
-x確定文件是否設置了執(zhí)行許可bash表達式的比較4.邏輯操作符
邏輯操作符用來根據(jù)邏輯規(guī)則比較表達式。!,-a,-o字符表示NOT、AND和OR!求反(”非”)邏輯表達式
-a邏輯AND(”與”)兩個邏輯表達式
-o邏輯OR(”或”)兩個邏輯表達式循環(huán)語句for語句第一種格式如下:
forcurvarinlistdostatementsdone
對list中的每個值需要執(zhí)行一次statements時應利用這種格式。對每次循環(huán),把list中的當前值賦給變量curvar,list可以使含有幾個項的變量,或是用空格分隔的值表。For語句的這種格式是由pdksh和bash使用的。循環(huán)語句1.for語句假設需要把目錄中的每個文件在一個叫做backup的子目錄中建立備份,可以在bash
中執(zhí)行如下的程序:
mkdirbackup forfilein*.txtdocp$filebackup/$filedone
執(zhí)行后把當前目錄下的.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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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員工股權(quán)激勵計劃實施與股權(quán)轉(zhuǎn)讓合作協(xié)議書3篇
- 2024年智慧醫(yī)療設備研發(fā)與制造合作協(xié)議書3篇
- 2024年度預制構(gòu)件泥工勞務分包及安裝工程合同3篇
- 2024年度挖掘機械銷售與安裝調(diào)試合同范本3篇
- 2024年新型地板材料研發(fā)與應用維護合作協(xié)議6篇
- 2024年度灣沚區(qū)消防救援大隊滅火器采購與應急演練合同3篇
- 2024年度溫室生態(tài)農(nóng)業(yè)觀光園項目承包合同3篇
- 2024年度地產(chǎn)項目房屋拆除及土地平整服務合同3篇
- 2024年度置換買賣合同:藝術(shù)品與古董3篇
- 新疆警察學院《信息產(chǎn)業(yè)政策概論》2023-2024學年第一學期期末試卷
- GB/T 18329.2-2023滑動軸承多層金屬滑動軸承第2部分:合金厚度≥2 mm的結(jié)合強度破壞性試驗
- 如何正確看待成績主題班會課件
- 樂山英文介紹
- 遠洋漁船標準化船型參數(shù)系列表(2021年版)
- 外研社英語教材(一年級起點版)四年級上冊句型總結(jié)
- 工程量清單清單計價封面
- 壓濾機產(chǎn)品質(zhì)量檢測報告
- 科研課題立項評審評分參照標準
- 處方書寫規(guī)范課件培訓課件
- 景觀綠化工程監(jiān)理質(zhì)量評價報告
- 泰坦尼克號英文ppt
評論
0/150
提交評論