shell腳本編程PPT課件_第1頁(yè)
shell腳本編程PPT課件_第2頁(yè)
shell腳本編程PPT課件_第3頁(yè)
shell腳本編程PPT課件_第4頁(yè)
shell腳本編程PPT課件_第5頁(yè)
已閱讀5頁(yè),還剩76頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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

2、添加執(zhí)行權(quán)限,用./ ./命令執(zhí)行命令執(zhí)行2021/4/83 3HELLO WORLD!HELLO WORLD!nvi hello.shvi hello.shn按按i i進(jìn)入插入模式進(jìn)入插入模式n輸入輸入echo “hello world!”echo “hello world!”n: :輸入輸入wqwq保存退出保存退出nsh hello.shsh hello.shn或者或者nchmod 755 hello.shchmod 755 hello.shn./hello.sh./hello.sh2021/4/84 4一、一、VIVI編輯器編輯器n VIVI的三種工作模式的三種工作模式n VIVI的啟動(dòng)

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

4、editgedit)”等,用戶可以根據(jù)自等,用戶可以根據(jù)自己的喜好選擇使用。己的喜好選擇使用。 學(xué)習(xí)學(xué)習(xí)vi vi的方法:的方法:vi vi的命令太多且難以記憶,而實(shí)際上真正經(jīng)常使用的命令太多且難以記憶,而實(shí)際上真正經(jīng)常使用的命令并不是太多,只要掌握幾個(gè)關(guān)鍵的并加以適當(dāng)?shù)拿畈⒉皇翘?,只要掌握幾個(gè)關(guān)鍵的并加以適當(dāng)練習(xí)很快就上手使用練習(xí)很快就上手使用vi vi。2021/4/86 6為什么選擇為什么選擇VIVI 就使用的方便性而言,有比就使用的方便性而言,有比vi vi更好的編輯器,還要圖更好的編輯器,還要圖形化的形化的editedit,為什么還要用,為什么還要用vi vi? 歷史久遠(yuǎn),功能強(qiáng)

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

