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

下載本文檔

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

文檔簡介

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

2、LLO WORLD!HELLO WORLD!n vi hello.shvi hello.shn 按按i i進入插入模式進入插入模式n 輸入輸入echo “hello world!”echo “hello world!”n : :輸入輸入wqwq保存退出保存退出n sh hello.shsh hello.sh或者或者chmod 755 hello.shchmod 755 hello.sh./hello.sh./hello.sh4一、一、VIVI編輯器編輯器n VIVI的三種工作模式的三種工作模式n VIVI的啟動的啟動n VIVI的退出的退出n VIVI的文本的文本編輯編輯n VIVI命令模式下

3、的操作命令模式下的操作n VIVI行命令模式下的操作行命令模式下的操作VI 編輯器的使用編輯器的使用5n 系統(tǒng)配置文件、系統(tǒng)配置文件、shellshell腳本文件等都是文本文腳本文件等都是文本文件,編輯它們都要使用文本編輯器。件,編輯它們都要使用文本編輯器。n 在在LinuxLinux系統(tǒng)中有多種文本編輯器,其中既有系統(tǒng)中有多種文本編輯器,其中既有字符界面如的字符界面如的VIVI、EMACASEMACAS等,也有圖形界面的等,也有圖形界面的如如“附件附件”菜單下的菜單下的“文本編輯器(文本編輯器(geditgedit)”等,用戶可以根據(jù)自己的喜好選擇使用。等,用戶可以根據(jù)自己的喜好選擇使用。n

4、 學習學習vivi的方法:的方法:vivi的命令太多且難以記憶,而實際上真正的命令太多且難以記憶,而實際上真正經(jīng)常使用的命令并不是太多,只要掌握幾個關(guān)經(jīng)常使用的命令并不是太多,只要掌握幾個關(guān)鍵的并加以適當練習很快就上手使用鍵的并加以適當練習很快就上手使用vivi。6為什么選擇為什么選擇VIVIn 就使用的方便性而言,有比就使用的方便性而言,有比vivi更好的編輯器,還要圖更好的編輯器,還要圖形化的形化的editedit,為什么還要用,為什么還要用vivi?p歷史久遠,功能強大,在有些情況下系統(tǒng)中能夠找歷史久遠,功能強大,在有些情況下系統(tǒng)中能夠找到的編輯器只有到的編輯器只有vivi;p用戶一旦熟

5、悉后,使用非常方便;系統(tǒng)管理員使用用戶一旦熟悉后,使用非常方便;系統(tǒng)管理員使用正則表達式可以極大地提高工作效率,而學習正則表達式可以極大地提高工作效率,而學習vivi也也是掌握正則表達式的有效途徑。是掌握正則表達式的有效途徑。n由于由于vivi的版本不同,其命令格式、功能和用法會有一的版本不同,其命令格式、功能和用法會有一些差別。些差別。ShellShell中執(zhí)行中執(zhí)行vivi命令,命令,RedHatRedHat系統(tǒng)實際上是執(zhí)系統(tǒng)實際上是執(zhí)行行vimvim,它是傳統(tǒng),它是傳統(tǒng)vivi的增強版本的增強版本71 1、VIVI的三種工作模式的三種工作模式n 命令模式命令模式p啟動啟動VIVI默認進入

6、命令模式。此時界面不能編輯默認進入命令模式。此時界面不能編輯,只能接受命令,只能接受命令( (鍵入的命令看不到鍵入的命令看不到)p文件的保存,退出,文本的刪除、復(fù)制、搜索文件的保存,退出,文本的刪除、復(fù)制、搜索等操作等操作n 輸入模式輸入模式p編輯模式編輯模式 p命令模式下用命令模式下用i(sert),a(ppend)i(sert),a(ppend),o,so,s等均可進等均可進入該模式。按入該模式。按escesc返回命令模式返回命令模式n 行編輯模式行編輯模式p實際上也是命令模式的一種,在實際上也是命令模式的一種,在命令模式下輸命令模式下輸入冒號入冒號進入一個命令行,進入一個命令行,可顯示地

7、輸入命令可顯示地輸入命令(所以也有些書認為是兩種工作模式)。所以也有些書認為是兩種工作模式)。三種模式可自由切換,一般切換命令就是操作的英文單詞三種模式可自由切換,一般切換命令就是操作的英文單詞的首字母的首字母82 2、VIVI的啟動的啟動n 啟動命令:啟動命令:vi my.txtvi my.txtn 如果文件存在,則如果文件存在,則vivi顯示文件內(nèi)容并等待用戶顯示文件內(nèi)容并等待用戶的命令。的命令。n 如果指定的文件不存在,則如果指定的文件不存在,則vivi將告知用戶這是將告知用戶這是未命名的文件,并進入一個空白的界面。未命名的文件,并進入一個空白的界面。n 啟動啟動vivi時都是默認處于命

8、令模式。用戶必須使時都是默認處于命令模式。用戶必須使用命令切換到文本輸入模式才能進行輸入編輯用命令切換到文本輸入模式才能進行輸入編輯,或者可執(zhí)行刪除、復(fù)制等編輯命令。,或者可執(zhí)行刪除、復(fù)制等編輯命令。vi vi R file_nameR file_name,以只,以只讀讀方式打方式打開開文件文件93 3、VIVI的退出的退出n 冒號進命令行模式下:冒號進命令行模式下::q! 不存檔強制退出。不存檔強制退出。:w 保存但不退出保存但不退出,w w(rite)后后可加所要存檔的文檔可加所要存檔的文檔名。名。:wq 存檔后退出。存檔后退出。p 命令模式下按命令模式下按zz,功能與功能與 :wq 相同

9、。相同。p :x 與與:wq相同相同n 命令模式:命令模式:ZZZZ、ZQZQ保存保存/ /不保存退出不保存退出104 4、怎么編輯、怎么編輯必須從命令模式轉(zhuǎn)入插入模式才能進行輸入必須從命令模式轉(zhuǎn)入插入模式才能進行輸入編輯,可用命令有編輯,可用命令有:n 新增新增 (append)pa :從光標所在位置:從光標所在位置后面后面開始新增資料開始新增資料pA: 從光標所在從光標所在行最后面的行最后面的地方開始新增資料。地方開始新增資料。n 插入插入 (insert)pi: 從光標所在位置從光標所在位置前面前面開始插入資料開始插入資料pI :從光標所在:從光標所在行行的第一個非空白字元的第一個非空白

10、字元前面前面開始開始插入資料。插入資料。n 開始開始 (open)po :在光標所:在光標所在行下在行下新增一列并進入輸入模式。新增一列并進入輸入模式。O: 在光標所在光標所在行上方在行上方新增一列并進入輸入模式。新增一列并進入輸入模式。冒號進入行命令模式,輸入冒號進入行命令模式,輸入set nu可設(shè)置可設(shè)置vi顯示行號顯示行號115、命令模式下的操作:刪除與修改、命令模式下的操作:刪除與修改n x: 刪除光標所在字符刪除光標所在字符n dw dw 刪除一個單詞刪除一個單詞n dd :刪除光標所在的行:刪除光標所在的行n s s:刪除光標所在字節(jié),:刪除光標所在字節(jié),并進入輸入模式并進入輸入模

11、式# #表示數(shù)字表示數(shù)字n#x #x 刪除幾個字符,如刪除幾個字符,如3x3xn#dw #dw 刪除幾個單詞,如刪除幾個單詞,如3dw3dw表示刪除三個單詞表示刪除三個單詞n#dd #dd 刪除多個行,如刪除多個行,如3dd 3dd 表示刪除光標行及光標的表示刪除光標行及光標的下兩行下兩行nd$ d$ 刪除光標到行尾的內(nèi)刪除光標到行尾的內(nèi)容容d d光標鍵:光標鍵:左:刪除光標前面的字符;左:刪除光標前面的字符;右:刪除光標所在的字符;右:刪除光標所在的字符;上:將當前行與上一行刪除;上:將當前行與上一行刪除;下:當前行與下一行刪除下:當前行與下一行刪除ndnd上下光標鍵上下光標鍵: :刪除當前

12、行之上、下的幾行文刪除當前行之上、下的幾行文本(包括當前行)本(包括當前行)u:恢復(fù)剛才被修改的文本恢復(fù)剛才被修改的文本 U:恢復(fù)光標所在行的所有修改:恢復(fù)光標所在行的所有修改.:重復(fù)上一次命令的操作重復(fù)上一次命令的操作12命令模式下的操作:命令模式下的操作:文本復(fù)制、粘貼文本復(fù)制、粘貼n 復(fù)制命令:復(fù)制命令:y ypyy: yy: 復(fù)制整行復(fù)制整行pyw:yw:復(fù)制光標所在的單詞復(fù)制光標所在的單詞pnywnyw:復(fù)制包括光標所在的:復(fù)制包括光標所在的n n個單詞個單詞pnyy:nyy:復(fù)制包括當前行在內(nèi)的復(fù)制包括當前行在內(nèi)的n n行行n 粘貼命令粘貼命令pP Pn 光標移動光標移動ph h、

13、j j、k k、l lpnGnG:移動到底:移動到底n n行行首行行首136 6、行、行命令模式下的操作:命令模式下的操作:字符串的查找、替換字符串的查找、替換n :/string:/string搜索指定的字符串。搜索指定的字符串。p按鍵按鍵n n:繼續(xù)進行搜索:繼續(xù)進行搜索 如果寫的是斜杠(如果寫的是斜杠(/ /):按):按n n會從當前位置向后查找會從當前位置向后查找;如果寫的是問號(?),按;如果寫的是問號(?),按n n鍵則從當前位置向鍵則從當前位置向前查找前查找n 查找且替換查找且替換p:%s /SEARCH /REPLACE:%s /SEARCH /REPLACE把文檔中所有把文檔

14、中所有SEARCHSEARCH替換成替換成REPLACEREPLACE;p:#,# s /SEARCH /REPLACE /g :#,# s /SEARCH /REPLACE /g 號表示數(shù)字,表示從多少行到多少行,把號表示數(shù)字,表示從多少行到多少行,把SEARCHSEARCH替換成替換成REPLACEREPLACE;p:s /SEARCH /REPLACE /g :s /SEARCH /REPLACE /g 把把當前光標當前光標所在行中的所在行中的SEARCHSEARCH單詞,替換成單詞,替換成REPLACEREPLACE,并把所有,并把所有SEARCHSEARCH高亮顯示高亮顯示147 7

15、、設(shè)置、設(shè)置vivi 全局的配置文件位于全局的配置文件位于/etc/vim/vimrc(/etc/vim/vimrc(或者或者/etc/vimrc)/etc/vimrc) 也可以擁有自己獨立的配置文件,配置文件位也可以擁有自己獨立的配置文件,配置文件位“/.vimrc”/.vimrc”,如果沒有該文件,也可以直接用如下,如果沒有該文件,也可以直接用如下命令創(chuàng)建并編輯命令創(chuàng)建并編輯比如:比如:set nu set nu 顯示行號顯示行號set ruler set ruler 顯示光標位置顯示光標位置set undolevel set undolevel 顯示光標位置顯示光標位置set smart

16、indent set smartindent 智能縮進智能縮進syntax on(syntax on(或或syn on) syn on) 語法高亮語法高亮15文本輸入狀態(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)系16案例練習案例練習n 1. 1. 請在請在 /tmp /tmp 這個目錄下建立一個名為這個目錄下建立一個名為 vitest vitest 的目錄;的目錄; n 2. 2. 進入進入 vitest vitest 這個目錄當中;這個目錄當中;

17、n 3. 3. 將將 /etc/man.config /etc/man.config 拷貝到本目錄底下拷貝到本目錄底下n 4. 4. 使用使用 vi vi 開啟本目錄下的開啟本目錄下的 man.config man.config 這個檔案;這個檔案; n 5. 5. 在在 vi vi 中設(shè)定一下行號;中設(shè)定一下行號; n 6. 6. 移動到第移動到第 58 58 行,向右移動行,向右移動 40 40 個字符,請問您看到的雙引個字符,請問您看到的雙引號內(nèi)是什么目錄?號內(nèi)是什么目錄? n 7. 7. 移動到第一行,并且向下搜尋一下移動到第一行,并且向下搜尋一下“bzip2”bzip2”這個字符串,

18、請這個字符串,請問他在第幾行?問他在第幾行? n 8. 8. 接著下來,我要將接著下來,我要將 50 50 到到 100 100 行之間的行之間的 man man 改為改為 MANMAN,并,并且一個一個挑選是否需要修改,如何下達指令?且一個一個挑選是否需要修改,如何下達指令? n 9. 9. 修改完之后,突然反悔了,要全部復(fù)原,有哪些方法?修改完之后,突然反悔了,要全部復(fù)原,有哪些方法? n 10. 10. 我要復(fù)制我要復(fù)制 51 51 到到 60 60 行這十行的內(nèi)容,并且貼到最后一行之行這十行的內(nèi)容,并且貼到最后一行之后;后; n 11. 11. 刪除刪除 11 11 到到 30 30

19、行之間的行之間的 20 20 行;行; n 12. 12. 將這個文件另存成一個將這個文件另存成一個 man.test.config man.test.config 的文件;的文件; n 13. 13. 到第到第 29 29 行,并且刪除行,并且刪除 15 15 個字符;個字符; n 14. 14. 儲存后離開儲存后離開17n 1. mkdir /tmp/vitest1. mkdir /tmp/vitestn 2. cd /tmp/vitest 2. cd /tmp/vitest n 3. cp /etc/man.config . 3. cp /etc/man.config . n 4. vi

20、 man.config 4. vi man.config n 5. :set nu 5. :set nu n 6. 6. 先按下先按下 58G 58G 再按下再按下 40 40 會看到會看到 /dir/bin/foo /dir/bin/foo 這個字樣在這個字樣在雙引號內(nèi);雙引號內(nèi); n 7. 7. 先執(zhí)行先執(zhí)行 1G 1G 或或 gg gg 后,直接輸入后,直接輸入 /bzip2 /bzip2n 8. 8. 直接執(zhí)行直接執(zhí)行 :50,100s/man/MAN/gc :50,100s/man/MAN/gc 即可即可n 9. (1)9. (1)簡單的方法可以一直按簡單的方法可以一直按 u u 恢

21、復(fù)到原始狀態(tài),恢復(fù)到原始狀態(tài),(2)(2)使用不使用不儲存離開儲存離開 :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 12. :w man.test.config n 13. 29G 13. 29G 之后,再給他之后,再給他 15x 15x 即可

22、刪除即可刪除 15 15 個字符;個字符; n 14. :wq!14. :wq!18二、二、SHELLSHELL變量與語法變量與語法nShellShell概述概述nshellshell變量和符號變量和符號nshellshell控制流程語法控制流程語法nshellshell中的輸出重定向中的輸出重定向n腳本實例腳本實例SHELL變量與語法變量與語法191 1、shellshell的基本元素的基本元素(1 1) # #!/bin/bash /bin/bash 必須的,指出必須的,指出shellshell的類型的類型(2 2)# # 注釋注釋(3 3)變量)變量(4 4)控制)控制一、一、Shell

23、Shell概述概述一個一個shell腳本腳本vi clearup.sh#!/bin/bash# this is clearcd /var/logcat /dev/null/var/log/messages /dev/null Linux中的無限大的垃圾回收站中的無限大的垃圾回收站echo Logs cleaned up.202 2、一般步驟:、一般步驟:(1 1)編輯文件)編輯文件(2 2)保存文件)保存文件(3 3)將文件賦予可執(zhí)行的權(quán)限)將文件賦予可執(zhí)行的權(quán)限(4 4)運行及排錯)運行及排錯21注意:注意:p 一般以一般以.sh.sh為文件后綴。沒有也能執(zhí)行。為文件后綴。沒有也能執(zhí)行。p

24、常見的兩種執(zhí)行方式常見的兩種執(zhí)行方式n ././文件名文件名 在當前目錄下寫明路徑執(zhí)行,要求文在當前目錄下寫明路徑執(zhí)行,要求文件必須有執(zhí)行權(quán)限,如件必須有執(zhí)行權(quán)限,如chmod 755 run.shchmod 755 run.sh./run.sh./run.shn sh sh 文件名文件名sh run.shsh run.shp 文件開頭指定一個或多個解釋腳本程序的文件開頭指定一個或多個解釋腳本程序的shellshell,如,如#!/bin/bash#!/bin/bashn 如果指定,注意如果指定,注意/bin/bin不要漏了不要漏了“/”/”,否則用,否則用././方式執(zhí)行會找不到路徑。方式執(zhí)

25、行會找不到路徑。1.1. 不指定的話一般默認以不指定的話一般默認以/bin/sh/bin/sh執(zhí)行執(zhí)行shellshell腳本腳本223、Shell的一般結(jié)構(gòu)的一般結(jié)構(gòu) shell 類型類型 函數(shù)函數(shù) 主過程主過程一般模板一般模板 abc.sh#!/bin/bash shell類型類型#a simple shell script example#a functionfunciton sayhello() 函數(shù)函數(shù)echo Enter Your name:read name 讀取來自鍵盤輸入的變量讀取來自鍵盤輸入的變量echo Hello $nameecho programme starts h

26、ere. 主過程主過程sayhelloecho programme ends.231 1、注釋符、注釋符# #除了除了#!/bin/bash#!/bin/bash里的里的# #特殊特殊2 2、美元符、美元符 $ $變量符。與反斜杠轉(zhuǎn)義符相反,使其后的普通字符作變量符。與反斜杠轉(zhuǎn)義符相反,使其后的普通字符作為變量名,如為變量名,如$a$a表示變量表示變量a a的值。變量字符長度超的值。變量字符長度超過過1 1個時,用個時,用括起來括起來3 3、單引號、單引號被引起的字符全部做普通字符,即全部原樣被引起的字符全部做普通字符,即全部原樣echo my $SHELLecho my $SHELL二、二、

27、ShellShell中的特殊符號中的特殊符號244 4、雙引號、雙引號引號內(nèi)的內(nèi)容,除引號內(nèi)的內(nèi)容,除$ $、轉(zhuǎn)義符、轉(zhuǎn)義符 、倒引號、倒引號 這三個保留這三個保留特殊功能,其他字符均做普通字符。特殊功能,其他字符均做普通字符。5 5、倒引號、倒引號( (數(shù)字數(shù)字1 1鍵旁邊的那個鍵)鍵旁邊的那個鍵)引號內(nèi)的字符串當做引號內(nèi)的字符串當做shellshell命令行解釋執(zhí)行,得到的命令行解釋執(zhí)行,得到的結(jié)果取代整個倒引號括起來的部分。結(jié)果取代整個倒引號括起來的部分。pwd即即pwd命令的執(zhí)行結(jié)果命令的執(zhí)行結(jié)果$LOGNAME系統(tǒng)變量系統(tǒng)變量25練習一下:區(qū)別下面幾句練習一下:區(qū)別下面幾句n ech

28、o 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 pwdecho my home is pwd 用于括起來用于括起來shell命令命令 用于原樣顯示用于原樣顯示266. 6. 反斜線反斜線 反斜線是轉(zhuǎn)義字符,它能把特殊字符變成普通字反斜線是轉(zhuǎn)義字符,它能把特殊字符

29、變成普通字符。在某個字符前面利用反斜杠(符。在某個字符前面利用反斜杠( )能夠阻止)能夠阻止shellshell把后面的字符解釋為特殊字符。把后面的字符解釋為特殊字符。例例4 4:yuqunyuqun $echo “Filename is N0$yuqunyuqun $echo “Filename is N0$* *”Filename is N0$Filename is N0$* * 注意:在單引號括起來的字符串中,反斜線也成注意:在單引號括起來的字符串中,反斜線也成為普通字符,而失去轉(zhuǎn)義字符功能。為普通字符,而失去轉(zhuǎn)義字符功能。27三、變量三、變量shell shell 變量變量 可以保存如

30、路徑名、文件名或者一個數(shù)字可以保存如路徑名、文件名或者一個數(shù)字n 本地變量本地變量 局部變量只在創(chuàng)建它們的局部變量只在創(chuàng)建它們的ShellShell中使用,可以在中使用,可以在shellshell程序內(nèi)任意使用和修改它們。程序內(nèi)任意使用和修改它們。n 環(huán)境變量環(huán)境變量 可以在創(chuàng)建它們的可以在創(chuàng)建它們的ShellShell及其派生出來的任意子及其派生出來的任意子程序中使用。有些變量是用戶創(chuàng)建的,其他的則是專用的程序中使用。有些變量是用戶創(chuàng)建的,其他的則是專用的(比如(比如PATHPATH、HOME)HOME)。是系統(tǒng)環(huán)境的一部分,不必去定義它。是系統(tǒng)環(huán)境的一部分,不必去定義它們,可以在們,可以在

31、shellshell程序中使用它們程序中使用它們 。還能在。還能在shellshell中加以修中加以修改。改。n內(nèi)部變量內(nèi)部變量 由系統(tǒng)提供的。與環(huán)境變量不同,但用戶不能由系統(tǒng)提供的。與環(huán)境變量不同,但用戶不能修改它們。修改它們。28本地變量和環(huán)境變量的對比本地變量和環(huán)境變量的對比291 1、本地變量(局部變量、用戶變量)、本地變量(局部變量、用戶變量)u本地變量本地變量 在用戶現(xiàn)在的在用戶現(xiàn)在的shell生命期的腳本中使用生命期的腳本中使用u 變量名變量名=值值注意:注意: (1)等號兩邊不可以有空格)等號兩邊不可以有空格 (2)取值包含空格,必須用雙引號括起來)取值包含空格,必須用雙引號括

