版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> Linux操作系統(tǒng)基礎(chǔ)課程設(shè)計(jì)參考文檔</p><p> Linux操作系統(tǒng)基礎(chǔ)課程設(shè)計(jì)I</p><p> 第 1章 Shell 腳本編程1</p><p> 1-1Shell 命令行書寫規(guī)則1</p><p> 1-2 編寫/修改權(quán)限及執(zhí)行 Shell 程序的步驟1</p><
2、p> 1-3 在 Shell 程序中使用的參數(shù)3</p><p> 1-4 在 Shell 程序中的使用變量5</p><p> 1-5 表達(dá)式的比較8</p><p> 1-6 循環(huán)結(jié)構(gòu)語(yǔ)句15</p><p> 1-7 條件結(jié)構(gòu)語(yǔ)句19</p><p> 1-8 在 Shel
3、l 腳本中使用函數(shù)21</p><p> 1-9 在 Shell 腳本中調(diào)用其他腳本22</p><p> Linux操作系統(tǒng)基礎(chǔ)課程設(shè)計(jì)</p><p> 1、(必做)使用虛擬機(jī)VMware安裝linux系統(tǒng)</p><p> (1)把一個(gè)10G的硬盤進(jìn)行合理分區(qū),其中有有安裝系統(tǒng)的區(qū)域,有存放數(shù)據(jù)的區(qū)域,并創(chuàng)建合理的交換分區(qū)
4、文件。</p><p> ?。?)加載第2塊硬盤(8G),該硬盤分為3個(gè)分區(qū),1個(gè)主分區(qū)(2G)和2個(gè)邏輯分區(qū)(分別為3G)。</p><p> ?。?)新建目錄/mnt/ljp1,/mnt/ljp2,把第2塊硬盤的邏輯分區(qū)1和邏輯分區(qū)2分別掛載到/mnt/ljp1和/mnt/ljp2(要求系統(tǒng)啟動(dòng)后可以自動(dòng)掛載分區(qū))。</p><p> 2、(必做)在根目錄下有
5、四個(gè)文件 m1.txt,m2.txt,m3.txt,m4.txt,用 Shell 編程,實(shí)現(xiàn)自動(dòng) 創(chuàng)建 m1,m2,m3,m4 四個(gè)目錄,并將 m1.txt,m2.txt,m3.txt,m4.txt 四個(gè)文件分別拷貝到各自相應(yīng)的目錄下。</p><p> 3、(必做)編寫一個(gè) Shell 程序,用戶輸入1個(gè)數(shù)字,實(shí)現(xiàn)如下功能:</p><p> ?。?)計(jì)算從1到用戶輸入數(shù)字的和。(1+
6、2+3+…n)</p><p> (2)計(jì)算從1到用戶輸入數(shù)字的所有奇數(shù)數(shù)字的和。(1+3+5…)</p><p> 4、(必做)編寫一個(gè) Shell 程序,實(shí)現(xiàn)如下功能:</p><p> ?。?). 當(dāng)運(yùn)行一個(gè)程序的時(shí)候,這個(gè)程序會(huì)讓使用者選擇 Y 或 N ;</p><p> ?。?)如果使用者輸入 Y 或 y 時(shí),就顯示『 OK,
7、 continue 』</p><p> ?。?)如果使用者輸入 n 或 N 時(shí),就顯示『 Oh, interrupt !』</p><p> ?。?)如果不是 Y/y/N/n 之內(nèi)的其他字節(jié),就顯示『 I don't know what your choice is 』(利用中括號(hào)、 && 與 || 來(lái)實(shí)現(xiàn))</p><p> 5、(必做
8、)某系統(tǒng)管理員需每天做一定的重復(fù)工作,請(qǐng)按照下列要求,編制一個(gè)解決方案:</p><p> ?。?)在下午 4 :50 刪除/abc 目錄下的全部子目錄和全部文件;</p><p> ?。?)從早 8:00~下午 6:00 每小時(shí)讀取/xyz 目錄下 x1 文件中每行第一個(gè)域的全部數(shù)據(jù)加入 到/backup 目錄下的 bak01.txt 文件內(nèi);</p><p>
9、?。?)每逢星期一下午 5:50 將/data 目 錄 下 的所 有 目 錄 和 文 件 歸檔 并 壓 縮 為 文 件 :backup.tar.gz;</p><p> ?。?)在下午 5:55 將 IDE 接口的 CD-ROM 卸載(假設(shè):CD-ROM 的設(shè)備名為 hdc);</p><p> (5)在早晨 8:00 前開機(jī)后啟動(dòng)。</p><p> ?。ㄗⅲ菏?/p>
10、用計(jì)劃任務(wù)cron來(lái)實(shí)現(xiàn))</p><p> 6、(選做)使用者輸入一個(gè)文檔名,做出以下判斷:</p><p> ?。?). 這個(gè)文件是否存在,若不存在則給予一個(gè)“Filename does not exist”的信息,并中斷程序;</p><p> ?。?). 若這個(gè)文件存在,則判斷他是個(gè)文件或目錄,結(jié)果輸出“Filename is regular file”或
11、“Filename is directory”;</p><p> ?。?). 判斷一下,運(yùn)行者的身份對(duì)這個(gè)文件或目錄所擁有的權(quán)限,并輸出權(quán)限數(shù)據(jù)?。ㄗ⒁饫?test 與 && 還有 || 等標(biāo)志?。?lt;/p><p> 7、(選做)撰寫一支程序,他的作用是:</p><p> 1.) 先查看一下 /root/test/logical 這個(gè)名稱是
12、否存在;</p><p> 2.) 若不存在,則創(chuàng)建一個(gè)文件,使用 touch 來(lái)創(chuàng)建,創(chuàng)建完成后離開; </p><p> 3.) 如果存在的話,判斷該名稱是否為文件,若為文件則將之刪除后創(chuàng)建一個(gè)目錄,檔名為 logical ,之后離開; </p><p> 4.) 如果存在的話,而且該名稱為目錄,則移除此目錄!</p><p>
13、8、(選做)(任選其一)</p><p> ?。?)編寫一個(gè) Shell 程序,鍵盤輸入兩個(gè)數(shù)及+、-、*、與/中的任一運(yùn)算符,計(jì)算這兩個(gè)數(shù)的運(yùn)算 結(jié)果。</p><p> ?。?)編寫 4 個(gè)函數(shù)分別進(jìn)行算術(shù)運(yùn)算+、-、*、/,并編寫一個(gè)菜單,實(shí)現(xiàn)運(yùn)算命令。</p><p> 9、(選做)編寫一個(gè) Shell 程序,呈現(xiàn)一個(gè)菜單,有 0-5 共 6 個(gè)命令選項(xiàng),
14、1 為掛載 U 盤,2 為 卸載 U 盤,3 為顯示 U 盤的信息,4 把硬盤中的文件拷貝到 U 盤,5 把 U 盤中的文件拷貝到硬盤 中,選 0 為退出。程序分析:把此程序分成題目中要求的 6 大功能模塊,另外加一個(gè)菜單顯示及選擇的主模板。</p><p> 第 1章 Shell 腳本編程</p><p> ??Shell 命令行的運(yùn)行</p><p>
15、??編寫、修改權(quán)限和執(zhí)行 Shell 程序的步驟</p><p> ??在 Shell 程序中使用參數(shù)和變量</p><p> ??表達(dá)式比較、循環(huán)結(jié)構(gòu)語(yǔ)句和條件結(jié)構(gòu)語(yǔ)句</p><p> ??在 Shell 程序中使用函數(shù)和調(diào)用其他 Shell 程序</p><p> 1-1Shell 命令行書寫規(guī)則</p>
16、<p> ??Shell 命令行的書寫規(guī)則</p><p> 對(duì) Shell 命令行基本功能的理解有助于編寫更好的 Shell 程序,在執(zhí)行 Shell 命令時(shí)多個(gè)命 令可以在一個(gè)命令行上運(yùn)行,但此時(shí)要使用分號(hào)(;)分隔命令,例如:</p><p> [root@localhost root]# ls a* -l;free;df</p><p>
17、; 長(zhǎng) Shell 命令行可以使用反斜線字符(\)在命令行上擴(kuò)充,例如:</p><p> [root@localhost root]# echo “this is \</p><p> >long command”</p><p> This is long command</p><p><b> 注意:<
18、;/b></p><p> “>”符號(hào)是自動(dòng)產(chǎn)生的,而不是輸入的。</p><p> 1-2 編寫/修改權(quán)限及執(zhí)行 Shell 程序的步驟</p><p> ??編寫 Shell 程序</p><p> ??執(zhí)行 Shell 程序</p><p> Shell 程序有很多類似 C 語(yǔ)言和其他
19、程序設(shè)計(jì)語(yǔ)言的特征,但是又沒(méi)有程序語(yǔ)言那樣復(fù)雜。 Shell 程序是指放在一個(gè)文件中的一系列 Linux 命令和實(shí)用程序。在執(zhí)行的時(shí)候,通過(guò) Linux 操 作系統(tǒng)一個(gè)接一個(gè)地解釋和執(zhí)行每條命令。首先,來(lái)編寫第一個(gè) Shell 程序,從中學(xué)習(xí) Shell 程序的編寫、修改權(quán)限、執(zhí)行過(guò)程。</p><p> 1-2-1 編輯 Shell 程序</p><p> 編輯一個(gè)內(nèi)容如下的源程
20、序,保存文件名為 date,可將其存放在目錄/bin 下。</p><p> [root@localhost bin]#vi date</p><p> #! /bin/sh</p><p> echo “Mr.$USER,Today is:”</p><p> echo &date “+%B%d%A”</p>
21、<p> echo “Wish you a lucky day !”</p><p><b> 注意:</b></p><p> #! /bin/sh 通知采用 Bash 解釋。如果在 echo 語(yǔ)句中執(zhí)行 Shell 命令 date,則需要在 date</p><p> 命令前加符號(hào)“&”,其中%B%d%A 為輸入
22、格式控制符。</p><p> 1-2-2 建立可執(zhí)行程序</p><p> 編輯完該文件之后不能立即執(zhí)行該文件,需給文件設(shè)置可執(zhí)行程序權(quán)限。使用如下命令。</p><p> [root@localhost bin]#chmod +x date</p><p> 1-2-3 執(zhí)行 Shell 程序</p><p
23、> 執(zhí)行 Shell 程序有下面三種方法: 方法一:</p><p> [root@localhost bin]#./ date</p><p> Mr.root,Today is:</p><p><b> 二月 06 星期二</b></p><p> Wish you a lucky day !&l
24、t;/p><p><b> 方法二:</b></p><p> 另一種執(zhí)行 date 的方法就是把它作為一個(gè)參數(shù)傳遞給 Shell 命令:</p><p> [root@localhost bin]# Bash date</p><p> Mr.root,Today is:</p><p>
25、<b> 二月 06 星期二</b></p><p> Wish you a lucky day !</p><p><b> 方法三:</b></p><p> 為了在任何目錄都可以編譯和執(zhí)行 Shell 所編寫的程序,即把/bin 的這個(gè)目錄添加到整個(gè) 環(huán)境變量中。</p><p>&l
26、t;b> 具體操作如下:</b></p><p> [root@localhost bin]#. date</p><p> Mr.root,Today is:</p><p><b> 二月 06 星期二</b></p><p> Wish you a lucky day !</p&
27、gt;<p> 實(shí)例 1-1:編寫一個(gè) Shell 程序 mkf,此程序的功能是:顯示 root 下的文件</p><p> 信息,然后建立一個(gè) kk 的文件夾,在此文件夾下建立一個(gè)文件 aa,修改此文件的權(quán)限為可執(zhí)行。 分析:此 Shell 程序中需要依次執(zhí)行下列命令為:</p><p> 進(jìn)入 root 目錄:cd /root</p><p>
28、; 顯示 root 目錄下的文件信息:ls –l</p><p> 新建文件夾 kk: mkdir kk</p><p> 進(jìn)入 root/kk 目錄:cd kk</p><p> 新建一個(gè)文件 aa: vi aa #編輯完成后需手工保存 修改 aa 文件的權(quán)限為可執(zhí)行:chmod +x aa</p><p> 回到 root
29、 目錄:cd /root</p><p> 因此該 Shell 程序只是以上命令的順序集合,假定程序名為 mkf</p><p> [root@localhost root]#vi mkf cd /root</p><p> ls –l mkdir kk cd kk</p><p><b> vi aa</b>
30、</p><p> chmod +x aa cd /root</p><p> 1-3 在 Shell 程序中使用的參數(shù)</p><p><b> ??位置參數(shù)</b></p><p><b> ??內(nèi)部參數(shù)</b></p><p> 如同 ls 命令可以接受
31、目錄等作為它的參數(shù)一樣,在 Shell 編程時(shí)同樣可以使用參數(shù)。Shell</p><p> 程序中的參數(shù)分為位置參數(shù)和內(nèi)部參數(shù)等。</p><p> 1-3-1 位置參數(shù)</p><p> 由系統(tǒng)提供的參數(shù)稱為位置參數(shù)。位置參數(shù)的值可以用$N 得到,N 是一個(gè)數(shù)字,如果為 1, 即$1。類似 C 語(yǔ)言中的數(shù)組,Linux 會(huì)把輸入的命令字符串分段并給每段進(jìn)
32、行標(biāo)號(hào),標(biāo)號(hào)從 0 開 始。第 0 號(hào)為程序名字,從 1 開始就表示傳遞給程序的參數(shù)。如$0 表示程序的名字,$1 表示傳 遞給程序的第一個(gè)參數(shù),以此類推。</p><p> 1-3-2 內(nèi)部參數(shù)</p><p> 上述過(guò)程中的$0 是一個(gè)內(nèi)部變量,它是必須的,而$1 則可有可無(wú),最常用的內(nèi)部變量有$0、</p><p> $#、$?、$*,它們的含義如下。
33、</p><p> ??$0:命令含命令所在的路徑。</p><p> ??$1: 傳遞給程序的第1個(gè)參數(shù)。</p><p> ??$2: 傳遞給程序的第2個(gè)參數(shù)。(以此類推)</p><p> ??$#:傳遞給程序的總的參數(shù)數(shù)目。</p><p> ??$?:Shell 程序在 Shell 中退出
34、的情況,正常退出返回 0,反之為非 0 值。</p><p> ??$*:傳遞給程序的所有參數(shù)組成的字符串。</p><p> ??$$:當(dāng)前進(jìn)程的進(jìn)程號(hào)。</p><p> 實(shí)例 1-2:編寫一個(gè) Shell 程序,用于描述 Shell 程序中的位置參數(shù)為:$0、$#、</p><p> $?、$*,程序名為 test1,代碼如
35、下:</p><p> [root@localhost bin]#vi test1</p><p> #! /bin/sh</p><p> echo “Program name is $0”;</p><p> echo “There are totally $# parameters passed to this program
36、 ”;</p><p> echo “The last is $?”;</p><p> echo “The parameter are $*”;</p><p><b> 執(zhí)行后的結(jié)果如下:</b></p><p> [root@localhost bin]# test1 this is a test pro
37、gram //傳遞 5 個(gè)參數(shù)</p><p> Program name is /bin/test1 //給出程序的完整路徑和名字</p><p> There are totally 5 parameters passed to this program // 參數(shù)的總數(shù)</p><p> The last is 0 //程序執(zhí)行效果</p&g
38、t;<p> The parameters are this is a test program // 返回由參數(shù)組成的字符串</p><p> 注意:命令不計(jì)算在參數(shù)內(nèi)。</p><p> 實(shí)例 1-3:利用內(nèi)部變量和位置參數(shù)編寫一個(gè)名為 test2 的簡(jiǎn)單刪除程序,如刪除</p><p> 的文件名為 a,則在終端中輸入的命令為:test
39、 a</p><p> 分析:除命令外至少還有一個(gè)位置參數(shù),即$#不能為 0,刪除不能為$1,程序設(shè)計(jì)過(guò)程如下。</p><p> ?。?) 用 vi 編輯程序</p><p> [root@localhost bin]#vi test2</p><p> #! /bin/sh</p><p> if t
40、est $# -eq 0 then</p><p> echo “Please specify a file!”</p><p><b> else</b></p><p> gzip $1 //現(xiàn)對(duì)文件進(jìn)行壓縮</p><p> mv $1.gz $HOME/dustbin //移動(dòng)到回收站</p&g
41、t;<p> echo “File $1 is deleted !”</p><p><b> fi</b></p><p><b> ?。?) 設(shè)置權(quán)限</b></p><p> [root@localhost bin]#chmod +x test2 (3) 運(yùn)行</p><
42、p> [root@localhost bin]# test2 a (如果 a 文件在 bin 目錄下存在) File a is deleted!</p><p> 1-4 在 Shell 程序中的使用變量</p><p><b> ??變量的賦值</b></p><p><b> ??變量的訪問(wèn)</b>
43、;</p><p><b> ??變量的輸入</b></p><p> 1-4-1 變量的賦值</p><p> 在 Shell 編程中,所有的變量名都由字符串組成,并且不需要對(duì)變量進(jìn)行聲明。要賦值給 一個(gè)變量,其格式如下:</p><p><b> 變量名=值</b></p>
44、<p><b> 注意:</b></p><p> 等號(hào)(=)前后沒(méi)有空格 例如:</p><p><b> x=6</b></p><p> a=”How are you ”</p><p> 表示把 6 賦值給變量 x,字符串“How are you ”賦值給變量 a。&
45、lt;/p><p> 1-4-2 訪問(wèn)變量值</p><p> 如果要訪問(wèn)變量值,可以在變量前面加一個(gè)美元符號(hào)“$”,例如:</p><p> [root@localhost bin]#a=”How are you ”</p><p> [root@localhost bin]#echo “He just said:$a”</
46、p><p> He just said:How are you</p><p> 一個(gè)變量給另一個(gè)變量賦值可以寫成:</p><p> 變量 2=$變量 1</p><p><b> 例如:</b></p><p><b> x=$i</b></p>&l
47、t;p><b> i++可以寫成:</b></p><p><b> i=$i+1</b></p><p> 1-4-3 鍵盤讀入變量值</p><p> 在 Shell 程序設(shè)計(jì)中,變量的值可以作為字符串從鍵盤讀入,其格式為:</p><p> read 變量 例如:</p&
48、gt;<p> [root@localhost bin]#read str</p><p> read 為讀入命令,它表示從鍵盤讀入字符串到 str。</p><p> 實(shí)例 1-4:編寫一個(gè) Shell 程序 test3,程序執(zhí)行時(shí)從鍵盤讀入一個(gè)目錄名,然后 顯示這個(gè)目錄下所有文件的信息。</p><p><b> 分析:<
49、/b></p><p> 存放目錄的變量為 DIRECTORY,其讀入語(yǔ)句為:</p><p> read DIRECTORY</p><p> 顯示文件的信息命令為:ls –a</p><p> [root@localhost bin]#vi test3</p><p> #! /bin/sh&l
50、t;/p><p> echo “please input name of directory”</p><p> read DIRECTORY cd $DIRECTORY ls –l </p><p><b> (2)設(shè)置權(quán)限</b></p><p> [root@localhost bin]#chmod +x t
51、est3 (3)執(zhí)行</p><p> [root@localhost bin]#./test3</p><p><b> 注意:</b></p><p> 輸入路徑時(shí)需間隔符“/”</p><p><b> 結(jié)果。</b></p><p> 實(shí)例 1-5:運(yùn)行程
52、序 test4,從鍵盤讀入 x、y 的值,然后做加法運(yùn)算,最后輸出</p><p> ?。?)用 vi 編輯程序</p><p> [root@localhost bin]#vi test4</p><p> #! /bin/sh</p><p> echo “please input x y”</p><p>
53、; read x,y z=`expr $x+$y`</p><p> echo “The sum is $z”</p><p><b> ?。?)設(shè)置權(quán)限</b></p><p> [root@localhost bin]#chmod +x test4 (3)執(zhí)行</p><p> [root@localhos
54、t bin]#./ test4</p><p><b> 45 78</b></p><p> The sum is 123</p><p><b> 注意:</b></p><p> 表達(dá)式 total=`expr $total +$num`及 num=`expr $num +1`中的符
55、號(hào)“`”為鍵盤左上角的</p><p><b> “`”鍵。</b></p><p><b> 1、特殊符號(hào)</b></p><p><b> ?。?)引用符號(hào)</b></p><p> 在bash中,許多字符有特殊的含義。如果希望bash忽略某些字符的特殊含義,可以使用
56、一種稱為“引用”的技術(shù),通知Shell暫時(shí)忽略被引用字符的特殊含義,將其作為普通字符處理。</p><p> Shell在使用“引用”時(shí)用到三種字符:轉(zhuǎn)義符“\”、單引號(hào)“’”和雙引號(hào)“””</p><p> 引用符號(hào)1 — 轉(zhuǎn)義符“\”</p><p> 將轉(zhuǎn)義符“\”放在Shell特殊字符之前,則Shell忽略該字符原有的特殊含義。</p>
57、<p> 用這種方式時(shí),必須在每一個(gè)欲忽略其特殊含義的特殊字符之前添加一個(gè)“\”字符。</p><p> 引用符號(hào)2 — 單引號(hào)“’”</p><p> 將字符串放在一對(duì)單引號(hào)之間,則單引號(hào)內(nèi)的所有字符的特殊含義都被忽略,而只作為普通字符解釋。</p><p> 例1:下面兩條命令是等效的。</p><p> # echo
58、 ‘f*?’</p><p> # echo f\*\?</p><p><b> 例2:</b></p><p> # string=‘$PATH’</p><p> # echo $string</p><p><b> $PATH</b></p>
59、<p><b> 例3:</b></p><p> # name=liuhongqi’s home</p><p> 引用符號(hào)3 — 雙引號(hào)“””</p><p> 使用雙引號(hào)的引用與單引號(hào)的類似,括在雙引號(hào)內(nèi)的大部分特殊字符將被看作普通字符,但也有一些特殊字符即便用雙引號(hào)括起來(lái)之后仍然保留著其特殊的意義,比如$、\、”和`
60、。</p><p> 例:假定變量PATH的值為/usr/bin</p><p> #string=“$PATH and \$PATH”</p><p> #echo $string</p><p> /usr/bin and $PATH</p><p> ?。?) 命令替換符“`”</p>
61、<p> 命令替換符“`”(反引號(hào))的作用跟引用字符的作用相反。反引號(hào)括起來(lái)的字符串被Shell解釋為命令行,在執(zhí)行時(shí),Shell首先執(zhí)行該命令行,并以它的標(biāo)準(zhǔn)輸出結(jié)果取代整個(gè)反引號(hào)(包括兩個(gè)反引號(hào))部分。</p><p> 這個(gè)字符所對(duì)應(yīng)的鍵一般位于鍵盤的左上角。</p><p><b> 例1:</b></p><p>&l
62、t;b> # pwd</b></p><p><b> /root</b></p><p> # string=“Current directory is `pwd`”</p><p> # echo $string</p><p> Current directory is /root<
63、;/p><p><b> 例2:</b></p><p> # today=`date`</p><p> # echo Today is $today</p><p> Today is Mon Jan 15 16:20:12 CST 2002</p><p> 2、expr 命令 <
64、;/p><p> expr命令是一個(gè)手工命令行計(jì)數(shù)器,用于在UNIX/LINUX下求表達(dá)式變量的值,一般用于整數(shù)值,也可用于字符串。</p><p><b> 格式為:</b></p><p> expr Expression</p><p> (命令讀入Expression 參數(shù),計(jì)算它的值,然后將結(jié)果寫入到標(biāo)準(zhǔn)輸
65、出)</p><p><b> 參數(shù)應(yīng)用規(guī)則:</b></p><p><b> 用空格隔開每個(gè)項(xiàng);</b></p><p> 用 \ (反斜杠) 放在 shell 特定的字符前面;</p><p> 對(duì)包含空格和其他特殊字符的字符串要用引號(hào)括起來(lái)</p><p>
66、 expr用法實(shí)例講解 </p><p><b> ?。?)整數(shù)運(yùn)算</b></p><p> # expr 14 % 9</p><p><b> 5</b></p><p> # expr 1000 + 900</p><p><b> 1900<
67、/b></p><p> # expr 30 / 3 / 2</p><p><b> 5</b></p><p> # expr 30 \* 3 (使用乘號(hào)時(shí),必須用反斜線屏蔽其特定含義。)</p><p><b> 90</b></p><p> # ex
68、pr 30 * 3</p><p> expr: Syntax error</p><p><b> ?。?)計(jì)算字串長(zhǎng)度</b></p><p> # expr length “this is a test”</p><p><b> 14</b></p><p>&
69、lt;b> ?。?)增量計(jì)數(shù)</b></p><p> 說(shuō)明:expr在循環(huán)中用于增量計(jì)算。先將變量初始化為0,然后循環(huán)值加1,反引號(hào)的用法為命令替代。</p><p><b> # LOOP=0</b></p><p> # LOOP=`expr $LOOP + 1`</p><p> 1-5
70、 表達(dá)式的比較</p><p><b> ??字符串操作符</b></p><p><b> ??邏輯運(yùn)算符</b></p><p> ??用 tes t 比較的運(yùn)算符</p><p><b> ??數(shù)字比較符</b></p><p>
71、<b> ??文件操作符</b></p><p> 在 Shell 程序中,通常使用表達(dá)式比較來(lái)完成邏輯任務(wù)。表達(dá)式所代表的操作符有字符操作 符、數(shù)字操作符、邏輯操作符、以及文件操作符。其中文件操作符是一種 Shell 所獨(dú)特的操作符。 因?yàn)?Shell 里的變量都是字符串,為了達(dá)到對(duì)文件進(jìn)行操作的目的,于是才提供了文件操作符。</p><p> 1-5-1
72、字符串比較</p><p> 作用:測(cè)試字符串是否相等、長(zhǎng)度是否為零,字符串是否為 NULL。 常用的字符串操作符如表 1-1所示.。</p><p> 表 1-1常用的字符串操作符</p><p> 實(shí)例 1-6:從鍵盤輸入兩個(gè)字符串,判斷這兩個(gè)字符串是否相等,如相等輸出。</p><p> 【例1】 字符串比較的使用。</
73、p><p> # str1=abcd</p><p> # test $str1 = abcd</p><p><b> # echo $?</b></p><p> 【例2】 含有空格的字符串的比較。</p><p><b> # strl=“”</b></p&
74、gt;<p> # test $str1</p><p><b> # echo $?</b></p><p> # test “$str1”</p><p><b> # echo $?</b></p><p> # test –n “$str1”</p>&
75、lt;p><b> # echo $?</b></p><p> test 命令的測(cè)試功能</p><p> test是Shell程序中的一個(gè)表達(dá)式,用test命令去判斷文件的存在與性質(zhì),變量的相互關(guān)系;如果條件為真,則返回一個(gè) 0 值。如果表達(dá)式不為真,則返回一個(gè)大于 0 的值, 也可以將其稱為假值。檢查最后所執(zhí)行命令的狀態(tài)的最簡(jiǎn)便方法是使用 $? 值。
76、</p><p> test 命令期望在命令行中找到一個(gè)參數(shù),當(dāng) shell 沒(méi)有為變量賦值時(shí),則將該變量視為空。這意味著在處理腳本時(shí),一旦腳本尋找的參數(shù)不存在,則 test 將報(bào)告該錯(cuò)誤。</p><p> test 和 [ 命令</p><p> 雖然 Linux 和 UNIX 的每個(gè)版本中都包含 test 命令,但該命令有一個(gè)更常用的別名 — 左方括號(hào):
77、[。test 及其別名通常都可以在 /usr/bin 或 /bin (取決于操作系統(tǒng)版本和供應(yīng)商)中找到。當(dāng)您使用左方括號(hào)而非 test 時(shí),其后必須始終跟著一個(gè)空格、要評(píng)估的條件、一個(gè)空格和右方括號(hào)。右方括號(hào)不是任何東西的別名,而是表示所需評(píng)估參數(shù)的結(jié)束。條件兩邊的空格是必需的,這表示要調(diào)用 test。</p><p> test 和 [ 的語(yǔ)法如下:test expression</p>&l
78、t;p><b> 測(cè)試的標(biāo)志代表意義</b></p><p> 1. 關(guān)於某個(gè)檔名的『文件類型』判斷,如 test -e filename 表示存在否</p><p> -e 該『檔名』是否存在?(常用)</p><p> -f 該『檔名』是否存在且為文件(file)?(常用)</p><p> -d 該
79、『檔名』是否存在且為目錄(directory)?(常用)</p><p> -b 該『檔名』是否存在且為一個(gè) block device 裝置?</p><p> -c 該『檔名』是否存在且為一個(gè) character device 裝置?</p><p> -S 該『檔名』是否存在且為一個(gè) Socket 文件?</p><p> -p
80、該『檔名』是否存在且為一個(gè) FIFO (pipe) 文件?</p><p> -L 該『檔名』是否存在且為一個(gè)連結(jié)檔?</p><p> 2. 關(guān)於文件的權(quán)限偵測(cè),如 test -r filename 表示可讀否 (但 root 權(quán)限常有例外)</p><p> -r 偵測(cè)該檔名是否存在且具有『可讀』的權(quán)限?</p><p> -w
81、偵測(cè)該檔名是否存在且具有『可寫』的權(quán)限?</p><p> -x 偵測(cè)該檔名是否存在且具有『可運(yùn)行』的權(quán)限?</p><p> -u 偵測(cè)該檔名是否存在且具有『SUID』的屬性?</p><p> -g 偵測(cè)該檔名是否存在且具有『SGID』的屬性?</p><p> -k 偵測(cè)該檔名是否存在且具有『Sticky bit』的屬性?<
82、;/p><p> -s 偵測(cè)該檔名是否存在且為『非空白文件』?</p><p> 3. 兩個(gè)文件之間的比較,如: test file1 -nt file2</p><p> -nt (newer than)判斷 file1 是否比 file2 新</p><p> -ot (older than)判斷 file1 是否比 file2 舊&
83、lt;/p><p> -ef 判斷 file1 與 file2 是否為同一文件,可用在判斷 hard link 的判定上。主要意義在判定,兩個(gè)文件是否均指向同一個(gè) inode!</p><p> 4. 關(guān)於兩個(gè)整數(shù)之間的判定,例如 test n1 -eq n2</p><p> -eq 兩數(shù)值相等 (equal)</p><p> -ne
84、 兩數(shù)值不等 (not equal)</p><p> -gt n1 大於 n2 (greater than)</p><p> -lt n1 小於 n2 (less than)</p><p> -ge n1 大於等於 n2 (greater than or equal)</p><p> -le n1 小於等於 n2 (less
85、than or equal)</p><p> 5. 判定字串的數(shù)據(jù)</p><p> test -z string 判定字串是否為 0 ?若 string 為空字串,則為 true</p><p> test -n string 判定字串是否非為 0 ?若 string 為空字串,則為 false。</p><p> 注: -n 亦
86、可省略</p><p> test str1 = str2 判定 str1 是否等於 str2 ,若相等,則回傳 true</p><p> test str1 != str2 判定 str1 是否不等於 str2 ,若相等,則回傳 false</p><p> 6. 多重條件判定,例如: test -r filename -a -x filename<
87、/p><p> -a (and)兩狀況同時(shí)成立!例如 test -r file -a -x file,則 file 同時(shí)具有 r</p><p> 與 x 權(quán)限時(shí),才回傳 true。</p><p> -o (or)兩狀況任何一個(gè)成立!例如 test -r file -o -x file,則 file 具有 r</p><p> 或 x
88、權(quán)限時(shí),就可回傳 true。</p><p> ! 反相狀態(tài),如 test ! -x file ,當(dāng) file 不具有 x 時(shí),回傳 true</p><p> ?。?)用 vi 編輯程序</p><p> [root@localhost bin]#vi test5</p><p> #! /bin/Bash read ar1<
89、/p><p><b> read ar2</b></p><p> [ “$ar1” = “$ar2” ]</p><p> echo $? #?保存前一個(gè)命令的返回碼</p><p><b> ?。?)設(shè)置權(quán)限</b></p><p> [root@loca
90、lhost bin]#chmod +x test5 (3)執(zhí)行</p><p> [root@localhost root]#./ test5 aaa</p><p><b> bbb</b></p><p><b> 1</b></p><p><b> 注意:</b&
91、gt;</p><p> ”[”后面和”]”前面及等號(hào)“=“的前后都應(yīng)有一個(gè)空格;注意這里是程序的退出情況,</p><p> 如果 ar1 和 ar2 的字符串是不想等的非正常退出,輸出結(jié)果為 1。</p><p> 實(shí)例 1-7: 比較字符串長(zhǎng)度是否大于零</p><p> ?。?)用 vi 編輯程序</p><
92、p> [root@localhost bin]#vi test6</p><p> #! /bin/Bash read ar</p><p> [ -n “$ar” ]</p><p> echo $? //保存前一個(gè)命令的返回碼</p><p><b> ?。?)設(shè)置權(quán)限</b></p>
93、<p> [root@localhost bin]#chmod +x test6</p><p><b> ?。?)執(zhí)行</b></p><p> [root@localhost bin]#./ test6</p><p><b> 0</b></p><p><b&g
94、t; 注意:</b></p><p> 運(yùn)行結(jié)果 1 表示 ar 的小于等于零,0 表示 ar 的長(zhǎng)度大于零。</p><p> 1-5-2 數(shù)字比較</p><p> 在 Bash Shell 編程中的關(guān)系運(yùn)算有別于其他編程語(yǔ)言,用表 1-2 中的運(yùn)算符用 test 語(yǔ)句 表示大小的比較。</p><p> 表 1-2
95、 用 test 比較的運(yùn)算符</p><p> 運(yùn)算符號(hào) 含 義</p><p><b> -eq 相等</b></p><p><b> -ge 大于等于</b></p><p><b> -le 小于等于</b></p><p>&
96、lt;b> -ne 不等于</b></p><p><b> -gt 大于</b></p><p><b> -lt 小于</b></p><p> 實(shí)例 1-8:比較兩個(gè)數(shù)字是否相等</p><p> ?。?)用 vi 編輯程序</p><p&g
97、t; [root@localhost bin]#vi test7</p><p> #! /bin/Bash read x,y</p><p> if test $x –eq $y then</p><p> echo “$x=$y”</p><p><b> else</b></p><
98、p><b> fi</b></p><p> echo “$x!=$y”</p><p><b> ?。?)設(shè)置權(quán)限</b></p><p> [root@localhost bin]#chmod +x test7</p><p><b> ?。?)執(zhí)行</b>&
99、lt;/p><p> [root@localhost bin]#./ test7</p><p><b> 50 100</b></p><p><b> 50!=100</b></p><p> [root@localhost bin]#./ test7</p><p&
100、gt;<b> 150 150</b></p><p><b> 150= =150</b></p><p> 1-5-3 邏輯操作</p><p> 在 Shell 程序設(shè)計(jì)中的邏輯運(yùn)算符如表 1-3 所示。</p><p> 1-3 Shell 中的邏輯運(yùn)算符</p>
101、<p> 實(shí)例 1-9:分別給兩個(gè)字符變量賦值,一個(gè)變量賦予一定的值,另一個(gè)變量為空,</p><p> 求兩者的與、或操作。</p><p> ?。?)用 vi 編輯程序</p><p> [root@localhost bin]#vi test8</p><p> #! /bin/Bash part1 =”1111”&
102、lt;/p><p> part2 =” ” #part2 為空</p><p> [ “$ part1” –a “$ part2”]</p><p> echo $? #保存前一個(gè)命令的返回碼</p><p> [ “$ part1” –o “$ part2”]</p><p><b> echo
103、$?</b></p><p><b> ?。?)設(shè)置權(quán)限</b></p><p> [root@localhost bin]#chmod +x test8</p><p><b> ?。?)執(zhí)行</b></p><p> [root@localhost bin]#./ test8
104、</p><p><b> 1</b></p><p><b> 0</b></p><p> 1-5-4 文件操作</p><p> 文件測(cè)試操作表達(dá)式通常是為了測(cè)試文件的信息,一般由腳本來(lái)決定文件是否應(yīng)該備份、 復(fù)制或刪除。由于 test 關(guān)于文件的操作符有很多,在表 1-4 中只列舉一
105、些常用的操作符。</p><p> 表 1-4 文件測(cè)試操作符</p><p> 實(shí)例 1-10:判斷 zb 目錄是否存在于/root 下。</p><p> ?。?)用 vi 編輯程序</p><p> [root@localhost bin]#vi test9</p><p> #! /bin/Bash
106、</p><p> [ -d /root/zb ]</p><p> echo $? #保存前一個(gè)命令的返回碼</p><p><b> (2)設(shè)置權(quán)限</b></p><p> [root@localhost bin]#chmod +x test9 (3)執(zhí)行</p><p> [
107、root@localhost bint]#./ test9</p><p> (4)在/root 添加 zb 目錄</p><p> [root@localhost bin]#mkdir zb</p><p><b> (5)執(zhí)行</b></p><p> [root@localhost bin]#./test
108、9</p><p><b> 0</b></p><p><b> 注意:</b></p><p> 運(yùn)行結(jié)果是返回參數(shù)“$?”,結(jié)果 1 表示判斷的目錄不存在,0 表示判斷的目錄不存在。</p><p> 實(shí)例 1-11:編寫一個(gè) Shell 程序 test10,輸入一個(gè)字符串,如果是目錄
109、,則顯示</p><p> 目錄下的信息,如為文件顯示文件的內(nèi)容。</p><p> ?。?)用 vi 編輯程序</p><p> [root@localhost bin]#vi test10</p><p> #! /bin/Bash</p><p> echo “Please enter the dire
110、ctory name or file name”</p><p><b> read DORF</b></p><p> if [ -d $DORF ]</p><p><b> then</b></p><p><b> ls $DORF</b></p>
111、<p> elif [ -f $DORF ]</p><p><b> then</b></p><p><b> cat $DORF</b></p><p><b> else</b></p><p> echo “input error! ”</
112、p><p><b> fi</b></p><p><b> ?。?)設(shè)置權(quán)限</b></p><p> [root@localhost bin]#chmod +x test10</p><p><b> ?。?)執(zhí)行</b></p><p> [r
113、oot@localhost bin]#./ test10</p><p> 1-6 循環(huán)結(jié)構(gòu)語(yǔ)句</p><p> ??Shell 的循環(huán)語(yǔ)句</p><p> Shell 常見(jiàn)的循環(huán)語(yǔ)句有 for 循環(huán)、while 循環(huán)語(yǔ)句和 until 循環(huán)。</p><p> 1-6-1 for 循環(huán)</p><p&
114、gt;<b> 語(yǔ)法:</b></p><p> for 變量 in 列表</p><p><b> do</b></p><p><b> 操作</b></p><p><b> done</b></p><p><
115、;b> 注意:</b></p><p> 變量要在循環(huán)內(nèi)部用來(lái)指列表當(dāng)中的對(duì)象。</p><p> 列表是在 for 循環(huán)的內(nèi)部要操作的對(duì)象,可以是字符串也可以是文件,如果是文件則為文件 名。</p><p><b> 兩行輸出。</b></p><p> 實(shí)例 1-12:在列表中的值:a,b
116、,c,e,I,2,4,6,8 用循環(huán)的方式把字符與數(shù)字分成</p><p> ?。?)用 vi 編輯腳本程序 test11 [root@localhost bin]#vi test11</p><p> #! /bin/Bash</p><p> for i in a,b,c,e,I 2,4,6,8 do</p><p> echo
117、 $i done</p><p><b> ?。?)設(shè)置權(quán)限</b></p><p> [root@localhost bin]#chmod +x test11</p><p><b> ?。?)執(zhí)行</b></p><p> [root@localhost bin]#./ test11 a
118、,b,c,e,i</p><p><b> 2,4,6,8</b></p><p><b> 注意:</b></p><p> 在循環(huán)列表中的空格可表示換行。</p><p> 實(shí)例 1-13:刪除垃圾箱中的所有文件。</p><p> 分析:在本機(jī)中,垃圾箱的位置
119、是在$HOME/.Trash 中,因而是在刪除$HOME/.Trash 列表當(dāng) 中的所有文件,程序腳本如下。</p><p> ?。?)用 vi編輯腳本程序 test12 [root@localhost bin]#vi test12</p><p> #! /bin/Bash</p><p> for i in $HOME/.Trash/*</p>
120、<p><b> do</b></p><p><b> rm $i</b></p><p> echo “$i has been deleted!”</p><p><b> done</b></p><p><b> ?。?)設(shè)置權(quán)限<
121、/b></p><p> [root@localhost bin]#chmod +x test12</p><p><b> ?。?)執(zhí)行</b></p><p> [root@localhost bin]#./ test12</p><p> /root/.Trash/abc~ has been del
122、eted!</p><p> /root/.Trash/abc1 has been deleted!</p><p> 實(shí)例 1-14:求從 1~100 的和。</p><p> ?。?)用 vi 編輯腳本程序 test13 [root@localhost bin]#vi test13</p><p> #! /bin/Bash<
123、;/p><p> total =0 for((j=1;j<=100;j++)); do</p><p> total=`expr $total + $j`</p><p><b> done</b></p><p> echo “The result is $total”</p><p>
124、;<b> ?。?)設(shè)置權(quán)限</b></p><p> [root@localhost bin]#chmod +x test13</p><p><b> ?。?)執(zhí)行</b></p><p> [root@localhost bin]#./ test13</p><p> The res
125、ult is 5050</p><p><b> 注意:</b></p><p> for 語(yǔ)句中的雙括號(hào)不能省,最后的分號(hào)可有可無(wú),表達(dá)式 total=`expr $total + $j`的加 號(hào)兩邊的空格不能省,否則會(huì)成為字符串的連接。</p><p> 1-6-2 while 循環(huán)</p><p><b
126、> 語(yǔ)法:</b></p><p><b> while 表達(dá)式</b></p><p><b> do</b></p><p><b> 操作</b></p><p><b> done</b></p><
127、p> 只要表達(dá)式為真,do 和 done 之間的操作就一直會(huì)進(jìn)行。</p><p> 實(shí)例 1-15:用 while 循環(huán)求 1~100 的和。</p><p> (1)用 vi 編輯腳本程序 test14 [root@localhost bin]#vi test13 total =0</p><p> num=0 while((num<=10
128、0));</p><p><b> do</b></p><p><b> done</b></p><p> total=`expr $total +$ num`</p><p> num=`expr $num + 1`</p><p> echo “The re
129、sult is $total”</p><p><b> ?。?)設(shè)置權(quán)限</b></p><p> [root@localhost bin]#chmod +x test14 (3)執(zhí)行</p><p> [root@localhost bin]#./ test14</p><p> The result is
130、 5050</p><p> 1-6-3 until 循環(huán)</p><p><b> 語(yǔ)法:</b></p><p><b> until 表達(dá)式</b></p><p> do 操作 done</p><p> 重復(fù) do 和 done 之間的操作直到表達(dá)式成立為
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- linux操作系統(tǒng)課程設(shè)計(jì)
- linux課程設(shè)計(jì)報(bào)告--linux操作系統(tǒng)應(yīng)用
- 操作系統(tǒng)課程設(shè)計(jì)——操作系統(tǒng)課程設(shè)計(jì)模擬操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)-- 操作系統(tǒng)
- 課程設(shè)計(jì)---操作系統(tǒng)課程設(shè)計(jì)之linux磁盤空間管理
- linux課程設(shè)計(jì)---linux操作系統(tǒng)u盤驅(qū)動(dòng)設(shè)計(jì)分析報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- linux操作系統(tǒng)應(yīng)用課程整體設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- linux操作系統(tǒng)課程設(shè)計(jì)--頁(yè)面置換算法模擬
- 操作系統(tǒng)課程設(shè)計(jì)linux二級(jí)文件系統(tǒng)設(shè)計(jì)
- linux操作系統(tǒng)課程整體教學(xué)設(shè)計(jì)
- linux操作系統(tǒng)應(yīng)用課程整體設(shè)計(jì)
- 內(nèi)存管理(操作系統(tǒng))操作系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)--linux操作系統(tǒng)安全性的研究
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--linux二級(jí)文件系統(tǒng)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論