6、傳統(tǒng)vivi的增強(qiáng)版本的增強(qiáng)版本2021/4/87 71 1、VIVI的三種工作模式的三種工作模式 命令模式命令模式 啟動(dòng)啟動(dòng)VIVI默認(rèn)進(jìn)入命令模式。此時(shí)界面不能編輯,只能接受默認(rèn)進(jìn)入命令模式。此時(shí)界面不能編輯,只能接受命令命令( (鍵入的命令看不到鍵入的命令看不到) 文件的保存,退出,文本的刪除、復(fù)制、搜索等操作文件的保存,退出,文本的刪除、復(fù)制、搜索等操作 輸入模式輸入模式 編輯模式編輯模式 命令模式下用命令模式下用i(sert),a(ppend)i(sert),a(ppend),o,so,s等均可進(jìn)入該模式。等均可進(jìn)入該模式。按按escesc返回命令模式返回命令模式 行編輯模式行編輯模

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

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

9、存但不退出,ww(rite)后后可加所要存檔的文檔名??杉铀鏅n的文檔名。:wq 存檔后退出。存檔后退出。 命令模式下按命令模式下按zz,功能與功能與 :wq 相同。相同。 :x 與與:wq相同相同命令模式:命令模式:ZZZZ、ZQZQ保存保存/ /不保存退出不保存退出2021/4/810104 4、怎么編輯、怎么編輯必須從命令模式轉(zhuǎn)入插入模式才能進(jìn)行輸入必須從命令模式轉(zhuǎn)入插入模式才能進(jìn)行輸入編輯,可用命令有編輯,可用命令有: 新增新增 (append) a :從光標(biāo)所在位置:從光標(biāo)所在位置后面后面開始新增資料開始新增資料 A: 從光標(biāo)所在從光標(biāo)所在行最后面的行最后面的地方開始新增資料。地方

10、開始新增資料。 插入插入 (insert) i: 從光標(biāo)所在位置從光標(biāo)所在位置前面前面開始插入資料開始插入資料 I :從光標(biāo)所在:從光標(biāo)所在行行的第一個(gè)非空白字元的第一個(gè)非空白字元前面前面開始插入資料。開始插入資料。 開始開始 (open) o :在光標(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)2021/4/811115、命令模式下的操作:刪除與修改、命令模式下的操作:刪除與修改n x:

11、刪除光標(biāo)所在字符刪除光標(biāo)所在字符n dw dw 刪除一個(gè)單詞刪除一個(gè)單詞n dd :刪除光標(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)前面

12、的字符;右:刪除光標(biāo)所在的字符;右:刪除光標(biāo)所在的字符;上:將當(dāng)前行與上一行刪除;上:將當(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ù)上一次命令的操作2021/4/81212命令模式下的操作:命令模式下的操作:文本復(fù)制、粘貼文本復(fù)制、粘貼 復(fù)制命令:復(fù)制命令:y y yy: yy: 復(fù)制整行復(fù)制整行 yw:yw:復(fù)制光標(biāo)所在的單詞復(fù)制

13、光標(biāo)所在的單詞 nywnyw:復(fù)制包括光標(biāo)所在的:復(fù)制包括光標(biāo)所在的n n個(gè)單詞個(gè)單詞 nyy:nyy:復(fù)制包括當(dāng)前行在內(nèi)的復(fù)制包括當(dāng)前行在內(nèi)的n n行行 粘貼命令粘貼命令 P P 光標(biāo)移動(dòng)光標(biāo)移動(dòng) h h、j j、k k、ll nGnG:移動(dòng)到底:移動(dòng)到底n n行行首行行首2021/4/813136 6、行、行命令模式下的操作:命令模式下的操作:字符串的查找、替換字符串的查找、替換 :/string:/string搜索指定的字符串。搜索指定的字符串。 按鍵按鍵n n:繼續(xù)進(jìn)行搜索:繼續(xù)進(jìn)行搜索 如果寫的是斜杠(如果寫的是斜杠(/ /):按):按n n會(huì)從當(dāng)前位置向后查找;如果寫的會(huì)從當(dāng)前位置

14、向后查找;如果寫的是問(wèn)號(hào)(?),按是問(wèn)號(hào)(?),按n n鍵則從當(dāng)前位置向前查找鍵則從當(dāng)前位置向前查找 查找且替換查找且替換 :%s /SEARCH /REPLACE:%s /SEARCH /REPLACE把文檔中所有把文檔中所有SEARCHSEARCH替換成替換成REPLACEREPLACE; :#,# s /SEARCH /REPLACE /g :#,# s /SEARCH /REPLACE /g 號(hào)表示數(shù)字,表示從多少行到多少行,把號(hào)表示數(shù)字,表示從多少行到多少行,把SEARCHSEARCH替換成替換成REPLACEREPLACE; :s /SEARCH /REPLACE /g :s /S

15、EARCH /REPLACE /g 把把當(dāng)前光標(biāo)當(dāng)前光標(biāo)所在行中的所在行中的SEARCHSEARCH單詞,替換成單詞,替換成REPLACEREPLACE,并把所有并把所有SEARCHSEARCH高亮顯示高亮顯示2021/4/814147 7、設(shè)置、設(shè)置vi vi 全局的配置文件位于全局的配置文件位于/etc/vim/vimrc(/etc/vim/vimrc(或者或者/etc/vimrc)/etc/vimrc) 也可以擁有自己獨(dú)立的配置文件,配置文件位也可以擁有自己獨(dú)立的配置文件,配置文件位“/.vimrc”/.vimrc”,如果沒(méi)有該文件,也可以直接用如下,如果沒(méi)有該文件,也可以直接用如下命令

16、創(chuàng)建并編輯命令創(chuàng)建并編輯比如:比如:set nu set nu 顯示行號(hào)顯示行號(hào)set ruler set ruler 顯示光標(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ǔ)法高亮2021/4/81515文本輸入狀態(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)系

17、三種模式間的轉(zhuǎn)換關(guān)系2021/4/81616案例練習(xí)案例練習(xí)1. 1. 請(qǐng)?jiān)谡?qǐng)?jiān)?/tmp /tmp 這個(gè)目錄下建立一個(gè)名為這個(gè)目錄下建立一個(gè)名為 vitest vitest 的目錄;的目錄; 2. 2. 進(jìn)入進(jìn)入 vitest vitest 這個(gè)目錄當(dāng)中;這個(gè)目錄當(dāng)中; 3. 3. 將將 /etc/man.config /etc/man.config 拷貝到本目錄底下拷貝到本目錄底下4. 4. 使用使用 vi vi 開啟本目錄下的開啟本目錄下的 man.config man.config 這個(gè)檔案;這個(gè)檔案; 5. 5. 在在 vi vi 中設(shè)定一下行號(hào);中設(shè)定一下行號(hào); 6. 6. 移動(dòng)到

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