32、起來 (3)Shell變量可以用大小寫字母,區(qū)分大小寫變量可以用大小寫字母,區(qū)分大小寫30u變量的聲明和使用變量的聲明和使用(1 1)變量是弱類型的(不用聲明類型)變量是弱類型的(不用聲明類型)(2 2)變量聲明及賦值格式)變量聲明及賦值格式 變量變量= =值值(等號兩邊不能有空格)(等號兩邊不能有空格)(3 3)變量的引用)變量的引用 $ $變量名變量名 $變量名變量名 變量名為變量名為1 1個字符時建議使用方式一,多余一個字個字符時建議使用方式一,多余一個字符時建議使用方式二符時建議使用方式二 舉例舉例: $a: $a $abc $abc 31u顯示變量顯示變量 echoecho命令可以顯

33、示單個變量取值,變量名前加命令可以顯示單個變量取值,變量名前加$ $echo $Nameecho $nameecho $nameareecho $name are輸出引用變量時加輸出引用變量時加比較好比較好32u清除變量清除變量 unset unset 變量名變量名舉例:舉例:echo $nameecho $name unset name unset name ( (注意:注意:namename前沒有前沒有$)$)顯示本地所有變量顯示本地所有變量 setset33u設(shè)置只讀變量設(shè)置只讀變量 設(shè)置變量時,不想再改變其值,可以將之設(shè)為只讀變量設(shè)置變量時,不想再改變其值,可以將之設(shè)為只讀變量 變量名

