shell腳本教程詳細(xì)講解(很好)_第1頁(yè)
shell腳本教程詳細(xì)講解(很好)_第2頁(yè)
shell腳本教程詳細(xì)講解(很好)_第3頁(yè)
shell腳本教程詳細(xì)講解(很好)_第4頁(yè)
shell腳本教程詳細(xì)講解(很好)_第5頁(yè)
已閱讀5頁(yè),還剩75頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、College of Information Science and Engineering Shandong Agricultural University SHELL腳本編程2 2shellshell腳本能提高用戶(hù)操作和管理員腳本能提高用戶(hù)操作和管理員進(jìn)行系統(tǒng)管理的效率,一般步驟進(jìn)行系統(tǒng)管理的效率,一般步驟1.1. 編輯器編寫(xiě)腳本程序編輯器編寫(xiě)腳本程序2.2. shellshell做解釋程序,非交互地執(zhí)行腳本做解釋程序,非交互地執(zhí)行腳本,兩種執(zhí)行方式:,兩種執(zhí)行方式:1.1. 用用shsh命令執(zhí)行腳本文件命令執(zhí)行腳本文件2.2. 給腳本文件添加執(zhí)行權(quán)限,用給腳本文件添加執(zhí)行權(quán)限,用././

2、命令執(zhí)行命令執(zhí)行3 3HELLO WORLD!HELLO WORLD!1.1. vi hello.shvi hello.shn 按按i i進(jìn)入插入模式進(jìn)入插入模式n 輸入輸入echo “hello world!”echo “hello world!”n : :輸入輸入wqwq保存退出保存退出2.2. sh hello.shsh hello.sh或者或者chmod 755 hello.shchmod 755 hello.sh./hello.sh./hello.sh4 4一、一、VIVI編輯器編輯器1.1. VIVI的三種工作模式的三種工作模式2.2. VIVI的啟動(dòng)的啟動(dòng)3.3. VIVI的退出

3、的退出4.4. VIVI的文本的文本編輯編輯5.5. VIVI命令模式下的操作命令模式下的操作6.6. VIVI行命令模式下的操作行命令模式下的操作VI 編輯器的使用編輯器的使用5 5n 系統(tǒng)配置文件、系統(tǒng)配置文件、shellshell腳本文件等都是文本文腳本文件等都是文本文件,編輯它們都要使用文本編輯器。件,編輯它們都要使用文本編輯器。n 在在LinuxLinux系統(tǒng)中有多種文本編輯器,其中既有系統(tǒng)中有多種文本編輯器,其中既有字符界面如的字符界面如的VIVI、EMACASEMACAS等,也有圖形界面的等,也有圖形界面的如如“附件附件”菜單下的菜單下的“文本編輯器(文本編輯器(geditged

4、it)”等,用戶(hù)可以根據(jù)自己的喜好選擇使用。等,用戶(hù)可以根據(jù)自己的喜好選擇使用。n 學(xué)習(xí)學(xué)習(xí)vivi的方法:的方法:vivi的命令太多且難以記憶,而實(shí)際上真正的命令太多且難以記憶,而實(shí)際上真正經(jīng)常使用的命令并不是太多,只要掌握幾個(gè)關(guān)經(jīng)常使用的命令并不是太多,只要掌握幾個(gè)關(guān)鍵的并加以適當(dāng)練習(xí)很快就上手使用鍵的并加以適當(dāng)練習(xí)很快就上手使用vivi。6 6為什么選擇為什么選擇VIVIn 就使用的方便性而言,有比就使用的方便性而言,有比vivi更好的編輯器,還要圖更好的編輯器,還要圖形化的形化的editedit,為什么還要用,為什么還要用vivi?p歷史久遠(yuǎn),功能強(qiáng)大,在有些情況下系統(tǒng)中能夠找歷史久遠(yuǎn)

5、,功能強(qiáng)大,在有些情況下系統(tǒng)中能夠找到的編輯器只有到的編輯器只有vivi;p用戶(hù)一旦熟悉后,使用非常方便;系統(tǒng)管理員使用用戶(hù)一旦熟悉后,使用非常方便;系統(tǒng)管理員使用正則表達(dá)式可以極大地提高工作效率,而學(xué)習(xí)正則表達(dá)式可以極大地提高工作效率,而學(xué)習(xí)vivi也也是掌握正則表達(dá)式的有效途徑。是掌握正則表達(dá)式的有效途徑。n由于由于vivi的版本不同,其命令格式、功能和用法會(huì)有一的版本不同,其命令格式、功能和用法會(huì)有一些差別。些差別。ShellShell中執(zhí)行中執(zhí)行vivi命令,命令,RedHatRedHat系統(tǒng)實(shí)際上是執(zhí)系統(tǒng)實(shí)際上是執(zhí)行行vimvim,它是傳統(tǒng),它是傳統(tǒng)vivi的增強(qiáng)版本的增強(qiáng)版本7 7

6、1 1、VIVI的三種工作模式的三種工作模式n 命令模式命令模式p啟動(dòng)啟動(dòng)VIVI默認(rèn)進(jìn)入命令模式。此時(shí)界面不能編輯默認(rèn)進(jìn)入命令模式。此時(shí)界面不能編輯,只能接受命令,只能接受命令( (鍵入的命令看不到鍵入的命令看不到)p文件的保存,退出,文本的刪除、復(fù)制、搜索文件的保存,退出,文本的刪除、復(fù)制、搜索等操作等操作n 輸入模式輸入模式p編輯模式編輯模式 p命令模式下用命令模式下用i(sert),a(ppend)i(sert),a(ppend),o,so,s等均可進(jìn)等均可進(jìn)入該模式。按入該模式。按escesc返回命令模式返回命令模式n 行編輯模式行編輯模式p實(shí)際上也是命令模式的一種,在實(shí)際上也是命令

7、模式的一種,在命令模式下輸命令模式下輸入冒號(hào)入冒號(hào)進(jìn)入一個(gè)命令行,進(jìn)入一個(gè)命令行,可顯示地輸入命令可顯示地輸入命令(所以也有些書(shū)認(rèn)為是兩種工作模式)。所以也有些書(shū)認(rèn)為是兩種工作模式)。三種模式可自由切換,一般切換命令就是操作的英文單詞三種模式可自由切換,一般切換命令就是操作的英文單詞的首字母的首字母8 82 2、VIVI的啟動(dòng)的啟動(dòng)n 啟動(dòng)命令:?jiǎn)?dòng)命令:vi my.txtvi my.txtn 如果文件存在,則如果文件存在,則vivi顯示文件內(nèi)容并等待用戶(hù)顯示文件內(nèi)容并等待用戶(hù)的命令。的命令。n 如果指定的文件不存在,則如果指定的文件不存在,則vivi將告知用戶(hù)這是將告知用戶(hù)這是未命名的文件,