19、,突然反悔了,要全部復(fù)原,有哪些方法? 10. 10. 我要復(fù)制我要復(fù)制 51 51 到到 60 60 行這十行的內(nèi)容,并且貼到最后一行之后行這十行的內(nèi)容,并且貼到最后一行之后; 11. 11. 刪除刪除 11 11 到到 30 30 行之間的行之間的 20 20 行;行; 12. 12. 將這個(gè)文件另存成一個(gè)將這個(gè)文件另存成一個(gè) man.test.config man.test.config 的文件;的文件; 13. 13. 到第到第 29 29 行,并且刪除行,并且刪除 15 15 個(gè)字符;個(gè)字符; 14. 14. 儲(chǔ)存后離開儲(chǔ)存后離開2021/4/817171. mkdir /tmp/v

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

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

22、 20 行了;行了; 12. :w man.test.config 12. :w man.test.config 13. 29G 13. 29G 之后,再給他之后,再給他 15x 15x 即可刪除即可刪除 15 15 個(gè)字符;個(gè)字符; 14. :wq!14. :wq!2021/4/81818二、二、SHELLSHELL變量與語(yǔ)法變量與語(yǔ)法ShellShell概述概述shellshell變量和符號(hào)變量和符號(hào)shellshell控制流程語(yǔ)法控制流程語(yǔ)法shellshell中的輸出重定向中的輸出重定向腳本實(shí)例腳本實(shí)例SHELL變量與語(yǔ)法變量與語(yǔ)法2021/4/819191 1、shellshell的

23、基本元素的基本元素(1 1) # #!/bin/bash /bin/bash 必須的,指出必須的,指出shellshell的類型的類型(2 2)# # 注釋注釋(3 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.2021/4/820202 2、一般步驟:、一般步驟:(1

24、1)編輯文件)編輯文件(2 2)保存文件)保存文件(3 3)將文件賦予可執(zhí)行的權(quán)限)將文件賦予可執(zhí)行的權(quán)限(4 4)運(yùn)行及排錯(cuò))運(yùn)行及排錯(cuò)2021/4/82121注意:注意:p 一般以一般以.sh.sh為文件后綴。沒(méi)有也能執(zhí)行。為文件后綴。沒(méi)有也能執(zhí)行。p 常見(jiàn)的兩種執(zhí)行方式常見(jiàn)的兩種執(zhí)行方式./ ./文件名文件名 在當(dāng)前目錄下寫明路徑執(zhí)行,要求文在當(dāng)前目錄下寫明路徑執(zhí)行,要求文件必須有執(zhí)行權(quán)限,如件必須有執(zhí)行權(quán)限,如chmod 755 run.shchmod 755 run.sh./run.sh./run.shsh sh 文件名文件名sh run.shsh run.shp 文件開頭指定一個(gè)或

25、多個(gè)解釋腳本程序的文件開頭指定一個(gè)或多個(gè)解釋腳本程序的shellshell,如,如#!/bin/bash#!/bin/bash如果指定,注意如果指定,注意/bin/bin不要漏了不要漏了“/”/”,否則用,否則用./ ./方方式執(zhí)行會(huì)找不到路徑。式執(zhí)行會(huì)找不到路徑。1.1. 不指定的話一般默認(rèn)以不指定的話一般默認(rèn)以/bin/sh/bin/sh執(zhí)行執(zhí)行shellshell腳本腳本2021/4/822223、Shell的一般結(jié)構(gòu)的一般結(jié)構(gòu) shell 類型類型 函數(shù)函數(shù) 主過(guò)程主過(guò)程一般模板一般模板 abc.sh#!/bin/bash shell類型類型#a simple shell script

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

27、符作為變量名,如,如$a$a表示變量表示變量a a的值。變量字符長(zhǎng)度超過(guò)的值。變量字符長(zhǎng)度超過(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)2021/4/824244 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è)鍵)鍵

28、旁邊的那個(gè)鍵)引號(hào)內(nèi)的字符串當(dāng)做引號(hào)內(nèi)的字符串當(dāng)做shellshell命令行解釋執(zhí)行,得到的結(jié)果取代整命令行解釋執(zhí)行,得到的結(jié)果取代整個(gè)倒引號(hào)括起來(lái)的部分。個(gè)倒引號(hào)括起來(lái)的部分。pwd即即pwd命令的執(zhí)行結(jié)果命令的執(zhí)行結(jié)果$LOGNAME系統(tǒng)變量系統(tǒng)變量2021/4/82525練習(xí)一下:區(qū)別下面幾句練習(xí)一下:區(qū)別下面幾句 echo my home is $HOMEecho my home is $HOME echo “my home is $HOME”echo “my home is $HOME” echo my home is $HOMEecho my home is $HOME echo

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