34、變量名=值值 readonly 變量名變量名342 2、環(huán)境變量、環(huán)境變量環(huán)境變量用于所有用戶進程(通常稱為子進程)。登陸進程稱環(huán)境變量用于所有用戶進程(通常稱為子進程)。登陸進程稱為父進程,通過為父進程,通過pstree可以查看可以查看u環(huán)境變量可以用于所有子程序,著包括編輯器、腳本和應(yīng)用環(huán)境變量可以用于所有子程序,著包括編輯器、腳本和應(yīng)用 舉例:舉例:vi a.sh #!/bin/bash # 檢測環(huán)境變量檢測環(huán)境變量 echo 家目錄是家目錄是 $HOMEu 環(huán)境變量可以在命令行中設(shè)置,但用戶注銷時這些值將丟失環(huán)境變量可以在命令行中設(shè)置,但用戶注銷時這些值將丟失u 環(huán)境變量均為大寫環(huán)境變

35、量均為大寫u 必須用必須用export命令導(dǎo)出命令導(dǎo)出35n 設(shè)置環(huán)境變量設(shè)置環(huán)境變量 p variable-name=valuevariable-name=valuep export variable-name( export variable-name(環(huán)境變量名大寫環(huán)境變量名大寫) )n 顯示環(huán)境變量顯示環(huán)境變量p env env 可以看到所有的環(huán)境變量可以看到所有的環(huán)境變量p echo $echo $環(huán)境變量名環(huán)境變量名 (顯示一個變量)(顯示一個變量)n 清除環(huán)境變量清除環(huán)境變量p unset unset 環(huán)境變量名環(huán)境變量名36uHOME HOME : 代表使用者的家目錄。代表使用

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