8、并進(jìn)入一個(gè)空白的界面。未命名的文件,并進(jìn)入一個(gè)空白的界面。n 啟動(dòng)啟動(dòng)vivi時(shí)都是默認(rèn)處于命令模式。用戶(hù)必須使時(shí)都是默認(rèn)處于命令模式。用戶(hù)必須使用命令切換到文本輸入模式才能進(jìn)行輸入編輯用命令切換到文本輸入模式才能進(jìn)行輸入編輯,或者可執(zhí)行刪除、復(fù)制等編輯命令。,或者可執(zhí)行刪除、復(fù)制等編輯命令。vi vi R file_nameR file_name,以只,以只讀讀方式打方式打開(kāi)開(kāi)文件文件9 93 3、VIVI的退出的退出n 冒號(hào)進(jìn)命令行模式下:冒號(hào)進(jìn)命令行模式下::q! 不存檔強(qiáng)制退出。不存檔強(qiáng)制退出。:w 保存但不退出保存但不退出,w w(rite)后后可加所要存檔的文檔可加所要存檔的文檔名

9、。名。:wq 存檔后退出。存檔后退出。p 命令模式下按命令模式下按zz,功能與功能與 :wq 相同。相同。p :x 與與:wq相同相同n 命令模式:命令模式:ZZZZ、ZQZQ保存保存/ /不保存退出不保存退出10104 4、怎么編輯、怎么編輯必須從命令模式轉(zhuǎn)入插入模式才能進(jìn)行輸入必須從命令模式轉(zhuǎn)入插入模式才能進(jìn)行輸入編輯,可用命令有編輯,可用命令有:n 新增新增 (append)pa :從光標(biāo)所在位置:從光標(biāo)所在位置后面后面開(kāi)始新增資料開(kāi)始新增資料pA: 從光標(biāo)所在從光標(biāo)所在行最后面的行最后面的地方開(kāi)始新增資料。地方開(kāi)始新增資料。n 插入插入 (insert)pi: 從光標(biāo)所在位置從光標(biāo)所在

10、位置前面前面開(kāi)始插入資料開(kāi)始插入資料pI :從光標(biāo)所在:從光標(biāo)所在行行的第一個(gè)非空白字元的第一個(gè)非空白字元前面前面開(kāi)始開(kāi)始插入資料。插入資料。n 開(kāi)始開(kāi)始 (open)po :在光標(biāo)所:在光標(biāo)所在行下在行下新增一列并進(jìn)入輸入模式。新增一列并進(jìn)入輸入模式。O: 在光標(biāo)所在光標(biāo)所在行上方在行上方新增一列并進(jìn)入輸入模式。新增一列并進(jìn)入輸入模式。冒號(hào)進(jìn)入行命令模式,輸入冒號(hào)進(jìn)入行命令模式,輸入set nu可設(shè)置可設(shè)置vi顯示行號(hào)顯示行號(hào)11115、命令模式下的操作:刪除與修改、命令模式下的操作:刪除與修改n x: 刪除光標(biāo)所在字符刪除光標(biāo)所在字符n dw dw 刪除一個(gè)單詞刪除一個(gè)單詞n dd :刪除

11、光標(biāo)所在的行:刪除光標(biāo)所在的行n s s:刪除光標(biāo)所在字節(jié),:刪除光標(biāo)所在字節(jié),并進(jìn)入輸入模式并進(jìn)入輸入模式# #表示數(shù)字表示數(shù)字n#x #x 刪除幾個(gè)字符,如刪除幾個(gè)字符,如3x3xn#dw #dw 刪除幾個(gè)單詞,如刪除幾個(gè)單詞,如3dw3dw表示刪除三個(gè)單詞表示刪除三個(gè)單詞n#dd #dd 刪除多個(gè)行,如刪除多個(gè)行,如3dd 3dd 表示刪除光標(biāo)行及光標(biāo)的表示刪除光標(biāo)行及光標(biāo)的下兩行下兩行nd$ d$ 刪除光標(biāo)到行尾的內(nèi)刪除光標(biāo)到行尾的內(nèi)容容d d光標(biāo)鍵:光標(biāo)鍵:左:刪除光標(biāo)前面的字符;左:刪除光標(biāo)前面的字符;右:刪除光標(biāo)所在的字符;右:刪除光標(biāo)所在的字符;上:將當(dāng)前行與上一行刪除;上:將

12、當(dāng)前行與上一行刪除;下:當(dāng)前行與下一行刪除下:當(dāng)前行與下一行刪除ndnd上下光標(biāo)鍵上下光標(biāo)鍵: :刪除當(dāng)前行之上、下的幾行文刪除當(dāng)前行之上、下的幾行文本(包括當(dāng)前行)本(包括當(dāng)前行)u:恢復(fù)剛才被修改的文本恢復(fù)剛才被修改的文本 U:恢復(fù)光標(biāo)所在行的所有修改:恢復(fù)光標(biāo)所在行的所有修改.:重復(fù)上一次命令的操作重復(fù)上一次命令的操作1212命令模式下的操作:命令模式下的操作:文本復(fù)制、粘貼文本復(fù)制、粘貼n 復(fù)制命令:復(fù)制命令:y ypyy: yy: 復(fù)制整行復(fù)制整行pyw:yw:復(fù)制光標(biāo)所在的單詞復(fù)制光標(biāo)所在的單詞pnywnyw:復(fù)制包括光標(biāo)所在的:復(fù)制包括光標(biāo)所在的n n個(gè)單詞個(gè)單詞pnyy:nyy

13、:復(fù)制包括當(dāng)前行在內(nèi)的復(fù)制包括當(dāng)前行在內(nèi)的n n行行n 粘貼命令粘貼命令pP Pn 光標(biāo)移動(dòng)光標(biāo)移動(dòng)ph h、j j、k k、l lpnGnG:移動(dòng)到底:移動(dòng)到底n n行行首行行首13136 6、行、行命令模式下的操作:命令模式下的操作:字符串的查找、替換字符串的查找、替換n :/string:/string搜索指定的字符串。搜索指定的字符串。p按鍵按鍵n n:繼續(xù)進(jìn)行搜索:繼續(xù)進(jìn)行搜索 如果寫(xiě)的是斜杠(如果寫(xiě)的是斜杠(/ /):按):按n n會(huì)從當(dāng)前位置向后查找會(huì)從當(dāng)前位置向后查找;如果寫(xiě)的是問(wèn)號(hào)(?),按;如果寫(xiě)的是問(wèn)號(hào)(?),按n n鍵則從當(dāng)前位置向鍵則從當(dāng)前位置向前查找前查找n 查找且

14、替換查找且替換p:%s /SEARCH /REPLACE:%s /SEARCH /REPLACE把文檔中所有把文檔中所有SEARCHSEARCH替換成替換成REPLACEREPLACE;p:#,# s /SEARCH /REPLACE /g :#,# s /SEARCH /REPLACE /g 號(hào)表示數(shù)字,表示從多少行到多少行,把號(hào)表示數(shù)字,表示從多少行到多少行,把SEARCHSEARCH替換成替換成REPLACEREPLACE;p:s /SEARCH /REPLACE /g :s /SEARCH /REPLACE /g 把把當(dāng)前光標(biāo)當(dāng)前光標(biāo)所在行中的所在行中的SEARCHSEARCH單詞,替