30、uqun $echo “Filename is N0$* *”Filename is N0$Filename is N0$* * 注意:在單引號(hào)括起來(lái)的字符串中,反斜線也成為普通字符,注意:在單引號(hào)括起來(lái)的字符串中,反斜線也成為普通字符,而失去轉(zhuǎn)義字符功能。而失去轉(zhuǎn)義字符功能。2021/4/82727三、變量三、變量shell shell 變量變量 可以保存如路徑名、文件名或者一個(gè)數(shù)字可以保存如路徑名、文件名或者一個(gè)數(shù)字 本地變量本地變量 局部變量只在創(chuàng)建它們的局部變量只在創(chuàng)建它們的ShellShell中使用,可以在中使用,可以在shellshell程序內(nèi)任意使用和修改它們。程序內(nèi)任意使用和修

31、改它們。 環(huán)境變量環(huán)境變量 可以在創(chuàng)建它們的可以在創(chuàng)建它們的ShellShell及其派生出來(lái)的任意子程及其派生出來(lái)的任意子程序中使用。有些變量是用戶創(chuàng)建的,其他的則是專用的(序中使用。有些變量是用戶創(chuàng)建的,其他的則是專用的(比如比如PATHPATH、HOME)HOME)。是系統(tǒng)環(huán)境的一部分,不必去定義。是系統(tǒng)環(huán)境的一部分,不必去定義它們,可以在它們,可以在shellshell程序中使用它們程序中使用它們 。還能在。還能在shellshell中加以修中加以修改。改。內(nèi)部變量?jī)?nèi)部變量 由系統(tǒng)提供的。與環(huán)境變量不同,但用戶不能修由系統(tǒng)提供的。與環(huán)境變量不同,但用戶不能修改它們。改它們。2021/4/

32、82828本地變量和環(huán)境變量的對(duì)比本地變量和環(huán)境變量的對(duì)比2021/4/829291 1、本地變量(局部變量、用戶變量)、本地變量(局部變量、用戶變量)u本地變量本地變量 在用戶現(xiàn)在的在用戶現(xiàn)在的shell生命期的腳本中使用生命期的腳本中使用u 變量名變量名=值值注意:注意: (1)等號(hào)兩邊不可以有空格)等號(hào)兩邊不可以有空格 (2)取值包含空格,必須用雙引號(hào)括起來(lái))取值包含空格,必須用雙引號(hào)括起來(lái) (3)Shell變量可以用大小寫字母,區(qū)分大小寫變量可以用大小寫字母,區(qū)分大小寫2021/4/83030u變量的聲明和使用變量的聲明和使用(1 1)變量是弱類型的(不用聲明類型)變量是弱類型的(不用

33、聲明類型)(2 2)變量聲明及賦值格式)變量聲明及賦值格式 變量變量= =值值(等號(hào)兩邊不能有空格)(等號(hào)兩邊不能有空格)(3 3)變量的引用)變量的引用 $ $變量名變量名 $變量名變量名 變量名為變量名為1 1個(gè)字符時(shí)建議使用方式一,多余一個(gè)字符個(gè)字符時(shí)建議使用方式一,多余一個(gè)字符時(shí)建議使用方式二時(shí)建議使用方式二 舉例舉例: $a: $a $abc $abc 2021/4/83131u顯示變量顯示變量 echoecho命令可以顯示單個(gè)變量取值,變量名前加命令可以顯示單個(gè)變量取值,變量名前加$ $echo $Nameecho $nameecho $nameareecho $name are輸

34、出引用變量時(shí)加輸出引用變量時(shí)加比較好比較好2021/4/83232u清除變量清除變量 unset unset 變量名變量名舉例:舉例:echo $nameecho $name unset name unset name ( (注意:注意:namename前沒(méi)有前沒(méi)有$)$)顯示本地所有變量顯示本地所有變量 setset2021/4/83333u設(shè)置只讀變量設(shè)置只讀變量 設(shè)置變量時(shí),不想再改變其值,可以將之設(shè)為只讀變量設(shè)置變量時(shí),不想再改變其值,可以將之設(shè)為只讀變量 變量名變量名=值值 readonly 變量名變量名2021/4/834342 2、環(huán)境變量、環(huán)境變量環(huán)境變量用于所有用戶進(jìn)程(通常

35、稱為子進(jìn)程)。登陸進(jìn)程稱環(huán)境變量用于所有用戶進(jìn)程(通常稱為子進(jìn)程)。登陸進(jìn)程稱為父進(jìn)程,通過(guò)為父進(jìn)程,通過(guò)pstree可以查看可以查看u環(huán)境變量可以用于所有子程序,著包括編輯器、腳本和應(yīng)用環(huán)境變量可以用于所有子程序,著包括編輯器、腳本和應(yīng)用 舉例:舉例:vi a.sh #!/bin/bash # 檢測(cè)環(huán)境變量檢測(cè)環(huán)境變量 echo 家目錄是家目錄是 $HOMEu 環(huán)境變量可以在命令行中設(shè)置,但用戶注銷時(shí)這些值將丟失環(huán)境變量可以在命令行中設(shè)置,但用戶注銷時(shí)這些值將丟失u 環(huán)境變量均為大寫環(huán)境變量均為大寫u 必須用必須用export命令導(dǎo)出命令導(dǎo)出2021/4/83535 設(shè)置環(huán)境變量設(shè)置環(huán)境變量

