

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> Linux操作系統(tǒng)基礎課程設計參考文檔</p><p> Linux操作系統(tǒng)基礎課程設計I</p><p> 第 1章 Shell 腳本編程1</p><p> 1-1Shell 命令行書寫規(guī)則1</p><p> 1-2 編寫/修改權限及執(zhí)行 Shell 程序的步驟1</p><
2、p> 1-3 在 Shell 程序中使用的參數(shù)3</p><p> 1-4 在 Shell 程序中的使用變量5</p><p> 1-5 表達式的比較8</p><p> 1-6 循環(huán)結(jié)構(gòu)語句15</p><p> 1-7 條件結(jié)構(gòu)語句19</p><p> 1-8 在 Shel
3、l 腳本中使用函數(shù)21</p><p> 1-9 在 Shell 腳本中調(diào)用其他腳本22</p><p> Linux操作系統(tǒng)基礎課程設計</p><p> 1、(必做)使用虛擬機VMware安裝linux系統(tǒng)</p><p> ?。?)把一個10G的硬盤進行合理分區(qū),其中有有安裝系統(tǒng)的區(qū)域,有存放數(shù)據(jù)的區(qū)域,并創(chuàng)建合理的交換分區(qū)
4、文件。</p><p> ?。?)加載第2塊硬盤(8G),該硬盤分為3個分區(qū),1個主分區(qū)(2G)和2個邏輯分區(qū)(分別為3G)。</p><p> ?。?)新建目錄/mnt/ljp1,/mnt/ljp2,把第2塊硬盤的邏輯分區(qū)1和邏輯分區(qū)2分別掛載到/mnt/ljp1和/mnt/ljp2(要求系統(tǒng)啟動后可以自動掛載分區(qū))。</p><p> 2、(必做)在根目錄下有
5、四個文件 m1.txt,m2.txt,m3.txt,m4.txt,用 Shell 編程,實現(xiàn)自動 創(chuàng)建 m1,m2,m3,m4 四個目錄,并將 m1.txt,m2.txt,m3.txt,m4.txt 四個文件分別拷貝到各自相應的目錄下。</p><p> 3、(必做)編寫一個 Shell 程序,用戶輸入1個數(shù)字,實現(xiàn)如下功能:</p><p> (1)計算從1到用戶輸入數(shù)字的和。(1+
6、2+3+…n)</p><p> (2)計算從1到用戶輸入數(shù)字的所有奇數(shù)數(shù)字的和。(1+3+5…)</p><p> 4、(必做)編寫一個 Shell 程序,實現(xiàn)如下功能:</p><p> (1). 當運行一個程序的時候,這個程序會讓使用者選擇 Y 或 N ;</p><p> (2)如果使用者輸入 Y 或 y 時,就顯示『 OK,
7、 continue 』</p><p> (3)如果使用者輸入 n 或 N 時,就顯示『 Oh, interrupt !』</p><p> ?。?)如果不是 Y/y/N/n 之內(nèi)的其他字節(jié),就顯示『 I don't know what your choice is 』(利用中括號、 && 與 || 來實現(xiàn))</p><p> 5、(必做
8、)某系統(tǒng)管理員需每天做一定的重復工作,請按照下列要求,編制一個解決方案:</p><p> (1)在下午 4 :50 刪除/abc 目錄下的全部子目錄和全部文件;</p><p> ?。?)從早 8:00~下午 6:00 每小時讀取/xyz 目錄下 x1 文件中每行第一個域的全部數(shù)據(jù)加入 到/backup 目錄下的 bak01.txt 文件內(nèi);</p><p>
9、?。?)每逢星期一下午 5:50 將/data 目 錄 下 的所 有 目 錄 和 文 件 歸檔 并 壓 縮 為 文 件 :backup.tar.gz;</p><p> ?。?)在下午 5:55 將 IDE 接口的 CD-ROM 卸載(假設:CD-ROM 的設備名為 hdc);</p><p> ?。?)在早晨 8:00 前開機后啟動。</p><p> (注:使
10、用計劃任務cron來實現(xiàn))</p><p> 6、(選做)使用者輸入一個文檔名,做出以下判斷:</p><p> ?。?). 這個文件是否存在,若不存在則給予一個“Filename does not exist”的信息,并中斷程序;</p><p> (2). 若這個文件存在,則判斷他是個文件或目錄,結(jié)果輸出“Filename is regular file”或
11、“Filename is directory”;</p><p> ?。?). 判斷一下,運行者的身份對這個文件或目錄所擁有的權限,并輸出權限數(shù)據(jù)?。ㄗ⒁饫?test 與 && 還有 || 等標志?。?lt;/p><p> 7、(選做)撰寫一支程序,他的作用是:</p><p> 1.) 先查看一下 /root/test/logical 這個名稱是
12、否存在;</p><p> 2.) 若不存在,則創(chuàng)建一個文件,使用 touch 來創(chuàng)建,創(chuàng)建完成后離開; </p><p> 3.) 如果存在的話,判斷該名稱是否為文件,若為文件則將之刪除后創(chuàng)建一個目錄,檔名為 logical ,之后離開; </p><p> 4.) 如果存在的話,而且該名稱為目錄,則移除此目錄!</p><p>
13、8、(選做)(任選其一)</p><p> ?。?)編寫一個 Shell 程序,鍵盤輸入兩個數(shù)及+、-、*、與/中的任一運算符,計算這兩個數(shù)的運算 結(jié)果。</p><p> ?。?)編寫 4 個函數(shù)分別進行算術運算+、-、*、/,并編寫一個菜單,實現(xiàn)運算命令。</p><p> 9、(選做)編寫一個 Shell 程序,呈現(xiàn)一個菜單,有 0-5 共 6 個命令選項,
14、1 為掛載 U 盤,2 為 卸載 U 盤,3 為顯示 U 盤的信息,4 把硬盤中的文件拷貝到 U 盤,5 把 U 盤中的文件拷貝到硬盤 中,選 0 為退出。程序分析:把此程序分成題目中要求的 6 大功能模塊,另外加一個菜單顯示及選擇的主模板。</p><p> 第 1章 Shell 腳本編程</p><p> ??Shell 命令行的運行</p><p>
15、??編寫、修改權限和執(zhí)行 Shell 程序的步驟</p><p> ??在 Shell 程序中使用參數(shù)和變量</p><p> ??表達式比較、循環(huán)結(jié)構(gòu)語句和條件結(jié)構(gòu)語句</p><p> ??在 Shell 程序中使用函數(shù)和調(diào)用其他 Shell 程序</p><p> 1-1Shell 命令行書寫規(guī)則</p>
16、<p> ??Shell 命令行的書寫規(guī)則</p><p> 對 Shell 命令行基本功能的理解有助于編寫更好的 Shell 程序,在執(zhí)行 Shell 命令時多個命 令可以在一個命令行上運行,但此時要使用分號(;)分隔命令,例如:</p><p> [root@localhost root]# ls a* -l;free;df</p><p>
17、; 長 Shell 命令行可以使用反斜線字符(\)在命令行上擴充,例如:</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> “>”符號是自動產(chǎn)生的,而不是輸入的。</p><p> 1-2 編寫/修改權限及執(zhí)行 Shell 程序的步驟</p><p> ??編寫 Shell 程序</p><p> ??執(zhí)行 Shell 程序</p><p> Shell 程序有很多類似 C 語言和其他
19、程序設計語言的特征,但是又沒有程序語言那樣復雜。 Shell 程序是指放在一個文件中的一系列 Linux 命令和實用程序。在執(zhí)行的時候,通過 Linux 操 作系統(tǒng)一個接一個地解釋和執(zhí)行每條命令。首先,來編寫第一個 Shell 程序,從中學習 Shell 程序的編寫、修改權限、執(zhí)行過程。</p><p> 1-2-1 編輯 Shell 程序</p><p> 編輯一個內(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 語句中執(zhí)行 Shell 命令 date,則需要在 date</p><p> 命令前加符號“&”,其中%B%d%A 為輸入
22、格式控制符。</p><p> 1-2-2 建立可執(zhí)行程序</p><p> 編輯完該文件之后不能立即執(zhí)行該文件,需給文件設置可執(zhí)行程序權限。使用如下命令。</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 的方法就是把它作為一個參數(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 的這個目錄添加到整個 環(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> 實例 1-1:編寫一個 Shell 程序 mkf,此程序的功能是:顯示 root 下的文件</p><p> 信息,然后建立一個 kk 的文件夾,在此文件夾下建立一個文件 aa,修改此文件的權限為可執(zhí)行。 分析:此 Shell 程序中需要依次執(zhí)行下列命令為:</p><p> 進入 root 目錄:cd /root</p><p>
28、; 顯示 root 目錄下的文件信息:ls –l</p><p> 新建文件夾 kk: mkdir kk</p><p> 進入 root/kk 目錄:cd kk</p><p> 新建一個文件 aa: vi aa #編輯完成后需手工保存 修改 aa 文件的權限為可執(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ù)。Shell</p><p> 程序中的參數(shù)分為位置參數(shù)和內(nèi)部參數(shù)等。</p><p> 1-3-1 位置參數(shù)</p><p> 由系統(tǒng)提供的參數(shù)稱為位置參數(shù)。位置參數(shù)的值可以用$N 得到,N 是一個數(shù)字,如果為 1, 即$1。類似 C 語言中的數(shù)組,Linux 會把輸入的命令字符串分段并給每段進
32、行標號,標號從 0 開 始。第 0 號為程序名字,從 1 開始就表示傳遞給程序的參數(shù)。如$0 表示程序的名字,$1 表示傳 遞給程序的第一個參數(shù),以此類推。</p><p> 1-3-2 內(nèi)部參數(shù)</p><p> 上述過程中的$0 是一個內(nèi)部變量,它是必須的,而$1 則可有可無,最常用的內(nèi)部變量有$0、</p><p> $#、$?、$*,它們的含義如下。
33、</p><p> ??$0:命令含命令所在的路徑。</p><p> ??$1: 傳遞給程序的第1個參數(shù)。</p><p> ??$2: 傳遞給程序的第2個參數(shù)。(以此類推)</p><p> ??$#:傳遞給程序的總的參數(shù)數(shù)目。</p><p> ??$?:Shell 程序在 Shell 中退出
34、的情況,正常退出返回 0,反之為非 0 值。</p><p> ??$*:傳遞給程序的所有參數(shù)組成的字符串。</p><p> ??$$:當前進程的進程號。</p><p> 實例 1-2:編寫一個 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 個參數(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> 注意:命令不計算在參數(shù)內(nèi)。</p><p> 實例 1-3:利用內(nèi)部變量和位置參數(shù)編寫一個名為 test2 的簡單刪除程序,如刪除</p><p> 的文件名為 a,則在終端中輸入的命令為:test
39、 a</p><p> 分析:除命令外至少還有一個位置參數(shù),即$#不能為 0,刪除不能為$1,程序設計過程如下。</p><p> (1) 用 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)對文件進行壓縮</p><p> mv $1.gz $HOME/dustbin //移動到回收站</p&g
41、t;<p> echo “File $1 is deleted !”</p><p><b> fi</b></p><p><b> ?。?) 設置權限</b></p><p> [root@localhost bin]#chmod +x test2 (3) 運行</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> ??變量的訪問</b>
43、;</p><p><b> ??變量的輸入</b></p><p> 1-4-1 變量的賦值</p><p> 在 Shell 編程中,所有的變量名都由字符串組成,并且不需要對變量進行聲明。要賦值給 一個變量,其格式如下:</p><p><b> 變量名=值</b></p>
44、<p><b> 注意:</b></p><p> 等號(=)前后沒有空格 例如:</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 訪問變量值</p><p> 如果要訪問變量值,可以在變量前面加一個美元符號“$”,例如:</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> 一個變量給另一個變量賦值可以寫成:</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 程序設計中,變量的值可以作為字符串從鍵盤讀入,其格式為:</p><p> read 變量 例如:</p&
48、gt;<p> [root@localhost bin]#read str</p><p> read 為讀入命令,它表示從鍵盤讀入字符串到 str。</p><p> 實例 1-4:編寫一個 Shell 程序 test3,程序執(zhí)行時從鍵盤讀入一個目錄名,然后 顯示這個目錄下所有文件的信息。</p><p><b> 分析:<
49、/b></p><p> 存放目錄的變量為 DIRECTORY,其讀入語句為:</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)設置權限</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> 輸入路徑時需間隔符“/”</p><p><b> 結(jié)果。</b></p><p> 實例 1-5:運行程
52、序 test4,從鍵盤讀入 x、y 的值,然后做加法運算,最后輸出</p><p> (1)用 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> (2)設置權限</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> 表達式 total=`expr $total +$num`及 num=`expr $num +1`中的符
55、號“`”為鍵盤左上角的</p><p><b> “`”鍵。</b></p><p><b> 1、特殊符號</b></p><p><b> (1)引用符號</b></p><p> 在bash中,許多字符有特殊的含義。如果希望bash忽略某些字符的特殊含義,可以使用
56、一種稱為“引用”的技術,通知Shell暫時忽略被引用字符的特殊含義,將其作為普通字符處理。</p><p> Shell在使用“引用”時用到三種字符:轉(zhuǎn)義符“\”、單引號“’”和雙引號“””</p><p> 引用符號1 — 轉(zhuǎn)義符“\”</p><p> 將轉(zhuǎn)義符“\”放在Shell特殊字符之前,則Shell忽略該字符原有的特殊含義。</p>
57、<p> 用這種方式時,必須在每一個欲忽略其特殊含義的特殊字符之前添加一個“\”字符。</p><p> 引用符號2 — 單引號“’”</p><p> 將字符串放在一對單引號之間,則單引號內(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> 引用符號3 — 雙引號“””</p><p> 使用雙引號的引用與單引號的類似,括在雙引號內(nè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> 命令替換符“`”(反引號)的作用跟引用字符的作用相反。反引號括起來的字符串被Shell解釋為命令行,在執(zhí)行時,Shell首先執(zhí)行該命令行,并以它的標準輸出結(jié)果取代整個反引號(包括兩個反引號)部分。</p><p> 這個字符所對應的鍵一般位于鍵盤的左上角。</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命令是一個手工命令行計數(shù)器,用于在UNIX/LINUX下求表達式變量的值,一般用于整數(shù)值,也可用于字符串。</p><p><b> 格式為:</b></p><p> expr Expression</p><p> (命令讀入Expression 參數(shù),計算它的值,然后將結(jié)果寫入到標準輸
65、出)</p><p><b> 參數(shù)應用規(guī)則:</b></p><p><b> 用空格隔開每個項;</b></p><p> 用 \ (反斜杠) 放在 shell 特定的字符前面;</p><p> 對包含空格和其他特殊字符的字符串要用引號括起來</p><p>
66、 expr用法實例講解 </p><p><b> (1)整數(shù)運算</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 (使用乘號時,必須用反斜線屏蔽其特定含義。)</p><p><b> 90</b></p><p> # ex
68、pr 30 * 3</p><p> expr: Syntax error</p><p><b> ?。?)計算字串長度</b></p><p> # expr length “this is a test”</p><p><b> 14</b></p><p>&
69、lt;b> ?。?)增量計數(shù)</b></p><p> 說明:expr在循環(huán)中用于增量計算。先將變量初始化為0,然后循環(huán)值加1,反引號的用法為命令替代。</p><p><b> # LOOP=0</b></p><p> # LOOP=`expr $LOOP + 1`</p><p> 1-5
70、 表達式的比較</p><p><b> ??字符串操作符</b></p><p><b> ??邏輯運算符</b></p><p> ??用 tes t 比較的運算符</p><p><b> ??數(shù)字比較符</b></p><p>
71、<b> ??文件操作符</b></p><p> 在 Shell 程序中,通常使用表達式比較來完成邏輯任務。表達式所代表的操作符有字符操作 符、數(shù)字操作符、邏輯操作符、以及文件操作符。其中文件操作符是一種 Shell 所獨特的操作符。 因為 Shell 里的變量都是字符串,為了達到對文件進行操作的目的,于是才提供了文件操作符。</p><p> 1-5-1
72、字符串比較</p><p> 作用:測試字符串是否相等、長度是否為零,字符串是否為 NULL。 常用的字符串操作符如表 1-1所示.。</p><p> 表 1-1常用的字符串操作符</p><p> 實例 1-6:從鍵盤輸入兩個字符串,判斷這兩個字符串是否相等,如相等輸出。</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 命令的測試功能</p><p> test是Shell程序中的一個表達式,用test命令去判斷文件的存在與性質(zhì),變量的相互關系;如果條件為真,則返回一個 0 值。如果表達式不為真,則返回一個大于 0 的值, 也可以將其稱為假值。檢查最后所執(zhí)行命令的狀態(tài)的最簡便方法是使用 $? 值。
76、</p><p> test 命令期望在命令行中找到一個參數(shù),當 shell 沒有為變量賦值時,則將該變量視為空。這意味著在處理腳本時,一旦腳本尋找的參數(shù)不存在,則 test 將報告該錯誤。</p><p> test 和 [ 命令</p><p> 雖然 Linux 和 UNIX 的每個版本中都包含 test 命令,但該命令有一個更常用的別名 — 左方括號:
77、[。test 及其別名通常都可以在 /usr/bin 或 /bin (取決于操作系統(tǒng)版本和供應商)中找到。當您使用左方括號而非 test 時,其后必須始終跟著一個空格、要評估的條件、一個空格和右方括號。右方括號不是任何東西的別名,而是表示所需評估參數(shù)的結(jié)束。條件兩邊的空格是必需的,這表示要調(diào)用 test。</p><p> test 和 [ 的語法如下:test expression</p>&l
78、t;p><b> 測試的標志代表意義</b></p><p> 1. 關於某個檔名的『文件類型』判斷,如 test -e filename 表示存在否</p><p> -e 該『檔名』是否存在?(常用)</p><p> -f 該『檔名』是否存在且為文件(file)?(常用)</p><p> -d 該
79、『檔名』是否存在且為目錄(directory)?(常用)</p><p> -b 該『檔名』是否存在且為一個 block device 裝置?</p><p> -c 該『檔名』是否存在且為一個 character device 裝置?</p><p> -S 該『檔名』是否存在且為一個 Socket 文件?</p><p> -p
80、該『檔名』是否存在且為一個 FIFO (pipe) 文件?</p><p> -L 該『檔名』是否存在且為一個連結(jié)檔?</p><p> 2. 關於文件的權限偵測,如 test -r filename 表示可讀否 (但 root 權限常有例外)</p><p> -r 偵測該檔名是否存在且具有『可讀』的權限?</p><p> -w
81、偵測該檔名是否存在且具有『可寫』的權限?</p><p> -x 偵測該檔名是否存在且具有『可運行』的權限?</p><p> -u 偵測該檔名是否存在且具有『SUID』的屬性?</p><p> -g 偵測該檔名是否存在且具有『SGID』的屬性?</p><p> -k 偵測該檔名是否存在且具有『Sticky bit』的屬性?<
82、;/p><p> -s 偵測該檔名是否存在且為『非空白文件』?</p><p> 3. 兩個文件之間的比較,如: 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 的判定上。主要意義在判定,兩個文件是否均指向同一個 inode!</p><p> 4. 關於兩個整數(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)兩狀況同時成立!例如 test -r file -a -x file,則 file 同時具有 r</p><p> 與 x 權限時,才回傳 true。</p><p> -o (or)兩狀況任何一個成立!例如 test -r file -o -x file,則 file 具有 r</p><p> 或 x
88、權限時,就可回傳 true。</p><p> ! 反相狀態(tài),如 test ! -x file ,當 file 不具有 x 時,回傳 true</p><p> (1)用 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 $? #?保存前一個命令的返回碼</p><p><b> ?。?)設置權限</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> ”[”后面和”]”前面及等號“=“的前后都應有一個空格;注意這里是程序的退出情況,</p><p> 如果 ar1 和 ar2 的字符串是不想等的非正常退出,輸出結(jié)果為 1。</p><p> 實例 1-7: 比較字符串長度是否大于零</p><p> ?。?)用 vi 編輯程序</p><
92、p> [root@localhost bin]#vi test6</p><p> #! /bin/Bash read ar</p><p> [ -n “$ar” ]</p><p> echo $? //保存前一個命令的返回碼</p><p><b> ?。?)設置權限</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> 運行結(jié)果 1 表示 ar 的小于等于零,0 表示 ar 的長度大于零。</p><p> 1-5-2 數(shù)字比較</p><p> 在 Bash Shell 編程中的關系運算有別于其他編程語言,用表 1-2 中的運算符用 test 語句 表示大小的比較。</p><p> 表 1-2
95、 用 test 比較的運算符</p><p> 運算符號 含 義</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> 實例 1-8:比較兩個數(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> ?。?)設置權限</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 程序設計中的邏輯運算符如表 1-3 所示。</p><p> 1-3 Shell 中的邏輯運算符</p>
101、<p> 實例 1-9:分別給兩個字符變量賦值,一個變量賦予一定的值,另一個變量為空,</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 $? #保存前一個命令的返回碼</p><p> [ “$ part1” –o “$ part2”]</p><p><b> echo
103、$?</b></p><p><b> ?。?)設置權限</b></p><p> [root@localhost bin]#chmod +x test8</p><p><b> (3)執(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> 文件測試操作表達式通常是為了測試文件的信息,一般由腳本來決定文件是否應該備份、 復制或刪除。由于 test 關于文件的操作符有很多,在表 1-4 中只列舉一
105、些常用的操作符。</p><p> 表 1-4 文件測試操作符</p><p> 實例 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 $? #保存前一個命令的返回碼</p><p><b> ?。?)設置權限</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> 運行結(jié)果是返回參數(shù)“$?”,結(jié)果 1 表示判斷的目錄不存在,0 表示判斷的目錄不存在。</p><p> 實例 1-11:編寫一個 Shell 程序 test10,輸入一個字符串,如果是目錄
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> (2)設置權限</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)語句</p><p> ??Shell 的循環(huán)語句</p><p> Shell 常見的循環(huán)語句有 for 循環(huán)、while 循環(huán)語句和 until 循環(huán)。</p><p> 1-6-1 for 循環(huán)</p><p&
114、gt;<b> 語法:</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)部用來指列表當中的對象。</p><p> 列表是在 for 循環(huán)的內(nèi)部要操作的對象,可以是字符串也可以是文件,如果是文件則為文件 名。</p><p><b> 兩行輸出。</b></p><p> 實例 1-12:在列表中的值:a,b
116、,c,e,I,2,4,6,8 用循環(huán)的方式把字符與數(shù)字分成</p><p> (1)用 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> ?。?)設置權限</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> 實例 1-13:刪除垃圾箱中的所有文件。</p><p> 分析:在本機中,垃圾箱的位置
119、是在$HOME/.Trash 中,因而是在刪除$HOME/.Trash 列表當 中的所有文件,程序腳本如下。</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> (2)設置權限<
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> 實例 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> ?。?)設置權限</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 語句中的雙括號不能省,最后的分號可有可無,表達式 total=`expr $total + $j`的加 號兩邊的空格不能省,否則會成為字符串的連接。</p><p> 1-6-2 while 循環(huán)</p><p><b
126、> 語法:</b></p><p><b> while 表達式</b></p><p><b> do</b></p><p><b> 操作</b></p><p><b> done</b></p><
127、p> 只要表達式為真,do 和 done 之間的操作就一直會進行。</p><p> 實例 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> ?。?)設置權限</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> 語法:</b></p><p><b> until 表達式</b></p><p> do 操作 done</p><p> 重復 do 和 done 之間的操作直到表達式成立為
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- linux操作系統(tǒng)課程設計
- linux課程設計報告--linux操作系統(tǒng)應用
- 操作系統(tǒng)課程設計——操作系統(tǒng)課程設計模擬操作系統(tǒng)
- 操作系統(tǒng)課程設計-- 操作系統(tǒng)
- 課程設計---操作系統(tǒng)課程設計之linux磁盤空間管理
- linux課程設計---linux操作系統(tǒng)u盤驅(qū)動設計分析報告
- 操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計
- linux操作系統(tǒng)應用課程整體設計
- 操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計
- linux操作系統(tǒng)課程設計--頁面置換算法模擬
- 操作系統(tǒng)課程設計linux二級文件系統(tǒng)設計
- linux操作系統(tǒng)課程整體教學設計
- linux操作系統(tǒng)應用課程整體設計
- 內(nèi)存管理(操作系統(tǒng))操作系統(tǒng)課程設計
- 課程設計--linux操作系統(tǒng)安全性的研究
- 操作系統(tǒng)課程設計報告--linux二級文件系統(tǒng)設計
評論
0/150
提交評論