15、換成單詞,替換成REPLACEREPLACE,并把所有,并把所有SEARCHSEARCH高亮顯示高亮顯示14147 7、設(shè)置、設(shè)置vivi 全局的配置文件位于全局的配置文件位于/etc/vim/vimrc(/etc/vim/vimrc(或者或者/etc/vimrc)/etc/vimrc) 也可以擁有自己獨(dú)立的配置文件,配置文件位也可以擁有自己獨(dú)立的配置文件,配置文件位“/.vimrc”/.vimrc”,如果沒(méi)有該文件,也可以直接用如下,如果沒(méi)有該文件,也可以直接用如下命令創(chuàng)建并編輯命令創(chuàng)建并編輯比如:比如:set nu set nu 顯示行號(hào)顯示行號(hào)set ruler set ruler 顯示

16、光標(biāo)位置顯示光標(biāo)位置set undolevel set undolevel 顯示光標(biāo)位置顯示光標(biāo)位置set smartindent set smartindent 智能縮進(jìn)智能縮進(jìn)syntax on(syntax on(或或syn on) syn on) 語(yǔ)法高亮語(yǔ)法高亮1515文本輸入狀態(tài)文本輸入狀態(tài)命令狀態(tài)命令狀態(tài)行編輯狀態(tài)行編輯狀態(tài)按按ESC鍵鍵按按A,I,S,C,O等命令等命令按按“:”鍵鍵執(zhí)行非退出命執(zhí)行非退出命令,如令,如w三種模式間的轉(zhuǎn)換關(guān)系三種模式間的轉(zhuǎn)換關(guān)系1616案例練習(xí)案例練習(xí)n 1. 1. 請(qǐng)?jiān)谡?qǐng)?jiān)?/tmp /tmp 這個(gè)目錄下建立一個(gè)名為這個(gè)目錄下建立一個(gè)名為 vi

17、test vitest 的目錄;的目錄; n 2. 2. 進(jìn)入進(jìn)入 vitest vitest 這個(gè)目錄當(dāng)中;這個(gè)目錄當(dāng)中; n 3. 3. 將將 /etc/man.config /etc/man.config 拷貝到本目錄底下拷貝到本目錄底下n 4. 4. 使用使用 vi vi 開(kāi)啟本目錄下的開(kāi)啟本目錄下的 man.config man.config 這個(gè)檔案;這個(gè)檔案; n 5. 5. 在在 vi vi 中設(shè)定一下行號(hào);中設(shè)定一下行號(hào); n 6. 6. 移動(dòng)到第移動(dòng)到第 58 58 行,向右移動(dòng)行,向右移動(dòng) 40 40 個(gè)字符,請(qǐng)問(wèn)您看到的雙引個(gè)字符,請(qǐng)問(wèn)您看到的雙引號(hào)內(nèi)是什么目錄?號(hào)內(nèi)是

18、什么目錄? n 7. 7. 移動(dòng)到第一行,并且向下搜尋一下移動(dòng)到第一行,并且向下搜尋一下“bzip2”bzip2”這個(gè)字符串,請(qǐng)這個(gè)字符串,請(qǐng)問(wèn)他在第幾行?問(wèn)他在第幾行? n 8. 8. 接著下來(lái),我要將接著下來(lái),我要將 50 50 到到 100 100 行之間的行之間的 man man 改為改為 MANMAN,并,并且一個(gè)一個(gè)挑選是否需要修改,如何下達(dá)指令?且一個(gè)一個(gè)挑選是否需要修改,如何下達(dá)指令? n 9. 9. 修改完之后,突然反悔了,要全部復(fù)原,有哪些方法?修改完之后,突然反悔了,要全部復(fù)原,有哪些方法? n 10. 10. 我要復(fù)制我要復(fù)制 51 51 到到 60 60 行這十行的內(nèi)

19、容,并且貼到最后一行之行這十行的內(nèi)容,并且貼到最后一行之后;后; n 11. 11. 刪除刪除 11 11 到到 30 30 行之間的行之間的 20 20 行;行; n 12. 12. 將這個(gè)文件另存成一個(gè)將這個(gè)文件另存成一個(gè) man.test.config man.test.config 的文件;的文件; n 13. 13. 到第到第 29 29 行,并且刪除行,并且刪除 15 15 個(gè)字符;個(gè)字符; n 14. 14. 儲(chǔ)存后離開(kāi)儲(chǔ)存后離開(kāi)1717n 1. mkdir /tmp/vitest1. mkdir /tmp/vitestn 2. cd /tmp/vitest 2. cd /tmp

20、/vitest n 3. cp /etc/man.config . 3. cp /etc/man.config . n 4. vi man.config 4. vi man.config n 5. :set nu 5. :set nu n 6. 6. 先按下先按下 58G 58G 再按下再按下 40 40 會(huì)看到會(huì)看到 /dir/bin/foo /dir/bin/foo 這個(gè)字樣在這個(gè)字樣在雙引號(hào)內(nèi);雙引號(hào)內(nèi); n 7. 7. 先執(zhí)行先執(zhí)行 1G 1G 或或 gg gg 后,直接輸入后,直接輸入 /bzip2 /bzip2n 8. 8. 直接執(zhí)行直接執(zhí)行 :50,100s/man/MAN/gc

21、 :50,100s/man/MAN/gc 即可即可n 9. (1)9. (1)簡(jiǎn)單的方法可以一直按簡(jiǎn)單的方法可以一直按 u u 恢復(fù)到原始狀態(tài),恢復(fù)到原始狀態(tài),(2)(2)使用不使用不儲(chǔ)存離開(kāi)儲(chǔ)存離開(kāi) :q! :q! 之后,再重新讀取一次該文件;之后,再重新讀取一次該文件; n 10. 51G 10. 51G 然后再然后再 10yy 10yy 之后按下之后按下 G G 到最后一行,再到最后一行,再p p粘貼粘貼1010行行 n 11. 11G 11. 11G 之后,再給他之后,再給他 20dd 20dd即可刪除即可刪除 20 20 行了;行了; n 12. :w man.test.config

22、 12. :w man.test.config n 13. 29G 13. 29G 之后,再給他之后,再給他 15x 15x 即可刪除即可刪除 15 15 個(gè)字符;個(gè)字符; n 14. :wq!14. :wq!1818二、二、SHELLSHELL變量與語(yǔ)法變量與語(yǔ)法1.1. ShellShell概述概述2.2. shellshell變量和符號(hào)變量和符號(hào)3.3. shellshell控制流程語(yǔ)法控制流程語(yǔ)法4.4. shellshell中的輸出重定向中的輸出重定向5.5. 腳本實(shí)例腳本實(shí)例SHELL變量與語(yǔ)法變量與語(yǔ)法19191 1、shellshell的基本元素的基本元素(1 1) # #!/

