版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Unix Programmingvi使用与shell编程1第三章 vi使用与Shell编程Unix Programmingvi使用与shell编程21. vi 使用 1.1 vi的启动例:$ vi abc.txt最常用的格式,vi后跟欲编辑的文件名 vi有搜索命令,可以用来浏览文本文件,比more,less等更方便.vi Unix Programmingvi使用与shell编程31. vi 使用 1.2 vi的工作方式 vi的工作方式分命令模式命令模式和输入模式输入模式。vi启动后就进入命令模式;i、a等命令按esc键Unix Programmingvi使用与shell编程41. vi 使用
2、1.2 vi的工作方式 处于命令模式命令模式时,用户键入的内容被当作vi的命令来解释,一般处于命令模式下按键无回显(以冒号打头的命令和查找命令除外)。编辑命令i,a等,可以从命令模式转到输入模式; 处于输入模式输入模式时,用户键入的所有内容全部作为输入的正文内容,用户可以输入多行,每输入完一行后按回车键转入下一行,正文输入时有回显。输入完毕,按键盘左上角的esc键键,返回到命令模式。 Unix Programmingvi使用与shell编程51. vi 使用 1.3 vi的编辑命令 当vi处于命令模式命令模式时,用户的按键不回显,被解释成编编辑命令辑命令,vi大约有100多个编辑命令。下面介绍
3、的vi命令子集,足可以完成一般的编辑任务。 Unix Programmingvi使用与shell编程61. vi 使用 1.3 vi的编辑命令 命令i ,在当前光标处插入 (Insert) 正文段,进入输入模式,直至按esc键返回命令模式; 命令a ,在当前光标后追加(Append) 正文段,进入输入模式,直至按esc键返回命令模式; 命令o,在当前行之下处插入 (Open) 新行,进入输入模式,直至按esc键返回命令模式; 命令O,在当前行之上处插入 (Open) 新行,进入输入模式,直至按esc键返回命令模式。1.3.1 正文插入命令Unix Programmingvi使用与shell编程
4、71. vi 使用 1.3 vi的编辑命令 单字符移动h 光标左移一列j 光标下移一行k 光标上移一行l 光标右移一列 多字符移动3h 光标左移3列10j 光标下移10行13k 光标上移13行20l 光标右移20列1.3.2 光标移动命令Unix Programmingvi使用与shell编程81. vi 使用 1.3 vi的编辑命令B 向后翻页(Backward)F 向前翻页(Forward)U 向上翻半页(Up)D 向下翻半页(Down)1.3.3 翻页命令2B 向后翻2页(Backward)5F 向前翻5页(Forward)字母之前的“”表示Ctrl键可以实现翻多页在vi中,把向文件尾方
5、向定义为“向前”,向文件头方向定义为“向后”,这与许多人的习惯不同。Unix Programmingvi使用与shell编程91. vi 使用 1.3 vi的编辑命令1.3.4 将光标移至当前行首1.3.5 将光标移至当前行尾$1.3.6 移到右一个单词 w W1.3.7 移到左一个单词 b B小写命令的w和b,以非字母、数字、下划线之外的所有字符作为“单词”分界符。大写命令的W和B,以空白符作为“单词”分界符。w、W、b、B也可以使用5w、10W、3b、13B形式的命令Unix Programmingvi使用与shell编程101. vi 使用 1.3 vi的编辑命令:123 将光标定位到第
6、123行:$ 将光标定位到文件末尾:$-10 将光标定位到文件倒数第10行:.10 将光标向下移10行1.3.8 将光标移动到指定行“$”代表文件末尾而“.”代表当前行;都可以使用“+”或“-”进行相对的位移光标(“+”可以省略)。Unix Programmingvi使用与shell编程111. vi 使用 1.3 vi的编辑命令先把光标移到一个大括号(或括号,或方括号)上,按%键,则光标自动定位到与它配对的那一个括号,对编写和检查C语言的源程序非常有用。1.3.9 括号匹配命令%Unix Programmingvi使用与shell编程121. vi 使用 1.3 vi的编辑命令1.3.10
7、删除命令x删除光标所在的字符5x删除光标所在开始的5个字符dd删除当前行4dd删除当前行开始的4行d$从当前光标处删除到行尾d从当前光标处删除到行首dw删除一个单词Unix Programmingvi使用与shell编程131. vi 使用 1.3 vi的编辑命令1.3.11 字符替换命令r替换光标处字符的命令R替换多个字符的命令例:rararbrc表示什么意思?例:Rabc然后按“esc”键从当前光标开始的字符依次替换为abcUnix Programmingvi使用与shell编程141. vi 使用 1.3 vi的编辑命令1.3.12 取消和重复命令u取消上次的命令(undo).重复执行上
8、次的命令Unix Programmingvi使用与shell编程151. vi 使用 1.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 Programmingvi使用与shell编程161. vi 使用 1.3 vi的编辑命令1.3.13 剪贴板功能d 行删除命令(delete)y 抽取命令(yank)p 粘贴命令(paste)例::11,1
9、3d例::11,13y例:p删除11至13行复制11至13行用法同“d”命令将“d”或“y”操作的行粘贴到当前光标处Unix Programmingvi使用与shell编程171. vi 使用 1.3 vi的编辑命令1.3.14 查找命令/查找“/”后面跟的内容 例:/abc在文章中查找“abc”n向后查找N向前查找“n”和“N”命令必须在“/”命令之后执行Unix Programmingvi使用与shell编程181. vi 使用 1.4 vi的文件命令ZZ保存文件并退出vi编辑状态:wq保存文件并退出vi编辑状态:w只保存文件而不退出vi编辑状态:q!不保存文件而强行退出vi编辑状态:r
10、读入文件内容到当前行Unix Programmingvi使用与shell编程192. Shell 编程 2.1 什么是Shell Shell是一个命令行解释器,为系统解释用户的操作命令; Shell是用户使用UNIX系统的桥梁; Shell既是一种命令语言,又是一种程序设计语言;Unix Programmingvi使用与shell编程202. Shell 编程 2.2 什么是Shell编程 Shell编程是利用判断、流程控制等方法把多个Shell命令有机的组织成Shell脚本; Shell脚本类似于Windows系统中的批处理程序,通过执行Shell脚本来完成一系列Shell命令;例:#!/b
11、in/sh# Name: echohello.sh# Usage: print Hello, World# Author: Gene# Date: 2005-03-18#echo Hello, World!Unix Programmingvi使用与shell编程212. Shell 编程 2.3 Shell脚本的执行 脚本文件本身是一个文本文件文本文件,不可能直接执行。 当脚本文件具有可执行属性,用户将它执行的时候,系统会启动shell程序文件/bin/sh,运行/bin/sh文件中的CPU指令来解释执行脚本文件中的命令。 脚本文件的第一个命令需要指明Shell命令解释程序:#!/bin/sh
12、,“#!”必须出现在本文的最开头。Unix Programmingvi使用与shell编程222. Shell 编程 2.3 Shell脚本的执行 三种方法可以执行脚本文件例:$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 Programmingvi使用与shell编程shellshell输入输出重定向输入输出重定向重定向符表示将标准输入从键盘重新定义到另外的流。重定向符
13、表示将标准输入从键盘重新定义到另外的流。 例如:例如:prog infile, prog infile, 即即progprog命令将从文件命令将从文件infileinfile中读取参数。中读取参数。 执行一个执行一个shellshell程序也可以使用这种方式。例如程序也可以使用这种方式。例如 sh user1.sh sh user1.sh 就表示要执行就表示要执行user1.shuser1.sh这个这个shellshell程序。程序。 重定向符重定向符,也能够混合使用,例如:也能够混合使用,例如: prog outfile prog outfile 表示表示progprog命令从命令从infi
14、leinfile中获取命令中获取命令参数,然后将执行结果输出到文件参数,然后将执行结果输出到文件outfileoutfile中。中。 Unix Programmingvi使用与shell编程错误流重定向错误流重定向 在在UNIXUNIX系统中,错误信息流是指在命令或程序执行中出现错误时系统中,错误信息流是指在命令或程序执行中出现错误时系统给出的提示或警告信息,系统给出的提示或警告信息,UNIXUNIX中将它们作为一个独立的标准输中将它们作为一个独立的标准输出流进行定义,错误信息流通常定义为显示器。当然,用户也可以出流进行定义,错误信息流通常定义为显示器。当然,用户也可以根据需要对它进行重定向。
15、不同的根据需要对它进行重定向。不同的shellshell在这方面有所不同。在这方面有所不同。 CshellCshell中使用的错误流重定向符是:中使用的错误流重定向符是: &, &, 例如:例如: 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.txtUni
16、x Programmingvi使用与shell编程管道线处理管道线处理 管道线可以实现将一个程序或命令的输出作为另外一个程序或管道线可以实现将一个程序或命令的输出作为另外一个程序或命令的输入,管道线作为两个命令之间的分隔符。管道线的符号是命令的输入,管道线作为两个命令之间的分隔符。管道线的符号是 “|” |” 。 例如有这样一组命令:例如有这样一组命令: $ ls $ ls l tempfilel tempfile $ wc $ wc l tempfilel tempfile $ rm tempfile $ rm tempfile管道线处理:管道线处理:$ ls -l | wc -l$ ls
17、-l | wc -lUnix Programmingvi使用与shell编程管道线处理管道线处理 除此之外,还有除此之外,还有“;”、“&”&”、“&”&”、“|”|”可替代管道线可替代管道线“|”|”作为命令列表的分隔符作为命令列表的分隔符. .其中:其中:“;”:表示多个命令顺序执行:表示多个命令顺序执行 “ “&” : &” : 命令行尾输入,表示将命令的执行过程放到后台处理。命令行尾输入,表示将命令的执行过程放到后台处理。“&”&”:代替原有的符号:代替原有的符号“|”|”,表示当左边的命令为,表示当左边的命令为“真真”值
18、时,值时,执行右边的命令。执行右边的命令。“|”: |”: 代替原有的符号代替原有的符号“|”|”,表示当左边的命令为,表示当左边的命令为“假假”值时,值时,执行右边的命令。执行右边的命令。Unix Programmingvi使用与shell编程管道线处理管道线处理 例如:例如:(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
19、zhang letter mail zhang )-lt 前者小于后者 ()-le 前者小于等于后者 ()-ge 前者大于等于后者 () test number1 op number2 number1 op number2 Unix Programmingvi使用与shell编程442. Shell 编程 2.8 测试数值Unix Programmingvi使用与shell编程452. Shell 编程 2.8 与( )的使用 当使用 & 或 | 时,需要在条件分支中完成多个动作,执行若干个命令,就需要使用类似复合语句的构造,在shell中使用大括号。 书写规则1: -f main.c
20、 & pwd; ls; rm main.c -f;书写规则2: -f main.c & pwdlsrm main.c -f必须有空格必须有“;”回车( )的使用没有这么多限制;但 的执行效率高Unix Programmingvi使用与shell编程462. Shell 编程 2.8 expr计算表达式的值 B-shell本身没有提供数学运算和字符串运算的能力,所有这些运算都是借助于命令expr完成的; expr支持算术运算(+、-、*、/),取余数(%),以及数值比较的关系运算(、=、); expr的运算优先级和C语言一样:乘除法优先级最高,其次加减法,然后是关系运算。关系运算
21、的结果是expr打印1 (关系成立)或者0(关系不成立);也可以使用括号。 Unix Programmingvi使用与shell编程472. Shell 编程 2.8 expr计算表达式的值例1:求 “a*(b+c)”a=1b=2c=3x=expr $a * ( $b + $c )例2:在例1的基础上判断x是否大于20 expr $x 20 = 0 & echo $x = $x is less than 20注意:在expr表达式中,变量与转义符、操作符之间用空格分隔Unix Programmingvi使用与shell编程482. Shell 编程 2.9 条件结构if-then-el
22、if-fi语法1 if 条件1; then命令1 elif 条件2; then命令2 else命令3fi语法2 if 条件1then 命令1 elif 条件2then 命令2 else 命令3fi条件与“then”在一行的,条件之后必须加“;”Unix Programmingvi使用与shell编程492. Shell 编程 2.9 条件结构if-then-elif-fiUnix Programmingvi使用与shell编程502. Shell 编程 2.10 case结构语法 case 条件 in条件1)命令1;条件2)命令2 ;esac“esac”是“case”的反写可以是多个命令串Un
23、ix Programmingvi使用与shell编程512. Shell 编程 2.10 case结构一定要加上双引号,如果在引用这个脚本文件时没有携带任何参数,那么$1就会是空字符串,这种情况下省略了双引号就会导致case行语法错误。Unix Programmingvi使用与shell编程522. Shell 编程 2.11 while循环结构语法 while 条件do命令1命令2 doneUnix Programmingvi使用与shell编程532. Shell 编程 2.11 while循环结构例:#!/bin/sh# Name: while.sh# Usage: Test while
24、-do-done# #a=10while $a -gt 0 doecho $a = $aa=expr $a - 1sleep 1doneUnix Programmingvi使用与shell编程542. Shell 编程 2.12 for循环结构语法 for name in word1 word2 do命令1命令2 done循环控制变量循环条件表格:每一次循环name取表格中的一个值Unix Programmingvi使用与shell编程552. Shell 编程 2.12 for循环结构例:#!/bin/sh# Name: for.sh# Usage: Test for-do-done# #f
25、or ./*doecho $filedone打印当前目录下的所有文件Unix Programmingvi使用与shell编程562. Shell 编程 2.13 break、continue和exit的使用 命令break、continue用在循环结构for和while中使用,与C语言中的beak和continue流程控制功能类似。break退出循环;continue退出当前循环进入下一次循环。 exit命令用来终止Shell程序;exit后面的参数,就是Shell脚本程序结束的返回值。Unix Programmingvi使用与shell编程572. Shell 编程 2.14 Shell函数
26、语法name() cmd1; cmd2; ;或name() cmd1cmd2Unix Programmingvi使用与shell编程582. Shell 编程 2.14 Shell函数 在调用函数时,引用函数的名字,可以附加上0到多个参数,在函数体内部以位置变量$1,$2,或$*,$方式引用函数的参数。 函数体内部可以使用内部命令return,使函数有返回码,返回码0代表成功,非零表示失败。 函数体内一个函数不能调用它自己。shell函数不允许递归调用。Unix Programmingvi使用与shell编程592. Shell 编程 2.14 Shell函数例:# #sum()ret=exp
27、r $1 + $2if $# -lt 2 thenecho Please input two parameterselsesum $1 $2echo “$1 + $2 = $ret”fi函数头函数体调用函数Unix Programmingvi使用与shell编程2.15 Shell程序调试 shellshell程序是一种解释性语言,它的执行是逐行进行的,程序中是否程序是一种解释性语言,它的执行是逐行进行的,程序中是否有语法错误,不执行到那一行系统是无法知道的。有语法错误,不执行到那一行系统是无法知道的。C C,pascalpascal等高级语言等高级语言是有编译过程的,程序中的语法错误在编译阶
28、段就能检测出来,因此比是有编译过程的,程序中的语法错误在编译阶段就能检测出来,因此比shellshell更容易调试更容易调试shellshell程序通常有三种调试方法:程序通常有三种调试方法: 1 1)交互式调试)交互式调试 shellshell程序中使用的命令都能在命令行中运行,所以对于一些不很熟悉程序中使用的命令都能在命令行中运行,所以对于一些不很熟悉的命令和语法可以先用命令进行验证,然后再编写到的命令和语法可以先用命令进行验证,然后再编写到shellshell程序中,这种程序中,这种调试方法称为交互式调试,也是最简单的一种调试方法。调试方法称为交互式调试,也是最简单的一种调试方法。 Un
29、ix Programmingvi使用与shell编程2.15 Shell程序调试2 2)在编辑过程中不断调试执行所编辑的)在编辑过程中不断调试执行所编辑的shellshell程序程序 在在UNIXUNIX系统中可以打开多个工作窗口。我们可以在一个窗口中用系统中可以打开多个工作窗口。我们可以在一个窗口中用vivi等等编辑器进行编辑,然后在另一个连接窗口中执行该编辑器进行编辑,然后在另一个连接窗口中执行该shellshell程序,这样可以程序,这样可以随时观察到已经编写的部分是否正确。最终完成这个随时观察到已经编写的部分是否正确。最终完成这个shellshell程序的编写。程序的编写。3 3)用)用shellshell程序提供的跟踪功能进行调试程序提供的跟踪功能进行调试 shellshell程序可以使用程序可以使用 -v -x -v -x 选项对选项对shellshell程序进行跟踪程序进行跟踪-v-v:当读入:当读入shellshell输入行时把它们显示出来,完成详细跟踪。输入行时把它们显示出来,完成详细跟踪。ShellShell程序程序在完成这段程序执行时首先逐行读入执行的命令,并在标准输出上显示在完成这段程序执行时首先逐行读入执行的命令,并在标准输出上显示该命令要执行的实际内容,然后执行该命令。如果没有语法错
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 长春师范高等专科学校《会计电算化》2025-2026学年期末试卷
- 固体废物监测员诚信测试考核试卷含答案
- 煤层气排采集输工岗前教育考核试卷含答案
- 销售五金公司年度工作总结报告
- 淀粉及淀粉糖制造工风险评估强化考核试卷含答案
- 淡水捕捞工安全宣传强化考核试卷含答案
- 钢琴调律师安全强化评优考核试卷含答案
- 淀粉糖制造工安全操作考核试卷含答案
- 脓毒症与脓毒性休克管理国际指南总体解读2026
- 平面设计工作室介绍-创意设计作品展示
- 《年历、月历中的信息》教案-2025-2026学年苏教版小学三年级数学下册
- 消防大队保密工作制度
- 2026年常州市戚墅堰区事业单位招聘笔试参考试题及答案解析
- 2026年国家药品监督管理局药品和医疗器械审评检查京津冀分中心、华中分中心、西南分中心公开招聘编外人员122名(第一批)笔试参考试题及答案解析
- 2026年春教科版(新教材)小学科学三年级下册(全册)知识点复习要点梳理
- 2026校招:华夏银行笔试题及答案
- (2025年)(新版)低压电工证职业技能考试题库(含答案)
- GB/T 47059-2026森林草原火灾成因和损失调查评估规程
- 2026秋招:东方航空笔试题及答案
- 2026年山西同文职业技术学院高职单招职业适应性测试模拟试题含答案解析
- 2025年AASM指南:成人OSA住院评估与管理
评论
0/150
提交评论