36、 variable-name=valuevariable-name=value export variable-name( export variable-name(環(huán)境變量名大寫環(huán)境變量名大寫) ) 顯示環(huán)境變量顯示環(huán)境變量 env env 可以看到所有的環(huán)境變量可以看到所有的環(huán)境變量 echo $echo $環(huán)境變量名環(huán)境變量名 (顯示一個(gè)變量)(顯示一個(gè)變量) 清除環(huán)境變量清除環(huán)境變量 unset unset 環(huán)境變量名環(huán)境變量名2021/4/83636uHOME HOME : 代表使用者的家目錄。代表使用者的家目錄。cd cd 去到使用者的家目錄去到使用者的家目錄 或者利用或者利用 c

37、d cd 就可以直接回到使用者家目錄了。就可以直接回到使用者家目錄了。uPS1PS1:shellshell的主提示符的主提示符u SHELL SHELL : 目前這個(gè)環(huán)境使用的目前這個(gè)環(huán)境使用的 SHELL SHELL 是哪個(gè)程序?是哪個(gè)程序? 如果是如果是 bash bash 的的話,預(yù)設(shè)是話,預(yù)設(shè)是 /bin/bash/bin/bashuPWDPWD:用戶當(dāng)前工作目錄的路徑。它指出用戶目前在:用戶當(dāng)前工作目錄的路徑。它指出用戶目前在LinuxLinux文件系統(tǒng)中處文件系統(tǒng)中處在什么位置。它是由在什么位置。它是由LinuxLinux自動(dòng)設(shè)置的自動(dòng)設(shè)置的u HISTSIZE HISTSIZE

38、: 這個(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è)置文件的讀取文件。這個(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í)行文件搜尋

39、的路徑,目錄與目錄中間以冒號(hào)(:)(:)分隔,分隔, 由于文件的搜尋是依序由由于文件的搜尋是依序由 PATH PATH 的變量?jī)?nèi)的目錄來(lái)查詢,所以,目錄的順的變量?jī)?nèi)的目錄來(lái)查詢,所以,目錄的順序也是重要的喔。序也是重要的喔。 uLANG LANG : 語(yǔ)系文件,很多數(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.UTF82021/4/83737PATHPATH示例示例 舉例:配置舉例:配置javajava環(huán)境變量可使任何目錄都能執(zhí)行環(huán)境變量可使任何目錄都能執(zhí)行javacja

40、vac命令命令(1 1)需要配置)需要配置JavaJava環(huán)境變量環(huán)境變量u JAVA_HOME(JDKJAVA_HOME(JDK存放的路徑)存放的路徑)u CLASSPATH CLASSPATH(字節(jié)碼的位置,讓(字節(jié)碼的位置,讓JVMJVM知道要運(yùn)行的類的字節(jié)碼放在知道要運(yùn)行的類的字節(jié)碼放在哪)哪)u PATH ( PATH (讓讓OSOS找到找到j(luò)avacjavac等命令的存放的位置)等命令的存放的位置)(2 2)在)在LinuxLinux下配置它們下配置它們u 打開終端打開終端u vi .bash_profilevi .bash_profileu 在配置文件中追加內(nèi)容在配置文件中追加內(nèi)