23、bin/bash /bin/bash 必須的,指出必須的,指出shellshell的類(lèi)型的類(lèi)型(2 2)# # 注釋注釋?zhuān)? 3)變量)變量(4 4)控制)控制一、一、ShellShell概述概述一個(gè)一個(gè)shell腳本腳本vi clearup.sh#!/bin/bash# this is clearcd /var/logcat /dev/null/var/log/messages /dev/null Linux中的無(wú)限大的垃圾回收站中的無(wú)限大的垃圾回收站echo Logs cleaned up.20202 2、一般步驟:、一般步驟:(1 1)編輯文件)編輯文件(2 2)保存文件)保存文件(3

24、3)將文件賦予可執(zhí)行的權(quán)限)將文件賦予可執(zhí)行的權(quán)限(4 4)運(yùn)行及排錯(cuò))運(yùn)行及排錯(cuò)2121注意:注意:1.1. 一般以一般以.sh.sh為文件后綴。沒(méi)有也能執(zhí)行。為文件后綴。沒(méi)有也能執(zhí)行。2.2. 常見(jiàn)的兩種執(zhí)行方式常見(jiàn)的兩種執(zhí)行方式n ././文件名文件名 在當(dāng)前目錄下寫(xiě)明路徑執(zhí)行,要求文在當(dāng)前目錄下寫(xiě)明路徑執(zhí)行,要求文件必須有執(zhí)行權(quán)限,如件必須有執(zhí)行權(quán)限,如chmod 755 run.shchmod 755 run.sh./run.sh./run.shn sh sh 文件名文件名sh run.shsh run.sh3.3. 文件開(kāi)頭指定一個(gè)或多個(gè)解釋腳本程序的文件開(kāi)頭指定一個(gè)或多個(gè)解釋腳本

25、程序的shellshell,如,如#!/bin/bash#!/bin/bashn 如果指定,注意如果指定,注意/bin/bin不要漏了不要漏了“/”/”,否則用,否則用././方式執(zhí)行會(huì)找不到路徑。方式執(zhí)行會(huì)找不到路徑。n 不指定的話一般默認(rèn)以不指定的話一般默認(rèn)以/bin/sh/bin/sh執(zhí)行執(zhí)行shellshell腳本腳本22223、Shell的一般結(jié)構(gòu)的一般結(jié)構(gòu) shell 類(lèi)型類(lèi)型 函數(shù)函數(shù) 主過(guò)程主過(guò)程一般模板一般模板 abc.sh#!/bin/bash shell類(lèi)型類(lèi)型#a simple shell script example#a functionfunciton sayhel

26、lo() 函數(shù)函數(shù)echo Enter Your name:read name 讀取來(lái)自鍵盤(pán)輸入的變量讀取來(lái)自鍵盤(pán)輸入的變量echo Hello $nameecho programme starts here. 主過(guò)程主過(guò)程sayhelloecho programme ends.23231 1、注釋符、注釋符# #除了除了#!/bin/bash#!/bin/bash里的里的# #特殊特殊2 2、美元符、美元符 $ $變量符。與反斜杠轉(zhuǎn)義符相反,使其后的普通字符作變量符。與反斜杠轉(zhuǎn)義符相反,使其后的普通字符作為變量名,如為變量名,如$a$a表示變量表示變量a a的值。變量字符長(zhǎng)度超的值。變量字符

27、長(zhǎng)度超過(guò)過(guò)1 1個(gè)時(shí),用個(gè)時(shí),用括起來(lái)括起來(lái)3 3、單引號(hào)、單引號(hào)被引起的字符全部做普通字符,即全部原樣被引起的字符全部做普通字符,即全部原樣echo my $SHELLecho my $SHELL二、二、ShellShell中的特殊符號(hào)中的特殊符號(hào)24244 4、雙引號(hào)、雙引號(hào)引號(hào)內(nèi)的內(nèi)容,除引號(hào)內(nèi)的內(nèi)容,除$ $、轉(zhuǎn)義符、轉(zhuǎn)義符 、倒引號(hào)、倒引號(hào) 這三個(gè)保留這三個(gè)保留特殊功能,其他字符均做普通字符。特殊功能,其他字符均做普通字符。5 5、倒引號(hào)、倒引號(hào)( (數(shù)字?jǐn)?shù)字1 1鍵旁邊的那個(gè)鍵)鍵旁邊的那個(gè)鍵)引號(hào)內(nèi)的字符串當(dāng)做引號(hào)內(nèi)的字符串當(dāng)做shellshell命令行解釋執(zhí)行,得到的命令行解釋

28、執(zhí)行,得到的結(jié)果取代整個(gè)倒引號(hào)括起來(lái)的部分。結(jié)果取代整個(gè)倒引號(hào)括起來(lái)的部分。pwd即即pwd命令的執(zhí)行結(jié)果命令的執(zhí)行結(jié)果$LOGNAME系統(tǒng)變量系統(tǒng)變量2525練習(xí)一下:區(qū)別下面幾句練習(xí)一下:區(qū)別下面幾句n echo my home is $HOMEecho my home is $HOMEn echo “my home is $HOME”echo “my home is $HOME”n echo my home is $HOMEecho my home is $HOMEn echo “my home is pwd”echo “my home is pwd”n echo my home is

29、pwdecho my home is pwd 用于括起來(lái)用于括起來(lái)shell命令命令 用于原樣顯示用于原樣顯示26266. 6. 反斜線反斜線 反斜線是轉(zhuǎn)義字符,它能把特殊字符變成普通字反斜線是轉(zhuǎn)義字符,它能把特殊字符變成普通字符。在某個(gè)字符前面利用反斜杠(符。在某個(gè)字符前面利用反斜杠( )能夠阻止)能夠阻止shellshell把后面的字符解釋為特殊字符。把后面的字符解釋為特殊字符。例例4 4:yuqunyuqun $echo “Filename is N0$yuqunyuqun $echo “Filename is N0$* *”Filename is N0$Filename is N0$*

30、 * 注意:在單引號(hào)括起來(lái)的字符串中,反斜線也成注意:在單引號(hào)括起來(lái)的字符串中,反斜線也成為普通字符,而失去轉(zhuǎn)義字符功能。為普通字符,而失去轉(zhuǎn)義字符功能。2727三、變量三、變量shell shell 變量變量 可以保存如路徑名、文件名或者一個(gè)數(shù)字可以保存如路徑名、文件名或者一個(gè)數(shù)字n 本地變量本地變量 局部變量只在創(chuàng)建它們的局部變量只在創(chuàng)建它們的ShellShell中使用,可以在中使用,可以在shellshell程序內(nèi)任意使用和修改它們。程序內(nèi)任意使用和修改它們。n 環(huán)境變量環(huán)境變量 可以在創(chuàng)建它們的可以在創(chuàng)建它們的ShellShell及其派生出來(lái)的任意子及其派生出來(lái)的任意子程序中使用。有些