37、由LinuxLinux自動設(shè)置的自動設(shè)置的u HISTSIZE HISTSIZE : 這個與這個與“歷史命令歷史命令”有關(guān),曾經(jīng)下達過的指令可以被系統(tǒng)有關(guān),曾經(jīng)下達過的指令可以被系統(tǒng)記錄下來,而記錄的記錄下來,而記錄的“數(shù)目數(shù)目”則是由這個值來設(shè)定的。則是由這個值來設(shè)定的。 u ENV ENV : 這個使用者所使用的個性化環(huán)境設(shè)置文件的讀取文件。這個使用者所使用的個性化環(huán)境設(shè)置文件的讀取文件。 uMAIL MAIL : 當我們使用當我們使用 mail mail 這個指令在收信時,系統(tǒng)會去讀取的郵件信這個指令在收信時,系統(tǒng)會去讀取的郵件信箱文件箱文件 (mailbox)mailbox)。 u P

38、ATH PATH : 就是執(zhí)行文件搜尋的路徑,目錄與目錄中間以冒號就是執(zhí)行文件搜尋的路徑,目錄與目錄中間以冒號(:)(:)分隔,分隔, 由于文件的搜尋是依序由由于文件的搜尋是依序由 PATH PATH 的變量內(nèi)的目錄來查詢,所以,目錄的順的變量內(nèi)的目錄來查詢,所以,目錄的順序也是重要的喔。序也是重要的喔。 uLANG LANG : 語系文件,很多數(shù)據(jù)都會用到他,當出現(xiàn)編碼錯誤的時候往往語系文件,很多數(shù)據(jù)都會用到他,當出現(xiàn)編碼錯誤的時候往往需要設(shè)置它,中文編碼是需要設(shè)置它,中文編碼是zh_CN.UTF8zh_CN.UTF837PATHPATH示例示例n 舉例:配置舉例:配置javajava環(huán)境變