41、容 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)容,追加)不覆蓋原來(lái)的內(nèi)容,追加) export JAVA_HOME CLASSPATH PATHexport JAVA_HOME CLASSPATH PATHu 保存,讓配置起作用(保存,讓配置起作用(source .bash_profilesource .bash_profile或者注銷或者注銷)2021/4/83838讓環(huán)境變量的

42、修改在退出讓環(huán)境變量的修改在退出shellshell再次登錄時(shí)仍有效,需要在相再次登錄時(shí)仍有效,需要在相關(guān)配置文件中修改關(guān)配置文件中修改BashBash的初始化文件有:的初始化文件有:/etc/profile/etc/profile、/.bash_profile/.bash_profile、/.bash_login/.bash_login、/.profile/.profile、/.bashrc/.bashrc、/etc/bashrc/etc/bashrc/etc/profile/.bash_profile/.bashrc/etc/bashrc/.bash_login/.profile2021/

43、4/83939/etc/profile /etc/profile 存放一些全局(共有)變量,不管哪個(gè)用戶,登錄時(shí)都會(huì)存放一些全局(共有)變量,不管哪個(gè)用戶,登錄時(shí)都會(huì)讀取該文件。通常設(shè)置一些讀取該文件。通常設(shè)置一些ShellShell變量變量PATH,USER,HOSTNAMEPATH,USER,HOSTNAME和和HISTSIZEHISTSIZE等等 /.bash_profile:/.bash_profile:每個(gè)用戶都可使用該文件輸入專用于自己每個(gè)用戶都可使用該文件輸入專用于自己使用的使用的shellshell信息信息, ,當(dāng)用戶登錄時(shí)當(dāng)用戶登錄時(shí), ,該文件僅僅執(zhí)行一次該文件僅僅執(zhí)行一次

44、! !默認(rèn)情默認(rèn)情況下況下, ,他設(shè)置一些環(huán)境變量他設(shè)置一些環(huán)境變量, ,執(zhí)行用戶的執(zhí)行用戶的.bashrc.bashrc文件文件. ./.bashrc:/.bashrc:該文件包含專用于你的該文件包含專用于你的bash shellbash shell的的bashbash信息信息, ,當(dāng)?shù)卿洉r(shí)以及每次打開新的當(dāng)?shù)卿洉r(shí)以及每次打開新的shellshell時(shí)時(shí), ,該該文件被讀取該該文件被讀取. ./etc/bashrc:/etc/bashrc:為每一個(gè)運(yùn)行為每一個(gè)運(yùn)行bash shellbash shell的用戶執(zhí)行此文件的用戶執(zhí)行此文件. .當(dāng)當(dāng)bash shellbash shell被打開時(shí)

45、被打開時(shí), ,該文件被讀取該文件被讀取. .2021/4/84040上述配置文件的作用上述配置文件的作用1 1)登錄)登錄LinuxLinux先啟動(dòng)系統(tǒng)配置文件先啟動(dòng)系統(tǒng)配置文件/etc/profile/etc/profile,并從,并從/etc/profile.d/etc/profile.d目錄的配置文件中搜集目錄的配置文件中搜集shellshell的設(shè)置,為的設(shè)置,為系統(tǒng)的系統(tǒng)的每個(gè)用戶每個(gè)用戶設(shè)置環(huán)境信息。設(shè)置環(huán)境信息。2 2)用戶配置文件)用戶配置文件/.bash_profile/.bash_profile,每個(gè)用戶,每個(gè)用戶專用于自己專用于自己使用使用的的shellshell信息信息

46、, ,僅用戶僅用戶登錄時(shí)執(zhí)行一次登錄時(shí)執(zhí)行一次! !默認(rèn)情況下默認(rèn)情況下, ,此文件通過(guò)腳本執(zhí)行同目錄下用戶的此文件通過(guò)腳本執(zhí)行同目錄下用戶的.bashrc.bashrc文件。文件。3 3)/.bashrc/.bashrc文件包含專用于用戶文件包含專用于用戶bash shellbash shell的的bashbash信信息息, ,登錄及每次打開新的登錄及每次打開新的shellshell時(shí)都會(huì)執(zhí)行時(shí)都會(huì)執(zhí)行。里面又會(huì)調(diào)。里面又會(huì)調(diào)用用/etc/bashrc/etc/bashrc2021/4/84141設(shè)置用戶自己的環(huán)境變量設(shè)置用戶自己的環(huán)境變量 在在/home/user/.bash_profil

47、e/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)前目錄下名字以為查看當(dāng)前目錄下名字以. .開頭的文件。開頭的文件。 寫在寫在/.bash_profile/.bash_profile中,需重新登錄才能有效。除非運(yùn)行中,需重新登錄才能有效。除非運(yùn)行source .bash_profilesource .bash_profil

48、e使其立即有效。使其立即有效。 寫在寫在/.bashrc/.bashrc中,則打開新的終端中就有效中,則打開新的終端中就有效 區(qū)別:區(qū)別:bash_profilebash_profile只在會(huì)話開始的時(shí)候讀取一次,只在會(huì)話開始的時(shí)候讀取一次,而而bashrcbashrc則每次打開終端時(shí)都會(huì)讀取則每次打開終端時(shí)都會(huì)讀取 按照傳統(tǒng),定義的變量如按照傳統(tǒng),定義的變量如PATHPATH放到放到.bash_profile.bash_profile中,中,而像別名函數(shù)等放在而像別名函數(shù)等放在.bashrc.bashrc中,但是中,但是.bash_profile.bash_profile先于先于.bashr