31、變量是用戶(hù)創(chuàng)建的,其他的則是專(zhuān)用的程序中使用。有些變量是用戶(hù)創(chuàng)建的,其他的則是專(zhuān)用的(比如(比如PATHPATH、HOME)HOME)。是系統(tǒng)環(huán)境的一部分,不必去定義它。是系統(tǒng)環(huán)境的一部分,不必去定義它們,可以在們,可以在shellshell程序中使用它們程序中使用它們 。還能在。還能在shellshell中加以修中加以修改。改。n內(nèi)部變量?jī)?nèi)部變量 由系統(tǒng)提供的。與環(huán)境變量不同,但用戶(hù)不能由系統(tǒng)提供的。與環(huán)境變量不同,但用戶(hù)不能修改它們。修改它們。2828本地變量和環(huán)境變量的對(duì)比本地變量和環(huán)境變量的對(duì)比29291 1、本地變量(局部變量、用戶(hù)變量)、本地變量(局部變量、用戶(hù)變量)u本地變量本地

32、變量 在用戶(hù)現(xiàn)在的在用戶(hù)現(xiàn)在的shell生命期的腳本中使用生命期的腳本中使用u 變量名變量名=值值注意:注意: (1)等號(hào)兩邊不可以有空格)等號(hào)兩邊不可以有空格 (2)取值包含空格,必須用雙引號(hào)括起來(lái))取值包含空格,必須用雙引號(hào)括起來(lái) (3)Shell變量可以用大小寫(xiě)字母,區(qū)分大小寫(xiě)變量可以用大小寫(xiě)字母,區(qū)分大小寫(xiě)3030u變量的聲明和使用變量的聲明和使用(1 1)變量是弱類(lèi)型的(不用聲明類(lèi)型)變量是弱類(lèi)型的(不用聲明類(lèi)型)(2 2)變量聲明及賦值格式)變量聲明及賦值格式 變量變量= =值值(等號(hào)兩邊不能有空格)(等號(hào)兩邊不能有空格)(3 3)變量的引用)變量的引用 $ $變量名變量名 $變量

33、名變量名 變量名為變量名為1 1個(gè)字符時(shí)建議使用方式一,多余一個(gè)字個(gè)字符時(shí)建議使用方式一,多余一個(gè)字符時(shí)建議使用方式二符時(shí)建議使用方式二 舉例舉例: $a: $a $abc $abc 3131u顯示變量顯示變量 echoecho命令可以顯示單個(gè)變量取值,變量名前加命令可以顯示單個(gè)變量取值,變量名前加$ $echo $Nameecho $nameecho $nameareecho $name are輸出引用變量時(shí)加輸出引用變量時(shí)加比較好比較好3232u清除變量清除變量 unset unset 變量名變量名舉例:舉例:echo $nameecho $name unset name unset na

34、me ( (注意:注意:namename前沒(méi)有前沒(méi)有$)$)顯示本地所有變量顯示本地所有變量 setset3333u設(shè)置只讀變量設(shè)置只讀變量 設(shè)置變量時(shí),不想再改變其值,可以將之設(shè)為只讀變量設(shè)置變量時(shí),不想再改變其值,可以將之設(shè)為只讀變量 變量名變量名=值值 readonly 變量名變量名34342 2、環(huán)境變量、環(huán)境變量環(huán)境變量用于所有用戶(hù)進(jìn)程(通常稱(chēng)為子進(jìn)程)。登陸進(jìn)程稱(chēng)環(huán)境變量用于所有用戶(hù)進(jìn)程(通常稱(chēng)為子進(jìn)程)。登陸進(jìn)程稱(chēng)為父進(jìn)程,通過(guò)為父進(jìn)程,通過(guò)pstree可以查看可以查看u環(huán)境變量可以用于所有子程序,著包括編輯器、腳本和應(yīng)用環(huán)境變量可以用于所有子程序,著包括編輯器、腳本和應(yīng)用 舉例

35、:舉例:vi a.sh #!/bin/bash # 檢測(cè)環(huán)境變量檢測(cè)環(huán)境變量 echo 家目錄是家目錄是 $HOMEu 環(huán)境變量可以在命令行中設(shè)置,但用戶(hù)注銷(xiāo)時(shí)這些值將丟失環(huán)境變量可以在命令行中設(shè)置,但用戶(hù)注銷(xiāo)時(shí)這些值將丟失u 環(huán)境變量均為大寫(xiě)環(huán)境變量均為大寫(xiě)u 必須用必須用export命令導(dǎo)出命令導(dǎo)出3535n 設(shè)置環(huán)境變量設(shè)置環(huán)境變量 p variable-name=valuevariable-name=valuep export variable-name( export variable-name(環(huán)境變量名大寫(xiě)環(huán)境變量名大寫(xiě)) )n 顯示環(huán)境變量顯示環(huán)境變量p env env 可以看

36、到所有的環(huán)境變量可以看到所有的環(huán)境變量p echo $echo $環(huán)境變量名環(huán)境變量名 (顯示一個(gè)變量)(顯示一個(gè)變量)n 清除環(huán)境變量清除環(huán)境變量p unset unset 環(huán)境變量名環(huán)境變量名3636uHOME HOME : 代表使用者的家目錄。代表使用者的家目錄。cd cd 去到使用者的家目錄去到使用者的家目錄 或者利用或者利用 cd cd 就可以直接回到使用者家目錄了。就可以直接回到使用者家目錄了。uPS1PS1:shellshell的主提示符的主提示符u SHELL SHELL : 目前這個(gè)環(huán)境使用的目前這個(gè)環(huán)境使用的 SHELL SHELL 是哪個(gè)程序?是哪個(gè)程序? 如果是如果是

37、bash bash 的的話,預(yù)設(shè)是話,預(yù)設(shè)是 /bin/bash/bin/bashuPWDPWD:用戶(hù)當(dāng)前工作目錄的路徑。它指出用戶(hù)目前在:用戶(hù)當(dāng)前工作目錄的路徑。它指出用戶(hù)目前在LinuxLinux文件系統(tǒng)中處文件系統(tǒng)中處在什么位置。它是由在什么位置。它是由LinuxLinux自動(dòng)設(shè)置的自動(dòng)設(shè)置的u HISTSIZE HISTSIZE : 這個(gè)與這個(gè)與“歷史命令歷史命令”有關(guān),曾經(jīng)下達(dá)過(guò)的指令可以被系統(tǒng)有關(guān),曾經(jīng)下達(dá)過(guò)的指令可以被系統(tǒng)記錄下來(lái),而記錄的記錄下來(lái),而記錄的“數(shù)目數(shù)目”則是由這個(gè)值來(lái)設(shè)定的。則是由這個(gè)值來(lái)設(shè)定的。 u ENV ENV : 這個(gè)使用者所使用的個(gè)性化環(huán)境設(shè)置文件的讀取