39、量可使任何目錄都能執(zhí)行環(huán)境變量可使任何目錄都能執(zhí)行javacjavac命令命令(1 1)需要配置)需要配置JavaJava環(huán)境變量環(huán)境變量u JAVA_HOME(JDKJAVA_HOME(JDK存放的路徑)存放的路徑)u CLASSPATH CLASSPATH(字節(jié)碼的位置,讓(字節(jié)碼的位置,讓JVMJVM知道要運行的類的字節(jié)碼放在知道要運行的類的字節(jié)碼放在哪)哪)u PATH ( PATH (讓讓OSOS找到找到j(luò)avacjavac等命令的存放的位置)等命令的存放的位置)(2 2)在)在LinuxLinux下配置它們下配置它們u 打開終端打開終端u vi .bash_profilevi .b

40、ash_profileu 在配置文件中追加內(nèi)容在配置文件中追加內(nèi)容 JAVA_HOME=JDKJAVA_HOME=JDK存放位置存放位置 CLASSPATH=.(CLASSPATH=.(當前目錄)當前目錄) PATH=$JAVA_HOME/BIN:$PATH(PATH=$JAVA_HOME/BIN:$PATH(不覆蓋原來的內(nèi)容,追加)不覆蓋原來的內(nèi)容,追加) export JAVA_HOME CLASSPATH PATHexport JAVA_HOME CLASSPATH PATHu 保存,讓配置起作用(保存,讓配置起作用(source .bash_profilesource .bash_pr

41、ofile或者注銷或者注銷)38讓環(huán)境變量的修改在退出讓環(huán)境變量的修改在退出shellshell再次登錄時仍有效,再次登錄時仍有效,需要在相關(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/.ba

42、sh_login/.profile39n /etc/profile /etc/profile 存放一些全局(共有)變量,不管哪個用戶,登錄時都存放一些全局(共有)變量,不管哪個用戶,登錄時都會讀取該文件。通常設(shè)置一些會讀取該文件。通常設(shè)置一些ShellShell變量變量PATH,USER,HOSTNAMEPATH,USER,HOSTNAME和和HISTSIZEHISTSIZE等等n /.bash_profile:/.bash_profile:每個用戶都可使用該文件輸入專用于自每個用戶都可使用該文件輸入專用于自己使用的己使用的shellshell信息信息, ,當用戶登錄時當用戶登錄時, ,該文件

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

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

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

46、home/user/.bash_profile中定義下句,會怎樣?中定義下句,會怎樣?alias la=ls a|grep “.alias la=ls a|grep “.* *”答:答:useruser下次再登陸,其下次再登陸,其shellshell會自動建立一個別名會自動建立一個別名命令命令lala,功能為查看當前目錄下名字以,功能為查看當前目錄下名字以. .開頭的文開頭的文件。件。p寫在寫在/.bash_profile/.bash_profile中,需重新登錄才能有效。中,需重新登錄才能有效。除非運行除非運行source .bash_profilesource .bash_profile使

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

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

49、令的完成碼或者在shellshell程序內(nèi)部執(zhí)程序內(nèi)部執(zhí)行的行的shellshell程序(返回值)程序(返回值)u$0shell$0shell程序的名稱程序的名稱u$ $* *調(diào)用調(diào)用shellshell程序時所傳送的全部參數(shù)的單字程序時所傳送的全部參數(shù)的單字符串,符串, “參數(shù)參數(shù)1”“1”“參數(shù)參數(shù)2”2”形式保存的參數(shù)形式保存的參數(shù)43u$“參數(shù)參數(shù)1”“1”“參數(shù)參數(shù)2”2”形式保存的參形式保存的參數(shù)數(shù)u$n$n第第n n個參數(shù)個參數(shù)u$本程序的本程序的PIDPIDu$!$!上一個命令的上一個命令的PIDPID44使用使用shellshell預(yù)定義變量的腳本舉例預(yù)定義變量的腳本舉例45

50、4 4 位置參數(shù)位置參數(shù)(1 1) 位置參數(shù)及引用位置參數(shù)及引用 可以編寫一個可以編寫一個shellshell腳本,當從命令行或者從其他腳本,當從命令行或者從其他shellshell腳本中調(diào)用它的時候,這個腳本接收若干參數(shù)。這些選項是腳本中調(diào)用它的時候,這個腳本接收若干參數(shù)。這些選項是通過通過LinuxLinux作為位置參數(shù)(作為位置參數(shù)(positional parameterpositional parameter)提供給)提供給shellshell程序的。在程序的。在shellshell腳本中應(yīng)有變量,接收實參,這類變腳本中應(yīng)有變量,接收實參,這類變量的名稱很特別,分別是量的名稱很特別,

51、分別是1 1,2 2,3 3,這類變量稱為位置,這類變量稱為位置變量。位置參數(shù)變量。位置參數(shù)1 1存放在位置變量存放在位置變量1 1中,位置參數(shù)中,位置參數(shù)2 2存放位置存放位置變量變量2 2中,中,在程序中可以使用,在程序中可以使用$1$1,$2$2,來訪問,來訪問,舉例:舉例: 46(2 2) 用用setset命令為位置參數(shù)賦值命令為位置參數(shù)賦值在在shellshell程序中可以利用程序中可以利用setset命令為位置參數(shù)賦值或重命令為位置參數(shù)賦值或重新賦值。新賦值。一般格式:一般格式:set set 參數(shù)表參數(shù)表 說明:該命令后面無參數(shù)時,將顯示系統(tǒng)中的系統(tǒng)變說明:該命令后面無參數(shù)時,將

52、顯示系統(tǒng)中的系統(tǒng)變量的值;如果有參數(shù)將分別給位置參數(shù)賦值。量的值;如果有參數(shù)將分別給位置參數(shù)賦值。47四、變量表達式四、變量表達式1 1、條件判斷命令、條件判斷命令testtesttest n1 -test n1 -參數(shù)參數(shù) n2n2(或(或 參數(shù)參數(shù) 表達式)表達式)真返回真返回0 0,假返回,假返回1 1。(1 1)整數(shù),比較運算符見右表)整數(shù),比較運算符見右表test 1test 1 lt lt 4 4 # #判斷判斷14104 4、其他參數(shù)、其他參數(shù)-a-a 邏輯與邏輯與-o-o 邏輯或邏輯或! 邏輯非邏輯非513 3、控制流程、控制流程n shellshell運算符和運算符和C C語

53、言基本類似,也有分支、語言基本類似,也有分支、循環(huán)流程控制。循環(huán)流程控制。n 簡單舉例簡單舉例后面例子涉及的命令后面例子涉及的命令p seqseq命令:產(chǎn)生命令:產(chǎn)生1-91-9的數(shù)字序列的數(shù)字序列 比如比如 seq 1 4seq 1 4p exprexpr命令:對表達式求值命令:對表達式求值p 直接求值命令:對被括起來的表達式求值直接求值命令:對被括起來的表達式求值52表達式求值:表達式求值:$ 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

54、+ 3$ echo expr 1 + 3注意:表達式中,數(shù)字和運算符指教要有空格,出現(xiàn)在注意:表達式中,數(shù)字和運算符指教要有空格,出現(xiàn)在語句中要加反引號語句中要加反引號531 1)分支結(jié)構(gòu))分支結(jié)構(gòu)n ifif分支分支if if $# -eq 0 $# -eq 0 thenthenecho “echo “輸入了輸入了0 0個參數(shù)個參數(shù)”elif elif $# -lt 1 $# -lt 1 then echo “then echo “輸入了多個參數(shù)輸入了多個參數(shù)”else echo “else echo “輸入了輸入了1 1個參數(shù)個參數(shù)”fifin casecasecase “$#” case