49、c.bashrc讀取內(nèi)容,也可全放入讀取內(nèi)容,也可全放入.bashrc.bashrc中中習(xí)慣用各自的配置文件,編輯不需要習(xí)慣用各自的配置文件,編輯不需要root權(quán)限權(quán)限2021/4/842423 3、內(nèi)部變量、內(nèi)部變量 內(nèi)部變量是內(nèi)部變量是LinuxLinux所提供的一種特殊類型的變量,這類變量在所提供的一種特殊類型的變量,這類變量在程序中用來(lái)作出判斷。在程序中用來(lái)作出判斷。在shellshell程序內(nèi)這類變量的值是不能修程序內(nèi)這類變量的值是不能修改的。改的。部分內(nèi)部變量是:部分內(nèi)部變量是:u$# $# 傳送給傳送給shellshell程序的位置參數(shù)的數(shù)量程序的位置參數(shù)的數(shù)量u$?$?最后命令

50、的完成碼或者在最后命令的完成碼或者在shellshell程序內(nèi)部執(zhí)行的程序內(nèi)部執(zhí)行的shellshell程序(返回值)程序(返回值)u$0shell$0shell程序的名稱程序的名稱u$ $* *調(diào)用調(diào)用shellshell程序時(shí)所傳送的全部參數(shù)的單字符串,程序時(shí)所傳送的全部參數(shù)的單字符串, “參數(shù)參數(shù)1”“1”“參數(shù)參數(shù)2”2”形式保存的參數(shù)形式保存的參數(shù)2021/4/84343u$“參數(shù)參數(shù)1”“1”“參數(shù)參數(shù)2”2”形式保存的參形式保存的參數(shù)數(shù)u$n$n第第n n個(gè)參數(shù)個(gè)參數(shù)u$本程序的本程序的PIDPIDu$!$!上一個(gè)命令的上一個(gè)命令的PIDPID2021/4/84444使用使用sh

51、ellshell預(yù)定義變量的腳本舉例預(yù)定義變量的腳本舉例2021/4/845454 4 位置參數(shù)位置參數(shù)(1 1) 位置參數(shù)及引用位置參數(shù)及引用 可以編寫一個(gè)可以編寫一個(gè)shellshell腳本,當(dāng)從命令行或者從其他腳本,當(dāng)從命令行或者從其他shellshell腳本腳本中調(diào)用它的時(shí)候,這個(gè)腳本接收若干參數(shù)。這些選項(xiàng)是通過(guò)中調(diào)用它的時(shí)候,這個(gè)腳本接收若干參數(shù)。這些選項(xiàng)是通過(guò)LinuxLinux作為位置參數(shù)(作為位置參數(shù)(positional parameterpositional parameter)提供給)提供給shellshell程序的。在程序的。在shellshell腳本中應(yīng)有變量,接收實(shí)

52、參,這類變量的名腳本中應(yīng)有變量,接收實(shí)參,這類變量的名稱很特別,分別是稱很特別,分別是1 1,2 2,3 3,這類變量稱為位置變量。,這類變量稱為位置變量。位置參數(shù)位置參數(shù)1 1存放在位置變量存放在位置變量1 1中,位置參數(shù)中,位置參數(shù)2 2存放位置變量存放位置變量2 2中中,在程序中可以使用,在程序中可以使用$1$1,$2$2,來(lái)訪問(wèn),來(lái)訪問(wèn),舉例:舉例: 2021/4/84646(2 2) 用用setset命令為位置參數(shù)賦值命令為位置參數(shù)賦值在在shellshell程序中可以利用程序中可以利用setset命令為位置參數(shù)賦值或重新賦值。命令為位置參數(shù)賦值或重新賦值。一般格式:一般格式:set

53、 set 參數(shù)表參數(shù)表 說(shuō)明:該命令后面無(wú)參數(shù)時(shí),將顯示系統(tǒng)中的系統(tǒng)變量的值;說(shuō)明:該命令后面無(wú)參數(shù)時(shí),將顯示系統(tǒng)中的系統(tǒng)變量的值;如果有參數(shù)將分別給位置參數(shù)賦值。如果有參數(shù)將分別給位置參數(shù)賦值。2021/4/84747四、變量表達(dá)式四、變量表達(dá)式1 1、條件判斷命令、條件判斷命令testtesttest n1 -test n1 -參數(shù)參數(shù) n2n2(或(或 參數(shù)參數(shù) 表達(dá)式)表達(dá)式)真返回真返回0 0,假返回,假返回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 邏輯與邏輯

