版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Shell 編程基礎(chǔ)(補(bǔ)充),如何建立和執(zhí)行Shell 腳本 理解Shell 變量特性 掌握Shell 變量賦值方式 介紹shell 編程中常用的命令和控制命令,6.4.1 Shell 腳本,Shell 程序是包含一個(gè)或多個(gè)Shell 命令的集合。 Shell 程序通常放在文件中,稱為Shell 腳本。 建立Shell 腳本文件同建立普通文件的方式一樣,可以用vi 來(lái)建立。 Shell 程序由Shell 解釋執(zhí)行,方式簡(jiǎn)單。 優(yōu)點(diǎn): 確定步驟一次完成目標(biāo) 不用重復(fù)鍵入一系列命令 簡(jiǎn)化自己和其他用戶的操作,6.4.1 Shell 腳本(續(xù)),三種 Shell 文件執(zhí)行方式: (1) chmod命
2、令(把文件的權(quán)限改成可讀、可執(zhí)行) $ chmod +x 腳本文件名 (或chmod 755 腳本文件名) $ 腳本文件名及其參數(shù) (2) 直接使用Shell命令來(lái)執(zhí)行 $ sh 腳本文件名及其參數(shù) (3) 使用bash內(nèi)部命令“source”或“.” $ source 腳本文件名及其參數(shù) $ . 腳本文件名及其參數(shù),6.4.1 Shell 腳本(例),$ cat hello #Filename:hello (#后的字符串為注解) echoHelloworld! 第一種:將hello這個(gè)文件的權(quán)限設(shè)定為可執(zhí)行。 $ chmod 755 hello 或 chmod u+x hello $./he
3、llo helloworld!,6.4.1 Shell 腳本(例),第二種:直接使用sh命令來(lái)執(zhí)行。 $ shhello 或 $ bashhello helloworld! helloworld! 第三種:使用bash內(nèi)部命令“source”或“.” $sourcehello 或 $. hello helloworld helloworld,6.4.2 Shell 變量,用戶自定義變量 位置變量 環(huán)境變量 預(yù)定義的特殊變量,用戶自定義變量,在Shell腳本程序內(nèi)部定義的Shell變量(臨時(shí)變量),隨著腳本程序的執(zhí)行完畢而自動(dòng)消失。 臨時(shí)變量包括用戶定義的變量和位置參數(shù)。 Shell變量沒(méi)有數(shù)據(jù)
4、類型限制,也不需要在賦值前定義。,用戶自定義變量(續(xù)),用戶自定義變量: 變量命名 以字母或下劃線開頭,包括字母、數(shù)字、和下劃線。 變量賦值變量名=變量值 (等號(hào)前后不可有空格)例:a=“beijing”(可以使用read 命令來(lái)從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),并賦值給變量,還可由命令替換的輸出來(lái)賦值。) 變量引用在變量名之前加 $ ,表示變量的值.例: echo $a (顯示變量a的值),位置變量,出現(xiàn)在命令行上的位置確定的參數(shù)稱為位置參數(shù)。 $ 命令 參數(shù)1 參數(shù)2 參數(shù)3 當(dāng)Shell解釋一個(gè)命令時(shí),它將變量與命令行中的每一項(xiàng)關(guān)聯(lián),關(guān)聯(lián)的變量稱為位置變量,它們是: 0,1,2,9。這10個(gè)位置變量對(duì)
5、應(yīng)命令行上各項(xiàng)的位置,命令名(或Shell腳本名)是0,命令的第一個(gè)參數(shù)是1,依次類推。 當(dāng)命令行上的參數(shù)多于9個(gè)時(shí),需要用shift命令移動(dòng)位置變量,每執(zhí)行一次shift命令,變量0不變,從1開始位置變量左移一位,即把2,3,4 9 的值分別賦值給1,2,3 9。,預(yù)定義的特殊變量,這類變量具有特殊的含義,它們的值由Shell 根據(jù)實(shí)際情況來(lái)設(shè)置, 用戶不能重新設(shè)置。 $#實(shí)際位置參數(shù)個(gè)數(shù)(不包括Shell腳本名), 通常在 程序中用來(lái)檢查執(zhí)行時(shí)帶入的參數(shù)個(gè)數(shù)是否正確 $* 命令行中的所有位置參數(shù)的字符串 $ 與$* 相似,但值不同. 例如:對(duì)于位置參數(shù)F1 F2 F3 “$*”表示“F1
6、F2 F3”而“$”表示“F1” “F2” “F3” $? 表示最后一條命令執(zhí)行后的退出狀態(tài)(返回值), 為十進(jìn)制數(shù)。一般命令的執(zhí)行成功返回值為0。,例1,$ cat sh_prg echo $# echo $* echo $1 $2 $3 shift 2 echo $# echo $* echo $1 $2 $3,$ sh_prg A B C D 4 A B C D A B C 2 C D C D (這時(shí)的$3為空值),例子,$ cat safrm1 #copy file to directory /tmp and then #remove it form the current direc
7、tory #first copy 1 to /tmp cp $1 /tmp #now remove the file rm $1 $ safrm1 abc def 程序中只用了$1,因此只有abc一個(gè) 文件被刪除。,$ cat safrm2 cp $* /tmp #now remove the file rm $* $ safrm2 abc def xx guio 程序中用了$*,表示命令行 中的所有位置參數(shù),因此四 個(gè)文件都被刪除。,read 命令,功能:從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù) 格式:read 變量1 變量2 說(shuō)明:多個(gè)數(shù)據(jù)或變量時(shí)用空格分隔 若變量個(gè)數(shù)與數(shù)據(jù)個(gè)數(shù)相等,則對(duì)應(yīng)賦值。 若變量個(gè)數(shù)大
8、于輸入數(shù)據(jù)個(gè)數(shù),則沒(méi)有輸入數(shù)據(jù)的變量取空值。 若變量個(gè)數(shù)小于輸入數(shù)據(jù)個(gè)數(shù),則多余的數(shù)據(jù)賦給最后一個(gè)變量。,read 命令(例),$ cat getname echo “ Enter your First Middle Last name: ” read f m l echo $m $l $f $ getname Enter your First Middle Last name: Ou yang Guang zhong (多余的數(shù)據(jù)賦給最后一個(gè)變量) yang Guang zhong Ou $ getname Enter your First Middle Last name: “Ou yan
9、g” guang zhong ( 輸入的數(shù)據(jù)中含有空格時(shí)要用引號(hào)括起來(lái)) Guang zhong Ou yang,Shell 編程中的控制命令,控制命令有: if、case 、for 、while、until,test 命令,功能:測(cè)試表達(dá)式 格式:test 表達(dá)式 或 表達(dá)式 (后,前要有空格) 表達(dá)式的選項(xiàng)和意義如下: 關(guān)于字符串的測(cè)試:,test 命令(續(xù)),關(guān)于文件屬性的測(cè)試:,test 命令(續(xù)),關(guān)于數(shù)值的測(cè)試:,test 命令(續(xù)),測(cè)試命令可以由單個(gè)測(cè)試條件構(gòu)成,也可以由多個(gè)測(cè)試條件構(gòu)成,用邏輯操作符號(hào)連接起來(lái)。 test命令是Shell編程中條件判斷最常用的測(cè)試命令,它一般總
10、是與if、while、until等語(yǔ)句一起使用。,test 命令(例),測(cè)試:10 = x = 50 test $x -ge 10 -a $x -le 50 測(cè)試:變量user值為zhou或chen test $user = zhou -o $user = chen 測(cè)試:變量file可讀普通文件 test -r $file -a -f $file 測(cè)試:變量file不是一個(gè)目錄 test ! -d $file,expr 命令,expr是一條表達(dá)式評(píng)估命令,它從其后的自變量中讀入,然后進(jìn)行評(píng)估,評(píng)估后將結(jié)果寫到標(biāo)準(zhǔn)輸出。通常與命令替換以及變量的賦值一起使用。 評(píng)估主要是作一些運(yùn)算,例如加減乘除
11、等算術(shù)運(yùn)算,邏輯運(yùn)算,字串匹配等。 算術(shù)運(yùn)算符:+,-,* , / (Shell只提供整數(shù)運(yùn)算) 邏輯運(yùn)算符:=,=,=,!= 等等運(yùn)算符左右都必須有空格,例如:j=expr $j + 1 表示Shell變量j完成了加1的動(dòng)作。,expr 命令(例),$ a=5; b=16 $ x=expr $b / $a $ y=expr $b % $a $ echo x=$x y=$y x=3 y=1 $ a=expr $a + 1 $ echo $a 6,if 語(yǔ)句,語(yǔ)句格式: if 命令表1 (條件測(cè)試) then 命令表2 else 命令表3 fi 執(zhí)行過(guò)程: 首先進(jìn)行條件測(cè)試或判斷命令表1執(zhí)行成功
12、否,結(jié)果為真,則執(zhí)行 then 后的命令,然后執(zhí)行fi后面的命令;否則執(zhí)行 else 后的命令。 命令表1執(zhí)行成功,即最后一條命令的返回值為0,則表示測(cè)試結(jié)果為真,反之為假。,if 語(yǔ)句 (例2),例:判斷某一用戶是否已登錄,用戶名由命令行參數(shù)帶入程序。 $ cat on if test “$#” -ne 1 then echo “you must give a username” fi user=$1 if who |grep “$user ” /dev/null then echo “$user is login on” else echo “$user is not here. Try
13、again later.” fi,if 語(yǔ)句 (例3),例:編寫一問(wèn)候程序,根據(jù)系統(tǒng)時(shí)間顯示不同的問(wèn)候句。 0-12時(shí), 顯示: good morning 12-18時(shí), 顯示: good afternoon! 其它時(shí)間, 顯示: good evening! $ cat greeting hour=date +%H #取2位小時(shí)數(shù) if test $hour -le 11 then echo good morning!“ else if $hour -le 17 then echo good afternoon! else echo good evening! fi fi,if 語(yǔ)句 (例4)
14、,$ cat yesno a=$1 if test $a = “YES” -o $a = “yes” then echo “Yes !” else if test $a = “NO” -o $a = “no” then echo “NO !” else echo “error argument !” fi if,case 語(yǔ)句,語(yǔ)句格式: case 字符串 in 模式1) 命令表1; 模式2) 命令表1; esac 執(zhí)行過(guò)程: 用字符串依次與各模式進(jìn)行比較,發(fā)現(xiàn)匹配的模式就執(zhí)行其后的命令,直至“;”為止,然后執(zhí)行esac后面的命令。 模式中可使用 ?, ,*(意義同通配符) 模式中可以使用“|
15、”,表示各模式之間是或的關(guān)系。如,P|p意味著大寫和小寫的p都匹配。,case 語(yǔ)句(例1),case $1 in dir|path) echo current path is pwd ; date|time) echo today is date ; *) echo invalid first augument ; esac 該程序執(zhí)行時(shí)應(yīng)帶入一個(gè)字符串參數(shù),應(yīng)是dir、path、date、time等字符串,如果是別的字符串,則認(rèn)為是“invalid first augument”,case 語(yǔ)句(例2),$ cat usernu n=$1case $n in0-9) echo only $
16、n users in system;1-20-9) echo $n users in system;3-90-9) echo larger number users in system;*) echo too larger of number users in system;esac 該程序執(zhí)行時(shí)應(yīng)帶入一個(gè)正整數(shù),(例如:usernu 21),case 語(yǔ)句(例3),$ cat greet2 a=$1 case $a in 0-9|10-2) echo good morning ; 13-8) echo good afternoon ; 19|20-3) echo good evening ;
17、 *) echo a error argument esac 該程序執(zhí)行時(shí)應(yīng)帶入一個(gè)023的正整數(shù),(例如:greet2 21) 否則認(rèn)為是 a error argument “,case 語(yǔ)句(例4),$ cat yes_no1 a=$1 case $a in Yes|Y|YES|y|yes) echo Yes! ; N|n|NO|no|No) echo No! ; *) echo error agument! esac,for 語(yǔ)句,語(yǔ)句格式:for 變量 in 值表或文件集do命令表done 執(zhí)行過(guò)程: 依次取值表中的字串賦給變量,然后執(zhí)行命令表,直到取完所有的字串,結(jié)束循環(huán),執(zhí)行don
18、e后的命令。,for 語(yǔ)句(例1),拷貝所有后綴為 txt 的文件到目錄textfile. for file in *.txt do cp $file textfile done,for 語(yǔ)句(例2),例:計(jì)算1-6的平方值 for i in 1 2 3 4 5 6 do s=expr $i * $i echo $i $s done,while 語(yǔ)句,語(yǔ)句格式: while 命令表1 do 命令表2 done 執(zhí)行過(guò)程: 首先執(zhí)行命令表1,若命令返回碼為0,則為真,進(jìn)入循環(huán)體,執(zhí)行命令表2一次,然后返回執(zhí)行命令表1,直到命令表1的返回碼為非0,循環(huán)結(jié)束。執(zhí)行done后的語(yǔ)句。,while 語(yǔ)句
19、(例),例:計(jì)算并顯示1-n的平方表 i=1 n=$1 while test $i -le $n do s=expr $i * $i echo $i $s i=expr $i + 1 done,if 與while,#this programs function is comput n!,n is the first argument n=$1 if test $n -gt 10 then echo $1 must less 11 exit 1 fi i=1 s=1 while test $i -le $n do j=$i s=expr $i * $s i=expr $i + 1 done echo $j!= $s,until 語(yǔ)句,語(yǔ)句格式: until 命令表1 do 命令表2 done 執(zhí)行過(guò)程: 首先執(zhí)行命令表1,若命令返回碼為非
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- (2026年)護(hù)理敏感指標(biāo)的應(yīng)用課件
- (2026年)跌倒的預(yù)防及應(yīng)急護(hù)理課件
- 未來(lái)五年影視、廣播廣告制作服務(wù)企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略分析研究報(bào)告
- 未來(lái)五年工礦防水工程市場(chǎng)需求變化趨勢(shì)與商業(yè)創(chuàng)新機(jī)遇分析研究報(bào)告
- 未來(lái)五年學(xué)校體育教育活動(dòng)行業(yè)市場(chǎng)營(yíng)銷創(chuàng)新戰(zhàn)略制定與實(shí)施分析研究報(bào)告
- 未來(lái)五年硬脂酸鹽企業(yè)縣域市場(chǎng)拓展與下沉戰(zhàn)略分析研究報(bào)告
- 八年級(jí)英語(yǔ)上冊(cè) Unit 10 If you go to the party,you'll have a great time!(Section B 2a2e) 深度探究教學(xué)設(shè)計(jì)
- 七年級(jí)道德與法治下冊(cè)《成長(zhǎng)的不僅僅是身體》秋季學(xué)期教學(xué)設(shè)計(jì)
- 外研版初中英語(yǔ)八年級(jí)下冊(cè) Module 8 Unit 3 課堂導(dǎo)學(xué)案:基于語(yǔ)言素養(yǎng)的深度閱讀與批判性表達(dá)教學(xué)設(shè)計(jì)
- 2025消防應(yīng)急演練方案版
- 江蘇省南通市如皋市創(chuàng)新班2025-2026學(xué)年高一上學(xué)期期末數(shù)學(xué)試題+答案
- 2026年年長(zhǎng)租公寓市場(chǎng)分析
- 生態(tài)環(huán)境監(jiān)測(cè)數(shù)據(jù)分析報(bào)告
- 2025年下半年四川成都溫江興蓉西城市運(yùn)營(yíng)集團(tuán)有限公司第二次招聘人力資源部副部長(zhǎng)等崗位5人考試參考試題及答案解析
- 煤炭裝卸施工方案(3篇)
- 安徽省蚌埠市2024-2025學(xué)年高二上學(xué)期期末考試 物理 含解析
- 八年級(jí)歷史上冊(cè)小論文觀點(diǎn)及范文
- 重慶康德卷2025-2026學(xué)年高一數(shù)學(xué)第一學(xué)期期末達(dá)標(biāo)檢測(cè)試題含解析
- 浙江省杭州市蕭山區(qū)2024-2025學(xué)年六年級(jí)上學(xué)期語(yǔ)文期末試卷(含答案)
- 文旅智慧景區(qū)項(xiàng)目分析方案
- 設(shè)備隱患排查培訓(xùn)
評(píng)論
0/150
提交評(píng)論