55、 “$#” inin 0 0) ) echo “ echo “輸入了輸入了0 0個參數(shù)個參數(shù)” ;1 1) ) echo “ echo “輸入了輸入了1 1個參數(shù)個參數(shù)” ;* *) ) echo “ echo “輸入了多個參數(shù)輸入了多個參數(shù)”; esacesac每個分支條件后必須以兩每個分支條件后必須以兩個分號結(jié)尾個分號結(jié)尾542 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ū)?e

56、cho $(expr $i echo $(expr $i * * 10) 10)n乘號前加轉(zhuǎn)義符,乘號前加轉(zhuǎn)義符,與數(shù)字間要有空格。與數(shù)字間要有空格。55n read read 變量變量1 1 變量變量2 2 p可以從鍵盤上讀取多個變量的值,用戶輸入數(shù)據(jù)時可以從鍵盤上讀取多個變量的值,用戶輸入數(shù)據(jù)時,以空格或者,以空格或者TabTab鍵作為分隔。鍵作為分隔。p如果輸入的數(shù)據(jù)個數(shù)不夠,則從左到右對應(yīng)賦值,如果輸入的數(shù)據(jù)個數(shù)不夠,則從左到右對應(yīng)賦值,沒有輸入的變量為空;沒有輸入的變量為空;p如果輸入的數(shù)據(jù)個數(shù)超了,則從左到右對應(yīng)賦值,如果輸入的數(shù)據(jù)個數(shù)超了,則從左到右對應(yīng)賦值,最后一個變量被賦予剩