54、與-o-o 邏輯或邏輯或! 邏輯非邏輯非2021/4/851513 3、控制流程、控制流程shellshell運(yùn)算符和運(yùn)算符和CC語(yǔ)言基本類似,也有分支、循環(huán)流程語(yǔ)言基本類似,也有分支、循環(huán)流程控制??刂啤:?jiǎn)單舉例簡(jiǎn)單舉例后面例子涉及的命令后面例子涉及的命令seqseq命令:產(chǎn)生命令:產(chǎn)生1-91-9的數(shù)字序列的數(shù)字序列 比如比如 seq 1 4seq 1 4exprexpr命令:對(duì)表達(dá)式求值命令:對(duì)表達(dá)式求值 直接求值命令:對(duì)被括起來(lái)的表達(dá)式求值直接求值命令:對(duì)被括起來(lái)的表達(dá)式求值2021/4/85252表達(dá)式求值:表達(dá)式求值:$ expr 1 + 3$ expr 1 + 3$ expr 2

55、 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)2021/4/853531 1)分支結(jié)構(gòu))分支結(jié)構(gòu)n ifif分支分支if if $# -eq 0 $# -eq 0 thenthenecho “echo “輸入了輸入了0 0個(gè)參數(shù)個(gè)參數(shù)”elif elif $# -lt 1 $# -lt 1 then echo “then echo “輸入

56、了多個(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è)分支條件后必須以兩每個(gè)分支條件后必須以兩個(gè)分號(hào)結(jié)尾個(gè)分號(hào)結(jié)尾2021/4/854542 2)循環(huán)結(jié)構(gòu))循環(huán)結(jié)構(gòu) for for 例子例子輸出輸出100100內(nèi)內(nèi)1010的倍數(shù)

57、的倍數(shù)for i in seq 1 9for i in seq 1 9dodoecho expr $i echo expr $i * * 10 10donedone或?qū)懟驅(qū)慹cho $(expr $i echo $(expr $i * * 10) 10)n乘號(hào)前加轉(zhuǎn)義符,乘號(hào)前加轉(zhuǎn)義符,與數(shù)字間要有空格。與數(shù)字間要有空格。2021/4/85555 read read 變量變量1 1 變量變量2 2 可以從鍵盤上讀取多個(gè)變量的值,用戶輸入數(shù)據(jù)時(shí),以空格可以從鍵盤上讀取多個(gè)變量的值,用戶輸入數(shù)據(jù)時(shí),以空格或者或者TabTab鍵作為分隔。鍵作為分隔。 如果輸入的數(shù)據(jù)個(gè)數(shù)不夠,則從左到右對(duì)應(yīng)賦值,沒(méi)有

58、輸入如果輸入的數(shù)據(jù)個(gè)數(shù)不夠,則從左到右對(duì)應(yīng)賦值,沒(méi)有輸入的變量為空;的變量為空; 如果輸入的數(shù)據(jù)個(gè)數(shù)超了,則從左到右對(duì)應(yīng)賦值,最后一個(gè)如果輸入的數(shù)據(jù)個(gè)數(shù)超了,則從左到右對(duì)應(yīng)賦值,最后一個(gè)變量被賦予剩余的所有數(shù)據(jù)。變量被賦予剩余的所有數(shù)據(jù)。2021/4/85656read 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序列數(shù)各數(shù)的序列數(shù)各數(shù)的1010倍數(shù)倍數(shù)2021/4/85757 whilewhile例子例子求求1 1到到1001

59、00的和的和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 :直接求值命令:直接求值命令2021/4/85858五五 命令結(jié)果重定向命令結(jié)果重定向 1 1stdoutstdout標(biāo)準(zhǔn)輸出標(biāo)準(zhǔn)輸出 2 2stderrstderr標(biāo)準(zhǔn)錯(cuò)誤標(biāo)準(zhǔn)錯(cuò)誤 輸出重定向到文件輸出重定向到文件filefile,終端上只能看到標(biāo)準(zhǔn)錯(cuò)誤:,終端上只能看到標(biāo)準(zhǔn)錯(cuò)誤:# #命令命令 file file 錯(cuò)誤重定向到文件錯(cuò)誤重定向到文件fi

60、le file ,終端上只能看到標(biāo)準(zhǔn)輸出:,終端上只能看到標(biāo)準(zhǔn)輸出:# #命令命令 2file2file 標(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)2021/4/85959屏蔽命令任何輸出的:/dev/null 2&1cp /etc/my.conf cp /etc/my.conf /dev/null 2&1/dev/null 2&1/dev/null/dev/null空設(shè)備空設(shè)備此句命令的結(jié)果是:此句命令的結(jié)果是:pcpcp命令沒(méi)有目標(biāo)文件命令沒(méi)有目標(biāo)文

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論