38、文件。這個(gè)使用者所使用的個(gè)性化環(huán)境設(shè)置文件的讀取文件。 uMAIL MAIL : 當(dāng)我們使用當(dāng)我們使用 mail mail 這個(gè)指令在收信時(shí),系統(tǒng)會(huì)去讀取的郵件信這個(gè)指令在收信時(shí),系統(tǒng)會(huì)去讀取的郵件信箱文件箱文件 (mailbox)mailbox)。 u PATH PATH : 就是執(zhí)行文件搜尋的路徑,目錄與目錄中間以冒號(hào)就是執(zhí)行文件搜尋的路徑,目錄與目錄中間以冒號(hào)(:)(:)分隔,分隔, 由于文件的搜尋是依序由由于文件的搜尋是依序由 PATH PATH 的變量?jī)?nèi)的目錄來(lái)查詢(xún),所以,目錄的順的變量?jī)?nèi)的目錄來(lái)查詢(xún),所以,目錄的順序也是重要的喔。序也是重要的喔。 uLANG LANG : 語(yǔ)系文件

39、,很多數(shù)據(jù)都會(huì)用到他,當(dāng)出現(xiàn)編碼錯(cuò)誤的時(shí)候往往語(yǔ)系文件,很多數(shù)據(jù)都會(huì)用到他,當(dāng)出現(xiàn)編碼錯(cuò)誤的時(shí)候往往需要設(shè)置它,中文編碼是需要設(shè)置它,中文編碼是zh_CN.UTF8zh_CN.UTF83737PATHPATH示例示例n 舉例:配置舉例:配置javajava環(huán)境變量可使任何目錄都能執(zhí)行環(huán)境變量可使任何目錄都能執(zhí)行javacjavac命令命令(1 1)需要配置)需要配置JavaJava環(huán)境變量環(huán)境變量u JAVA_HOME(JDKJAVA_HOME(JDK存放的路徑)存放的路徑)u CLASSPATH CLASSPATH(字節(jié)碼的位置,讓?zhuān)ㄗ止?jié)碼的位置,讓JVMJVM知道要運(yùn)行的類(lèi)的字節(jié)碼放在知道

40、要運(yùn)行的類(lèi)的字節(jié)碼放在哪)哪)u PATH ( PATH (讓讓OSOS找到找到j(luò)avacjavac等命令的存放的位置)等命令的存放的位置)(2 2)在)在LinuxLinux下配置它們下配置它們u 打開(kāi)終端打開(kāi)終端u vi .bash_profilevi .bash_profileu 在配置文件中追加內(nèi)容在配置文件中追加內(nèi)容 JAVA_HOME=JDKJAVA_HOME=JDK存放位置存放位置 CLASSPATH=.(CLASSPATH=.(當(dāng)前目錄)當(dāng)前目錄) PATH=$JAVA_HOME/BIN:$PATH(PATH=$JAVA_HOME/BIN:$PATH(不覆蓋原來(lái)的內(nèi)容,追加)不

41、覆蓋原來(lái)的內(nèi)容,追加) export JAVA_HOME CLASSPATH PATHexport JAVA_HOME CLASSPATH PATHu 保存,讓配置起作用(保存,讓配置起作用(source .bash_profilesource .bash_profile或者注銷(xiāo)或者注銷(xiāo))3838讓環(huán)境變量的修改在退出讓環(huán)境變量的修改在退出shellshell再次登錄時(shí)仍有效,再次登錄時(shí)仍有效,需要在相關(guān)配置文件中修改需要在相關(guān)配置文件中修改BashBash的初始化文件有:的初始化文件有:/etc/profile/etc/profile、/.bash_profile/.bash_profile

42、、/.bash_login/.bash_login、/.profile/.profile、/.bashrc/.bashrc、/etc/bashrc/etc/bashrc/etc/profile/.bash_profile/.bashrc/etc/bashrc/.bash_login/.profile3939n /etc/profile /etc/profile 存放一些全局(共有)變量,不管哪個(gè)用戶(hù),登錄時(shí)都存放一些全局(共有)變量,不管哪個(gè)用戶(hù),登錄時(shí)都會(huì)讀取該文件。通常設(shè)置一些會(huì)讀取該文件。通常設(shè)置一些ShellShell變量變量PATH,USER,HOSTNAMEPATH,USER,HO

43、STNAME和和HISTSIZEHISTSIZE等等n /.bash_profile:/.bash_profile:每個(gè)用戶(hù)都可使用該文件輸入專(zhuān)用于自每個(gè)用戶(hù)都可使用該文件輸入專(zhuān)用于自己使用的己使用的shellshell信息信息, ,當(dāng)用戶(hù)登錄時(shí)當(dāng)用戶(hù)登錄時(shí), ,該文件僅僅執(zhí)行一次該文件僅僅執(zhí)行一次! !默認(rèn)情況下默認(rèn)情況下, ,他設(shè)置一些環(huán)境變量他設(shè)置一些環(huán)境變量, ,執(zhí)行用戶(hù)的執(zhí)行用戶(hù)的.bashrc.bashrc文件文件. .n/.bashrc:/.bashrc:該文件包含專(zhuān)用于你的該文件包含專(zhuān)用于你的bash shellbash shell的的bashbash信息信息, ,當(dāng)?shù)卿洉r(shí)以及

44、每次打開(kāi)新的當(dāng)?shù)卿洉r(shí)以及每次打開(kāi)新的shellshell時(shí)時(shí), ,該該文件被讀取該該文件被讀取. .n/etc/bashrc:/etc/bashrc:為每一個(gè)運(yùn)行為每一個(gè)運(yùn)行bash shellbash shell的用戶(hù)執(zhí)行此文件的用戶(hù)執(zhí)行此文件. .當(dāng)當(dāng)bash shellbash shell被打開(kāi)時(shí)被打開(kāi)時(shí), ,該文件被讀取該文件被讀取. .4040上述配置文件的作用上述配置文件的作用1 1)登錄)登錄LinuxLinux先啟動(dòng)系統(tǒng)配置文件先啟動(dòng)系統(tǒng)配置文件/etc/profile/etc/profile,并從,并從/etc/profile.d/etc/profile.d目錄的配置文件中搜

45、集目錄的配置文件中搜集shellshell的設(shè)置,的設(shè)置,為系統(tǒng)的為系統(tǒng)的每個(gè)用戶(hù)每個(gè)用戶(hù)設(shè)置環(huán)境信息。設(shè)置環(huán)境信息。2 2)用戶(hù)配置文件)用戶(hù)配置文件/.bash_profile/.bash_profile,每個(gè)用戶(hù),每個(gè)用戶(hù)專(zhuān)用于自專(zhuān)用于自己使用己使用的的shellshell信息信息, ,僅用戶(hù)僅用戶(hù)登錄時(shí)執(zhí)行一次登錄時(shí)執(zhí)行一次! !默認(rèn)情況下默認(rèn)情況下, ,此文件通過(guò)腳本執(zhí)行同目錄下用戶(hù)的此文件通過(guò)腳本執(zhí)行同目錄下用戶(hù)的.bashrc.bashrc文件。文件。3 3)/.bashrc/.bashrc文件包含專(zhuān)用于用戶(hù)文件包含專(zhuān)用于用戶(hù)bash shellbash shell的的bashb