57、余的所有數(shù)據(jù)。最后一個變量被賦予剩余的所有數(shù)據(jù)。56read 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ù)57n 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 $sumech

58、o $sumn :直接求值命令:直接求值命令58五五 命令結(jié)果重定向命令結(jié)果重定向p1 1stdoutstdout標準輸出標準輸出p2 2stderrstderr標準錯誤標準錯誤n 輸出重定向到文件輸出重定向到文件filefile,終端上只能看到標準錯誤:,終端上只能看到標準錯誤:# #命令命令 file filen 錯誤重定向到文件錯誤重定向到文件file file ,終端上只能看到標準輸出:,終端上只能看到標準輸出:# #命令命令 2file2filen 標準輸出和標準錯誤都重定向到標準輸出和標準錯誤都重定向到filefile,終端上看不到,終端上看不到任何信息:任何信息:# #命令命令

59、filefile 2&1 2&1 (等于(等于# #命令命令 1file1file 2&1 2&1)59屏蔽命令任何輸出的:/dev/null 2&1cp /etc/my.conf cp /etc/my.conf /dev/null 2&1/dev/null 2&1p/dev/null/dev/null空設(shè)備空設(shè)備n 此句命令的結(jié)果是:此句命令的結(jié)果是:pcpcp命令沒有目標文件命令沒有目標文件, ,應(yīng)該輸出錯誤。應(yīng)該輸出錯誤。 p2&12&1表示錯誤重定向指向標準輸出。表示錯誤重定向指向標準輸出。p/dev/null/d

60、ev/null又使標準輸出重定向到空,就是不又使標準輸出重定向到空,就是不要輸出信息要輸出信息1.1.即:一個錯誤的命令執(zhí)行,什么功能都不實現(xiàn),且沒即:一個錯誤的命令執(zhí)行,什么功能都不實現(xiàn),且沒有任何信息或錯誤提示輸出。有任何信息或錯誤提示輸出。601 1)command file 2filecommand file 2file2 2)command file 2&1 command file 2&1 n 有什么區(qū)別?有什么區(qū)別? 1 1)的寫法)的寫法,stdout,stdout和和stderrstderr都直接送到都直接送到filefile中中, , 會出現(xiàn)兩個同搶占會出現(xiàn)兩個同搶占filefile的管道,的管道,filefile會被打開兩次會被打開兩次,stdout,stdou

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論