




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Unix Programming2021/4/21第三章 vi使用與Shell編程Unix Programming2021/4/221. vi 使用 1.1 vi的啟動例:$ vi abc.txt最常用的格式,vi后跟欲編輯的文件名 vi有搜索命令,可以用來瀏覽文本文件,比more,less等更方便.vi filenamesUnix Programming2021/4/231. vi 使用 1.2 vi的工作方式 vi的工作方式分命令模式命令模式和輸入模式輸入模式。vi啟動后就進入命令模式;i、a等命令按esc鍵Unix Programming2021/4/241. vi 使用 1.2 vi的
2、工作方式 處于命令模式命令模式時,用戶鍵入的內(nèi)容被當作vi的命令來解釋,一般處于命令模式下按鍵無回顯(以冒號打頭的命令和查找命令除外)。編輯命令i i,a a等,可以從命令模式轉(zhuǎn)到輸入模式; 處于輸入模式輸入模式時,用戶鍵入的所有內(nèi)容全部作為輸入的正文內(nèi)容,用戶可以輸入多行,每輸入完一行后按回車鍵轉(zhuǎn)入下一行,正文輸入時有回顯。輸入完畢,按鍵盤左上角的escesc鍵鍵,返回到命令模式。 Unix Programming2021/4/251. vi 使用 1.3 vi的編輯命令 當vi處于命令模式命令模式時,用戶的按鍵不回顯,被解釋成編輯命令編輯命令,vi大約有100多個編輯命令。下面介紹的vi命
3、令子集,足可以完成一般的編輯任務(wù)。 Unix Programming2021/4/261. vi 使用 1.3 vi的編輯命令 命令i ,在當前光標處插入 (Insert) 正文段,進入輸入模式,直至按esc鍵返回命令模式; 命令a ,在當前光標后追加(Append) 正文段,進入輸入模式,直至按esc鍵返回命令模式; 命令o,在當前行之下處插入 (Open) 新行,進入輸入模式,直至按esc鍵返回命令模式; 命令O,在當前行之上處插入 (Open) 新行,進入輸入模式,直至按esc鍵返回命令模式。1.3.1 正文插入命令Unix Programming2021/4/271. vi 使用 1.
4、3 vi的編輯命令 單字符移動h 光標左移一列j 光標下移一行k 光標上移一行l(wèi) 光標右移一列 多字符移動3h 光標左移3列10j 光標下移10行13k 光標上移13行20l 光標右移20列1.3.2 光標移動命令Unix Programming2021/4/281. vi 使用 1.3 vi的編輯命令B 向后翻頁(Backward)F 向前翻頁(Forward)U 向上翻半頁(Up)D 向下翻半頁(Down)1.3.3 翻頁命令2B 向后翻2頁(Backward)5F 向前翻5頁(Forward)字母之前的“”表示Ctrl鍵可以實現(xiàn)翻多頁在vi中,把向文件尾方向定義為“向前”,向文件頭方向定
5、義為“向后”,這與許多人的習慣不同。Unix Programming2021/4/291. vi 使用 1.3 vi的編輯命令1.3.4 將光標移至當前行首1.3.5 將光標移至當前行尾$1.3.6 移到右一個單詞 w W1.3.7 移到左一個單詞 b B小寫命令的w和b,以非字母、數(shù)字、下劃線之外的所有字符作為“單詞”分界符。大寫命令的W和B,以空白符作為“單詞”分界符。w、W、b、B也可以使用5w、10W、3b、13B形式的命令Unix Programming2021/4/2101. vi 使用 1.3 vi的編輯命令:123 將光標定位到第123行:$ 將光標定位到文件末尾:$-10 將
6、光標定位到文件倒數(shù)第10行:.10 將光標向下移10行1.3.8 將光標移動到指定行“$”代表文件末尾而“.”代表當前行;都可以使用“+”或“-”進行相對的位移光標(“+”可以省略)。Unix Programming2021/4/2111. vi 使用 1.3 vi的編輯命令先把光標移到一個大括號(或括號,或方括號)上,按%鍵,則光標自動定位到與它配對的那一個括號,對編寫和檢查C語言的源程序非常有用。1.3.9 括號匹配命令%Unix Programming2021/4/2121. vi 使用 1.3 vi的編輯命令1.3.10 刪除命令x刪除光標所在的字符5x刪除光標所在開始的5個字符dd刪
7、除當前行4dd刪除當前行開始的4行d$從當前光標處刪除到行尾d從當前光標處刪除到行首dw刪除一個單詞Unix Programming2021/4/2131. vi 使用 1.3 vi的編輯命令1.3.11 字符替換命令r替換光標處字符的命令R替換多個字符的命令例:rararbrc表示什么意思?例:Rabc然后按“esc”鍵從當前光標開始的字符依次替換為abcUnix Programming2021/4/2141. vi 使用 1.3 vi的編輯命令1.3.12 取消和重復命令u取消上次的命令(undo).重復執(zhí)行上次的命令Unix Programming2021/4/2151. vi 使用 1
8、.3 vi的編輯命令1.3.13 段落的刪除、復制、粘貼和移動命令dd 行刪除命令(delete)co 段落的復制命令(copy)m 段落的移動命令(move)例::11,13dd例::11,13co15例::11,13m15刪除11至13行復制11至13行到15行后移動11至13行到15行后Unix Programming2021/4/2161. vi 使用 1.3 vi的編輯命令1.3.13 剪貼板功能d 行刪除命令(delete)y 抽取命令(yank)p 粘貼命令(paste)例::11,13d例::11,13y例:p刪除11至13行復制11至13行用法同“d”命令將“d”或“y”操作
9、的行粘貼到當前光標處Unix Programming2021/4/2171. vi 使用 1.3 vi的編輯命令1.3.14 查找命令/查找“/”后面跟的內(nèi)容 例:/abc在文章中查找“abc”n向后查找N向前查找“n”和“N”命令必須在“/”命令之后執(zhí)行Unix Programming2021/4/2181. vi 使用 1.4 vi的文件命令ZZ保存文件并退出vi編輯狀態(tài):wq保存文件并退出vi編輯狀態(tài):w只保存文件而不退出vi編輯狀態(tài):q!不保存文件而強行退出vi編輯狀態(tài):r filename讀入filename文件內(nèi)容到當前行Unix Programming2021/4/2192. S
10、hell 編程 2.1 什么是Shell Shell是一個命令行解釋器,為系統(tǒng)解釋用戶的操作命令; Shell是用戶使用UNIX系統(tǒng)的橋梁; Shell既是一種命令語言,又是一種程序設(shè)計語言;Unix Programming2021/4/2202. Shell 編程 2.2 什么是Shell編程 Shell編程是利用判斷、流程控制等方法把多個Shell命令有機的組織成Shell腳本; Shell腳本類似于Windows系統(tǒng)中的批處理程序,通過執(zhí)行Shell腳本來完成一系列Shell命令;例:#!/bin/sh# Name: echohello.sh# Usage: print Hello, W
11、orld# Author: Gene# Date: 2005-03-18#echo Hello, World!Unix Programming2021/4/2212. Shell 編程 2.3 Shell腳本的執(zhí)行 腳本文件本身是一個文本文件文本文件,不可能直接執(zhí)行。 當腳本文件具有可執(zhí)行屬性,用戶將它執(zhí)行的時候,系統(tǒng)會啟動shell程序文件/bin/sh,運行/bin/sh文件中的CPU指令來解釋執(zhí)行腳本文件中的命令。 腳本文件的第一個命令需要指明Shell命令解釋程序:#!/bin/sh,“#!”必須出現(xiàn)在本文的最開頭。Unix Programming2021/4/2222. Shell
12、編程 2.3 Shell腳本的執(zhí)行 三種方法可以執(zhí)行腳本文件例:$sh , , , , ls.txt ls -l ls.txt ls -l /home/user1 ls.txt ls -l /home/user1 ls.txt ls -l /home/user1 ls.txt ls -l /home/user1 ls.txt Unix Programming2021/4/226shellshell輸入輸出重定向輸入輸出重定向重定向符表示將標準輸入從鍵盤重新定義到另外的流。重定向符表示將標準輸入從鍵盤重新定義到另外的流。 例如:例如:prog infile, prog infile, 即即pro
13、gprog命令將從文件命令將從文件infileinfile中讀取參數(shù)。中讀取參數(shù)。 執(zhí)行一個執(zhí)行一個shellshell程序也可以使用這種方式。例如程序也可以使用這種方式。例如 sh user1.sh sh user1.sh 就表示要執(zhí)行就表示要執(zhí)行user1.shuser1.sh這個這個shellshell程序。程序。 重定向符重定向符,也能夠混合使用,例如:也能夠混合使用,例如: prog outfile prog outfile 表示表示progprog命令從命令從infileinfile中獲取命令中獲取命令參數(shù),然后將執(zhí)行結(jié)果輸出到文件參數(shù),然后將執(zhí)行結(jié)果輸出到文件outfileout
14、file中。中。 Unix Programming2021/4/227錯誤流重定向錯誤流重定向 在在UNIXUNIX系統(tǒng)中,錯誤信息流是指在命令或程序執(zhí)行中出現(xiàn)錯誤時系統(tǒng)中,錯誤信息流是指在命令或程序執(zhí)行中出現(xiàn)錯誤時系統(tǒng)給出的提示或警告信息,系統(tǒng)給出的提示或警告信息,UNIXUNIX中將它們作為一個獨立的標準輸中將它們作為一個獨立的標準輸出流進行定義,錯誤信息流通常定義為顯示器。當然,用戶也可以出流進行定義,錯誤信息流通常定義為顯示器。當然,用戶也可以根據(jù)需要對它進行重定向。不同的根據(jù)需要對它進行重定向。不同的shellshell在這方面有所不同。在這方面有所不同。 CshellCshell中
15、使用的錯誤流重定向符是:中使用的錯誤流重定向符是: &, &, 例如:例如: cc abc.c & log.txt,cc abc.c & log.txt,即將編譯過程中的輸出流和錯即將編譯過程中的輸出流和錯誤流定向為誤流定向為log.txtlog.txt文件。文件。 在在BshellBshell中則不用,需要如下書寫:中則不用,需要如下書寫: cc abc.c 2&1 log.txtcc abc.c 2&1 log.txtUnix Programming2021/4/228管道線處理管道線處理 管道線可以實現(xiàn)將一個程序或命令的輸出作為另外一個程序
16、或管道線可以實現(xiàn)將一個程序或命令的輸出作為另外一個程序或命令的輸入,管道線作為兩個命令之間的分隔符。管道線的符號是命令的輸入,管道線作為兩個命令之間的分隔符。管道線的符號是 “|” |” 。 例如有這樣一組命令:例如有這樣一組命令: $ ls $ ls l tempfilel tempfile $ wc $ wc l tempfilel tempfile $ rm tempfile $ rm tempfile管道線處理:管道線處理:$ ls -l | wc -l$ ls -l | wc -lUnix Programming2021/4/229管道線處理管道線處理 除此之外,還有除此之外,還有“
17、;”、“&”&”、“&”&”、“|”|”可替代管道線可替代管道線“|”|”作為命令列表的分隔符作為命令列表的分隔符. .其中:其中:“;”:表示多個命令順序執(zhí)行:表示多個命令順序執(zhí)行 “ “&” : &” : 命令行尾輸入,表示將命令的執(zhí)行過程放到后臺處理。命令行尾輸入,表示將命令的執(zhí)行過程放到后臺處理?!?amp;”&”:代替原有的符號:代替原有的符號“|”|”,表示當左邊的命令為,表示當左邊的命令為“真真”值時,值時,執(zhí)行右邊的命令。執(zhí)行右邊的命令。“|”: |”: 代替原有的符號代替原有的符號“|”|”,表示當左邊的命令為,表示當左
18、邊的命令為“假假”值時,值時,執(zhí)行右邊的命令。執(zhí)行右邊的命令。Unix Programming2021/4/230管道線處理管道線處理 例如:例如:(a a) pwd pwd ;who who ; ls ls l l(b b)cc prgm.c cc prgm.c & &(c c)write zhang letter write zhang letter | mail zhang letter mail zhang letter(d d)mail zhang letter mail zhang )-lt 前者小于后者 ()-le 前者小于等于后者 ()-ge 前者大于等于后者
19、() test number1 op number2 number1 op number2 Unix Programming2021/4/2442. Shell 編程 2.8 測試數(shù)值Unix Programming2021/4/2452. Shell 編程 2.8 與( )( )的使用 當使用 & 或 | 時,需要在條件分支中完成多個動作,執(zhí)行若干個命令,就需要使用類似復合語句的構(gòu)造,在shell中使用大括號。 書寫規(guī)則1: -f main.c & pwd; ls; rm main.c -f;書寫規(guī)則2: -f main.c & pwdlsrm main.c -f必須
20、有空格必須有“;”回車( )的使用沒有這么多限制;但 的執(zhí)行效率高Unix Programming2021/4/2462. Shell 編程 2.8 exprexpr計算表達式的值 B-shell本身沒有提供數(shù)學運算和字符串運算的能力,所有這些運算都是借助于命令expr完成的; expr支持算術(shù)運算(+、-、*、/),取余數(shù)(%),以及數(shù)值比較的關(guān)系運算(、=、); expr的運算優(yōu)先級和C語言一樣:乘除法優(yōu)先級最高,其次加減法,然后是關(guān)系運算。關(guān)系運算的結(jié)果是expr打印1 (關(guān)系成立)或者0(關(guān)系不成立);也可以使用括號。 Unix Programming2021/4/2472. Shel
21、l 編程 2.8 exprexpr計算表達式的值例1:求 “a*(b+c)”a=1b=2c=3x=expr $a * ( $b + $c )例2:在例1的基礎(chǔ)上判斷x是否大于20 expr $x 20 = 0 & echo $x = $x is less than 20注意:在expr表達式中,變量與轉(zhuǎn)義符、操作符之間用空格分隔Unix Programming2021/4/2482. Shell 編程 2.9 條件結(jié)構(gòu)if-then-elif-fiif-then-elif-fi語法1 if 條件1; then命令1 elif 條件2; then命令2 else命令3fi語法2 if 條
22、件1then 命令1 elif 條件2then 命令2 else 命令3fi條件與“then”在一行的,條件之后必須加“;”Unix Programming2021/4/2492. Shell 編程 2.9 條件結(jié)構(gòu)if-then-elif-fiif-then-elif-fiUnix Programming2021/4/2502. Shell 編程 2.10 casecase結(jié)構(gòu)語法 case 條件 in條件1)命令1;條件2)命令2 ;esac“esac”是“case”的反寫可以是多個命令串Unix Programming2021/4/2512. Shell 編程 2.10 casecase
23、結(jié)構(gòu)一定要加上雙引號,如果在引用這個腳本文件時沒有攜帶任何參數(shù),那么$1就會是空字符串,這種情況下省略了雙引號就會導致case行語法錯誤。Unix Programming2021/4/2522. Shell 編程 2.11 whilewhile循環(huán)結(jié)構(gòu)語法 while 條件do命令1命令2 doneUnix Programming2021/4/2532. Shell 編程 2.11 whilewhile循環(huán)結(jié)構(gòu)例:#!/bin/sh# Name: while.sh# Usage: Test while-do-done# #a=10while $a -gt 0 doecho $a = $aa=e
24、xpr $a - 1sleep 1doneUnix Programming2021/4/2542. Shell 編程 2.12 forfor循環(huán)結(jié)構(gòu)語法 for name in word1 word2 do命令1命令2 done循環(huán)控制變量循環(huán)條件表格:每一次循環(huán)name取表格中的一個值Unix Programming2021/4/2552. Shell 編程 2.12 forfor循環(huán)結(jié)構(gòu)例:#!/bin/sh# Name: for.sh# Usage: Test for-do-done# #for file in ./*doecho $filedone打印當前目錄下的所有文件Unix Pr
25、ogramming2021/4/2562. Shell 編程 2.13 breakbreak、continuecontinue和exitexit的使用 命令break、continue用在循環(huán)結(jié)構(gòu)for和while中使用,與C語言中的beak和continue流程控制功能類似。break退出循環(huán);continue退出當前循環(huán)進入下一次循環(huán)。 exit命令用來終止Shell程序;exit后面的參數(shù),就是Shell腳本程序結(jié)束的返回值。Unix Programming2021/4/2572. Shell 編程 2.14 Shell函數(shù)語法name() cmd1; cmd2; ;或name() cm
26、d1cmd2Unix Programming2021/4/2582. Shell 編程 2.14 Shell函數(shù) 在調(diào)用函數(shù)時,引用函數(shù)的名字,可以附加上0到多個參數(shù),在函數(shù)體內(nèi)部以位置變量$1,$2,或$*,$方式引用函數(shù)的參數(shù)。 函數(shù)體內(nèi)部可以使用內(nèi)部命令return,使函數(shù)有返回碼,返回碼0代表成功,非零表示失敗。 函數(shù)體內(nèi)一個函數(shù)不能調(diào)用它自己。shell函數(shù)不允許遞歸調(diào)用。Unix Programming2021/4/2592. Shell 編程 2.14 Shell函數(shù)例:# #sum()ret=expr $1 + $2if $# -lt 2 thenecho Please inp
27、ut two parameterselsesum $1 $2echo “$1 + $2 = $ret”fi函數(shù)頭函數(shù)體調(diào)用函數(shù)Unix Programming2021/4/2602.15 Shell程序調(diào)試 shellshell程序是一種解釋性語言,它的執(zhí)行是逐行進行的,程序中是否程序是一種解釋性語言,它的執(zhí)行是逐行進行的,程序中是否有語法錯誤,不執(zhí)行到那一行系統(tǒng)是無法知道的。有語法錯誤,不執(zhí)行到那一行系統(tǒng)是無法知道的。C C,pascalpascal等高級語言等高級語言是有編譯過程的,程序中的語法錯誤在編譯階段就能檢測出來,因此比是有編譯過程的,程序中的語法錯誤在編譯階段就能檢測出來,因此比
28、shellshell更容易調(diào)試更容易調(diào)試shellshell程序通常有三種調(diào)試方法:程序通常有三種調(diào)試方法: 1 1)交互式調(diào)試)交互式調(diào)試 shellshell程序中使用的命令都能在命令行中運行,所以對于一些不很熟悉程序中使用的命令都能在命令行中運行,所以對于一些不很熟悉的命令和語法可以先用命令進行驗證,然后再編寫到的命令和語法可以先用命令進行驗證,然后再編寫到shellshell程序中,這種程序中,這種調(diào)試方法稱為交互式調(diào)試,也是最簡單的一種調(diào)試方法。調(diào)試方法稱為交互式調(diào)試,也是最簡單的一種調(diào)試方法。 Unix Programming2021/4/2612.15 Shell程序調(diào)試2 2)
29、在編輯過程中不斷調(diào)試執(zhí)行所編輯的)在編輯過程中不斷調(diào)試執(zhí)行所編輯的shellshell程序程序 在在UNIXUNIX系統(tǒng)中可以打開多個工作窗口。我們可以在一個窗口中用系統(tǒng)中可以打開多個工作窗口。我們可以在一個窗口中用vivi等等編輯器進行編輯,然后在另一個連接窗口中執(zhí)行該編輯器進行編輯,然后在另一個連接窗口中執(zhí)行該shellshell程序,這樣可以程序,這樣可以隨時觀察到已經(jīng)編寫的部分是否正確。最終完成這個隨時觀察到已經(jīng)編寫的部分是否正確。最終完成這個shellshell程序的編寫。程序的編寫。3 3)用)用shellshell程序提供的跟蹤功能進行調(diào)試程序提供的跟蹤功能進行調(diào)試 shells
30、hell程序可以使用程序可以使用 -v -x -v -x 選項對選項對shellshell程序進行跟蹤程序進行跟蹤-v-v:當讀入:當讀入shellshell輸入行時把它們顯示出來,完成詳細跟蹤。輸入行時把它們顯示出來,完成詳細跟蹤。ShellShell程序程序在完成這段程序執(zhí)行時首先逐行讀入執(zhí)行的命令,并在標準輸出上顯示在完成這段程序執(zhí)行時首先逐行讀入執(zhí)行的命令,并在標準輸出上顯示該命令要執(zhí)行的實際內(nèi)容,然后執(zhí)行該命令。如果沒有語法錯誤,執(zhí)行該命令要執(zhí)行的實際內(nèi)容,然后執(zhí)行該命令。如果沒有語法錯誤,執(zhí)行將一直進行下去直到完成將一直進行下去直到完成shellshell的執(zhí)行。的執(zhí)行。 -x-x:執(zhí)行命令前先把命令和它們的參數(shù)顯示出來:執(zhí)行命令前先把命
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年土地承包合同的附加協(xié)議
- 2025標準租賃合同協(xié)議范本2
- 2025汽車租賃評估合同
- 2025年室內(nèi)外租擺植物合同范本
- 采購豬肉、蔬菜監(jiān)獄2023年大宗伙食物資政府采購項目(D、E包)通派-副食品
- 2025全球知名品牌授權(quán)合同范本
- 《深度解析》課件
- 山東省泰安市肥城市2024-2025學年度下學期期中考試六年級歷史試題統(tǒng)編版(五四學制)(含答案)
- 福建省福州市八縣(市區(qū))協(xié)作校2024-2025學年高二下學期期中聯(lián)考語文試卷(含答案)
- 皮帶船租賃合同協(xié)議
- 重慶大學附屬腫瘤醫(yī)院麻醉科新增術(shù)中放療場所環(huán)評報告
- 消費者起訴狀模板范文
- 2022年工程機械設(shè)備租賃服務(wù)方案(含應(yīng)急處理方案、保障措施)
- (完整版)外科護理學知識點整理
- 2019版《壓力性損傷的預(yù)防和治療:臨床實踐指南》解讀
- 在那遙遠的地方課件
- 圍堰吹填施工方案
- 創(chuàng)業(yè)計劃書案例-產(chǎn)品類-南大無醇酒創(chuàng)業(yè)完全版
- 食品生產(chǎn)企業(yè)動態(tài)風險因素量化分值表食品生產(chǎn)日常監(jiān)督檢查要點表
- 基層醫(yī)療衛(wèi)生機構(gòu)依法執(zhí)業(yè)自查表
- 氣管插管術(shù)培訓課件
評論
0/150
提交評論