46、ash信信息息, ,登錄及每次打開(kāi)新的登錄及每次打開(kāi)新的shellshell時(shí)都會(huì)執(zhí)行時(shí)都會(huì)執(zhí)行。里面又會(huì)。里面又會(huì)調(diào)用調(diào)用/etc/bashrc/etc/bashrc4141設(shè)置用戶(hù)自己的環(huán)境變量設(shè)置用戶(hù)自己的環(huán)境變量n 在在/home/user/.bash_profile/home/user/.bash_profile中定義下句,會(huì)怎樣?中定義下句,會(huì)怎樣?alias la=ls a|grep “.alias la=ls a|grep “.* *”答:答:useruser下次再登陸,其下次再登陸,其shellshell會(huì)自動(dòng)建立一個(gè)別名會(huì)自動(dòng)建立一個(gè)別名命令命令lala,功能為查看當(dāng)前目錄

47、下名字以,功能為查看當(dāng)前目錄下名字以. .開(kāi)頭的文開(kāi)頭的文件。件。p寫(xiě)在寫(xiě)在/.bash_profile/.bash_profile中,需重新登錄才能有效。中,需重新登錄才能有效。除非運(yùn)行除非運(yùn)行source .bash_profilesource .bash_profile使其立即有效。使其立即有效。p寫(xiě)在寫(xiě)在/.bashrc/.bashrc中,則打開(kāi)新的終端中就有效中,則打開(kāi)新的終端中就有效n 區(qū)別:區(qū)別:bash_profilebash_profile只在會(huì)話開(kāi)始的時(shí)候讀取一次,只在會(huì)話開(kāi)始的時(shí)候讀取一次,而而bashrcbashrc則每次打開(kāi)終端時(shí)都會(huì)讀取則每次打開(kāi)終端時(shí)都會(huì)讀取n 按

48、照傳統(tǒng),定義的變量如按照傳統(tǒng),定義的變量如PATHPATH放到放到.bash_profile.bash_profile中,中,而像別名函數(shù)等放在而像別名函數(shù)等放在.bashrc.bashrc中,但是中,但是.bash_profile.bash_profile先于先于.bashrc.bashrc讀取內(nèi)容,也可全放入讀取內(nèi)容,也可全放入.bashrc.bashrc中中習(xí)慣用各自的配置文件,編輯不需要習(xí)慣用各自的配置文件,編輯不需要root權(quán)限權(quán)限42423 3、內(nèi)部變量、內(nèi)部變量 內(nèi)部變量是內(nèi)部變量是LinuxLinux所提供的一種特殊類(lèi)型的變量,所提供的一種特殊類(lèi)型的變量,這類(lèi)變量在程序中用來(lái)作

49、出判斷。在這類(lèi)變量在程序中用來(lái)作出判斷。在shellshell程序內(nèi)程序內(nèi)這類(lèi)變量的值是不能修改的。這類(lèi)變量的值是不能修改的。部分內(nèi)部變量是:部分內(nèi)部變量是:u$# $# 傳送給傳送給shellshell程序的位置參數(shù)的數(shù)量程序的位置參數(shù)的數(shù)量u$?$?最后命令的完成碼或者在最后命令的完成碼或者在shellshell程序內(nèi)部執(zhí)程序內(nèi)部執(zhí)行的行的shellshell程序(返回值)程序(返回值)u$0shell$0shell程序的名稱(chēng)程序的名稱(chēng)u$ $* *調(diào)用調(diào)用shellshell程序時(shí)所傳送的全部參數(shù)的單字程序時(shí)所傳送的全部參數(shù)的單字符串,符串, “參數(shù)參數(shù)1”“1”“參數(shù)參數(shù)2”2”形式保

50、存的參數(shù)形式保存的參數(shù)4343u$“參數(shù)參數(shù)1”“1”“參數(shù)參數(shù)2”2”形式保存的參形式保存的參數(shù)數(shù)u$n$n第第n n個(gè)參數(shù)個(gè)參數(shù)u$本程序的本程序的PIDPIDu$!$!上一個(gè)命令的上一個(gè)命令的PIDPID4444使用使用shellshell預(yù)定義變量的腳本舉例預(yù)定義變量的腳本舉例45454 4 位置參數(shù)位置參數(shù)(1 1) 位置參數(shù)及引用位置參數(shù)及引用 可以編寫(xiě)一個(gè)可以編寫(xiě)一個(gè)shellshell腳本,當(dāng)從命令行或者從其他腳本,當(dāng)從命令行或者從其他shellshell腳本中調(diào)用它的時(shí)候,這個(gè)腳本接收若干參數(shù)。這些選項(xiàng)是腳本中調(diào)用它的時(shí)候,這個(gè)腳本接收若干參數(shù)。這些選項(xiàng)是通過(guò)通過(guò)LinuxL

51、inux作為位置參數(shù)(作為位置參數(shù)(positional parameterpositional parameter)提供給)提供給shellshell程序的。在程序的。在shellshell腳本中應(yīng)有變量,接收實(shí)參,這類(lèi)變腳本中應(yīng)有變量,接收實(shí)參,這類(lèi)變量的名稱(chēng)很特別,分別是量的名稱(chēng)很特別,分別是1 1,2 2,3 3,這類(lèi)變量稱(chēng)為位置,這類(lèi)變量稱(chēng)為位置變量。位置參數(shù)變量。位置參數(shù)1 1存放在位置變量存放在位置變量1 1中,位置參數(shù)中,位置參數(shù)2 2存放位置存放位置變量變量2 2中,中,在程序中可以使用,在程序中可以使用$1$1,$2$2,來(lái)訪問(wèn),來(lái)訪問(wèn),舉例:舉例: 4646(2 2) 用

52、用setset命令為位置參數(shù)賦值命令為位置參數(shù)賦值在在shellshell程序中可以利用程序中可以利用setset命令為位置參數(shù)賦值或重命令為位置參數(shù)賦值或重新賦值。新賦值。一般格式:一般格式:set set 參數(shù)表參數(shù)表 說(shuō)明:該命令后面無(wú)參數(shù)時(shí),將顯示系統(tǒng)中的系統(tǒng)變說(shuō)明:該命令后面無(wú)參數(shù)時(shí),將顯示系統(tǒng)中的系統(tǒng)變量的值;如果有參數(shù)將分別給位置參數(shù)賦值。量的值;如果有參數(shù)將分別給位置參數(shù)賦值。4747四、變量表達(dá)式四、變量表達(dá)式1 1、條件判斷命令、條件判斷命令testtesttest n1 -test n1 -參數(shù)參數(shù) n2n2(或(或 參數(shù)參數(shù) 表達(dá)式)表達(dá)式)真返回真返回0 0,假返回,

53、假返回1 1。(1 1)整數(shù),比較運(yùn)算符見(jiàn)右表)整數(shù),比較運(yùn)算符見(jiàn)右表test 1test 1 lt lt 4 4 # #判斷判斷14104 4、其他參數(shù)、其他參數(shù)-a-a 邏輯與邏輯與-o-o 邏輯或邏輯或! 邏輯非邏輯非51513 3、控制流程、控制流程n shellshell運(yùn)算符和運(yùn)算符和C C語(yǔ)言基本類(lèi)似,也有分支、語(yǔ)言基本類(lèi)似,也有分支、循環(huán)流程控制。循環(huán)流程控制。n 簡(jiǎn)單舉例簡(jiǎn)單舉例后面例子涉及的命令后面例子涉及的命令p seqseq命令:產(chǎn)生命令:產(chǎn)生1-91-9的數(shù)字序列的數(shù)字序列 比如比如 seq 1 4seq 1 4p exprexpr命令:對(duì)表達(dá)式求值命令:對(duì)表達(dá)式求值

54、p 直接求值命令:對(duì)被括起來(lái)的表達(dá)式求值直接求值命令:對(duì)被括起來(lái)的表達(dá)式求值5252表達(dá)式求值:表達(dá)式求值:$ expr 1 + 3$ expr 1 + 3$ expr 2 1$ expr 2 1$ expr 1 $ expr 1 * * 3 3 使用使用* *要加轉(zhuǎn)義符要加轉(zhuǎn)義符$ echo expr 1 + 3$ echo expr 1 + 3注意:表達(dá)式中,數(shù)字和運(yùn)算符指教要有空格,出現(xiàn)在注意:表達(dá)式中,數(shù)字和運(yùn)算符指教要有空格,出現(xiàn)在語(yǔ)句中要加反引號(hào)語(yǔ)句中要加反引號(hào)53531 1)分支結(jié)構(gòu))分支結(jié)構(gòu)n ifif分支分支if if $# -eq 0 $# -eq 0 thenthenec

55、ho “echo “輸入了輸入了0 0個(gè)參數(shù)個(gè)參數(shù)”elif elif $# -lt 1 $# -lt 1 then echo “then echo “輸入了多個(gè)參數(shù)輸入了多個(gè)參數(shù)”else echo “else echo “輸入了輸入了1 1個(gè)參數(shù)個(gè)參數(shù)”fifin casecasecase “$#” case “$#” inin 0 0) ) echo “ echo “輸入了輸入了0 0個(gè)參數(shù)個(gè)參數(shù)” ;1 1) ) echo “ echo “輸入了輸入了1 1個(gè)參數(shù)個(gè)參數(shù)” ;* *) ) echo “ echo “輸入了多個(gè)參數(shù)輸入了多個(gè)參數(shù)”; esacesac每個(gè)分支條件后必須以?xún)?/p>

56、每個(gè)分支條件后必須以?xún)蓚€(gè)分號(hào)結(jié)尾個(gè)分號(hào)結(jié)尾54542 2)循環(huán)結(jié)構(gòu))循環(huán)結(jié)構(gòu)n for for 例子例子輸出輸出100100內(nèi)內(nèi)1010的倍數(shù)的倍數(shù)for i in seq 1 9for i in seq 1 9dodoecho expr $i echo expr $i * * 10 10donedone或?qū)懟驅(qū)?echo $(expr $i echo $(expr $i * * 10) 10)n乘號(hào)前加轉(zhuǎn)義符,乘號(hào)前加轉(zhuǎn)義符,與數(shù)字間要有空格。與數(shù)字間要有空格。5555n read read 變量變量1 1 變量變量2 2 p可以從鍵盤(pán)上讀取多個(gè)變量的值,用戶(hù)輸入數(shù)據(jù)時(shí)可以從鍵盤(pán)上讀取多個(gè)變

57、量的值,用戶(hù)輸入數(shù)據(jù)時(shí),以空格或者,以空格或者TabTab鍵作為分隔。鍵作為分隔。p如果輸入的數(shù)據(jù)個(gè)數(shù)不夠,則從左到右對(duì)應(yīng)賦值,如果輸入的數(shù)據(jù)個(gè)數(shù)不夠,則從左到右對(duì)應(yīng)賦值,沒(méi)有輸入的變量為空;沒(méi)有輸入的變量為空;p如果輸入的數(shù)據(jù)個(gè)數(shù)超了,則從左到右對(duì)應(yīng)賦值,如果輸入的數(shù)據(jù)個(gè)數(shù)超了,則從左到右對(duì)應(yīng)賦值,最后一個(gè)變量被賦予剩余的所有數(shù)據(jù)。最后一個(gè)變量被賦予剩余的所有數(shù)據(jù)。5656read a bread a bfor i in seq $a $bfor i in seq $a $bdodoecho expr $i echo expr $i * * 10 10donedone輸出輸出a a到到b b

58、序列數(shù)各數(shù)的序列數(shù)各數(shù)的1010倍數(shù)倍數(shù)5757n whilewhile例子例子求求1 1到到100100的和的和i=1i=1sum=0sum=0while $i le 100 while $i le 100 dodosum=$sum+$isum=$sum+$i i=$i+1 i=$i+1donedoneecho $sumecho $sumn :直接求值命令:直接求值命令5858五五 命令結(jié)果重定向命令結(jié)果重定向p1 1stdoutstdout標(biāo)準(zhǔn)輸出標(biāo)準(zhǔn)輸出p2 2stderrstderr標(biāo)準(zhǔn)錯(cuò)誤標(biāo)準(zhǔn)錯(cuò)誤n 輸出重定向到文件輸出重定向到文件filefile,終端上只能看到標(biāo)準(zhǔn)錯(cuò)誤:,終端上只

59、能看到標(biāo)準(zhǔn)錯(cuò)誤:# #命令命令 file filen 錯(cuò)誤重定向到文件錯(cuò)誤重定向到文件file file ,終端上只能看到標(biāo)準(zhǔn)輸出:,終端上只能看到標(biāo)準(zhǔn)輸出:# #命令命令 2file2filen 標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤都重定向到標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤都重定向到filefile,終端上看不到,終端上看不到任何信息:任何信息:# #命令命令 filefile 2&1 2&1 (等于(等于# #命令命令 1file1file 2&1 2&1)5959屏蔽命令任何輸出的:/dev/null 2&1cp /etc/my.conf cp /etc/my.conf /dev/null 2&1/dev/null 2

60、&1p/dev/null/dev/null空設(shè)備空設(shè)備n 此句命令的結(jié)果是:此句命令的結(jié)果是:1.1.cpcp命令沒(méi)有目標(biāo)文件命令沒(méi)有目標(biāo)文件, ,應(yīng)該輸出錯(cuò)誤。應(yīng)該輸出錯(cuò)誤。 2.2.2&12&1表示錯(cuò)誤重定向指向標(biāo)準(zhǔn)輸出。表示錯(cuò)誤重定向指向標(biāo)準(zhǔn)輸出。3.3./dev/null/dev/null又使標(biāo)準(zhǔn)輸出重定向到空,就是不又使標(biāo)準(zhǔn)輸出重定向到空,就是不要輸出信息要輸出信息p即:一個(gè)錯(cuò)誤的命令執(zhí)行,什么功能都不實(shí)現(xiàn),且沒(méi)有即:一個(gè)錯(cuò)誤的命令執(zhí)行,什么功能都不實(shí)現(xiàn),且沒(méi)有任何信息或錯(cuò)誤提示輸出。任何信息或錯(cuò)誤提示輸出。60601 1)command file 2filecommand file

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論