vi使用与Shell编程课件

上传人:磨石 文档编号:240738231 上传时间:2024-05-04 格式:PPT 页数:62 大小:497KB
返回 下载 相关 举报
vi使用与Shell编程课件_第1页
第1页 / 共62页
vi使用与Shell编程课件_第2页
第2页 / 共62页
vi使用与Shell编程课件_第3页
第3页 / 共62页
点击查看更多>>
资源描述
Unix Programming第三章 vi使用与Shell编程1vi使用与Shell编程Unix Programming1.vi 使用1.1 vi的启动例:$vi abc.txt最常用的格式,vi后跟欲编辑的文件名vi有搜索命令,可以用来浏览文本文件,比more,less等更方便.vi 2vi使用与Shell编程Unix Programming1.vi 使用1.2 vi的工作方式vi的工作方式分命令模式命令模式和输入模式输入模式。vi启动后就进入命令模式;i、a等命令按esc键3vi使用与Shell编程Unix Programming1.vi 使用1.2 vi的工作方式处于命令模式命令模式时,用户键入的内容被当作vi的命令来解释,一般处于命令模式下按键无回显(以冒号打头的命令和查找命令除外)。编辑命令i,a等,可以从命令模式转到输入模式;处于输入模式输入模式时,用户键入的所有内容全部作为输入的正文内容,用户可以输入多行,每输入完一行后按回车键转入下一行,正文输入时有回显。输入完毕,按键盘左上角的esc键键,返回到命令模式。4vi使用与Shell编程Unix Programming1.vi 使用1.3 vi的编辑命令当vi处于命令模式命令模式时,用户的按键不回显,被解释成编编辑命令辑命令,vi大约有100多个编辑命令。下面介绍的vi命令子集,足可以完成一般的编辑任务。5vi使用与Shell编程Unix Programming1.vi 使用1.3 vi的编辑命令命令i,在当前光标处插入(Insert)正文段,进入输入模式,直至按esc键返回命令模式;命令a,在当前光标后追加(Append)正文段,进入输入模式,直至按esc键返回命令模式;命令o,在当前行之下处插入(Open)新行,进入输入模式,直至按esc键返回命令模式;命令O,在当前行之上处插入(Open)新行,进入输入模式,直至按esc键返回命令模式。1.3.1 正文插入命令6vi使用与Shell编程Unix Programming1.vi 使用1.3 vi的编辑命令单字符移动h 光标左移一列j 光标下移一行k 光标上移一行l 光标右移一列多字符移动3h 光标左移3列10j 光标下移10行13k 光标上移13行20l 光标右移20列1.3.2 光标移动命令7vi使用与Shell编程Unix Programming1.vi 使用1.3 vi的编辑命令B 向后翻页(Backward)F 向前翻页(Forward)U 向上翻半页(Up)D 向下翻半页(Down)1.3.3 翻页命令2B 向后翻2页(Backward)5F 向前翻5页(Forward)字母之前的“”表示Ctrl键可以实现翻多页在vi中,把向文件尾方向定义为“向前”,向文件头方向定义为“向后”,这与许多人的习惯不同。8vi使用与Shell编程Unix Programming1.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形式的命令9vi使用与Shell编程Unix Programming1.vi 使用1.3 vi的编辑命令:123 将光标定位到第123行:$将光标定位到文件末尾:$-10 将光标定位到文件倒数第10行:.10 将光标向下移10行1.3.8 将光标移动到指定行“$”代表文件末尾而“.”代表当前行;都可以使用“+”或“-”进行相对的位移光标(“+”可以省略)。10vi使用与Shell编程Unix Programming1.vi 使用1.3 vi的编辑命令先把光标移到一个大括号(或括号,或方括号)上,按%键,则光标自动定位到与它配对的那一个括号,对编写和检查C语言的源程序非常有用。1.3.9 括号匹配命令%11vi使用与Shell编程Unix Programming1.vi 使用1.3 vi的编辑命令1.3.10 删除命令x删除光标所在的字符5x删除光标所在开始的5个字符dd删除当前行4dd删除当前行开始的4行d$从当前光标处删除到行尾d从当前光标处删除到行首dw删除一个单词12vi使用与Shell编程Unix Programming1.vi 使用1.3 vi的编辑命令1.3.11 字符替换命令r替换光标处字符的命令R替换多个字符的命令例:rararbrc表示什么意思?例:Rabc然后按“esc”键从当前光标开始的字符依次替换为abc13vi使用与Shell编程Unix Programming1.vi 使用1.3 vi的编辑命令1.3.12 取消和重复命令u取消上次的命令(undo).重复执行上次的命令14vi使用与Shell编程Unix Programming1.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行后15vi使用与Shell编程Unix Programming1.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”操作的行粘贴到当前光标处16vi使用与Shell编程Unix Programming1.vi 使用1.3 vi的编辑命令1.3.14 查找命令/查找“/”后面跟的内容 例:/abc在文章中查找“abc”n向后查找N向前查找“n”和“N”命令必须在“/”命令之后执行17vi使用与Shell编程Unix Programming1.vi 使用1.4 vi的文件命令ZZ保存文件并退出vi编辑状态:wq保存文件并退出vi编辑状态:w只保存文件而不退出vi编辑状态:q!不保存文件而强行退出vi编辑状态:r 读入文件内容到当前行18vi使用与Shell编程Unix Programming2.Shell 编程2.1 什么是ShellShell是一个命令行解释器,为系统解释用户的操作命令;Shell是用户使用UNIX系统的桥梁;Shell既是一种命令语言,又是一种程序设计语言;19vi使用与Shell编程Unix Programming2.Shell 编程2.2 什么是Shell编程Shell编程是利用判断、流程控制等方法把多个Shell命令有机的组织成Shell脚本;Shell脚本类似于Windows系统中的批处理程序,通过执行Shell脚本来完成一系列Shell命令;例:#!/bin/sh#Name:echohello.sh#Usage:print Hello,World#Author:Gene#Date:2005-03-18#echo Hello,World!20vi使用与Shell编程Unix Programming2.Shell 编程2.3 Shell脚本的执行脚本文件本身是一个文本文件文本文件,不可能直接执行。当脚本文件具有可执行属性,用户将它执行的时候,系统会启动shell程序文件/bin/sh,运行/bin/sh文件中的CPU指令来解释执行脚本文件中的命令。脚本文件的第一个命令需要指明Shell命令解释程序:#!/bin/sh,“#!”必须出现在本文的最开头。21vi使用与Shell编程Unix Programming2.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 vi使用与Shell编程Unix Programmingshellshell输入输出重定向输入输出重定向重定向符表示将标准输入从键盘重新定义到另外的流。重定向符表示将标准输入从键盘重新定义到另外的流。例如:例如:prog infile,prog infile,即即progprog命令将从文件命令将从文件infileinfile中读取参数。中读取参数。执行一个执行一个shellshell程序也可以使用这种方式。例如程序也可以使用这种方式。例如 sh user1.sh sh user1.sh 就表示要执行就表示要执行user1.shuser1.sh这个这个shellshell程序。程序。重定向符重定向符,也能够混合使用,例如:也能够混合使用,例如:prog outfile prog outfile 表示表示progprog命令从命令从infileinfile中获取命令中获取命令参数,然后将执行结果输出到文件参数,然后将执行结果输出到文件outfileoutfile中。中。vi使用与Shell编程Unix Programming错误流重定向错误流重定向 在在UNIXUNIX系系统统中中,错错误误信信息息流流是是指指在在命命令令或或程程序序执执行行中中出出现现错错误误时时系系统统给给出出的的提提示示或或警警告告信信息息,UNIXUNIX中中将将它它们们作作为为一一个个独独立立的的标标准准输输出出流流进进行行定定义义,错错误误信信息息流流通通常常定定义义为为显显示示器器。当当然然,用用户户也也可可以以根据需要对它进行重定向。不同的根据需要对它进行重定向。不同的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.txtvi使用与Shell编程Unix Programming管道线处理管道线处理 管管道道线线可可以以实实现现将将一一个个程程序序或或命命令令的的输输出出作作为为另另外外一一个个程程序序或或命命令令的的输输入入,管管道道线线作作为为两两个个命命令令之之间间的的分分隔隔符符。管管道道线线的的符符号号是是 “|”|”。例如有这样一组命令:例如有这样一组命令:$ls l tempfile$ls l tempfile$wc l tempfile$wc l tempfile$rm tempfile$rm tempfile管道线处理:管道线处理:$ls-l|wc-l$ls-l|wc-lvi使用与Shell编程Unix Programming管道线处理管道线处理 除除此此之之外外,还还有有“;”、“&”&”、“&”&”、“|”|”可可替替代代管管道道线线“|”|”作为命令列表的分隔符作为命令列表的分隔符.其中:其中:“;”:表示多个命令顺序执行:表示多个命令顺序执行“&”:&”:命令行尾输入,表示将命令的执行过程放到后台处理。命令行尾输入,表示将命令的执行过程放到后台处理。“&”&”:代代替替原原有有的的符符号号“|”|”,表表示示当当左左边边的的命命令令为为“真真”值值时时,执行右边的命令。执行右边的命令。“|”:|”:代代替替原原有有的的符符号号“|”|”,表表示示当当左左边边的的命命令令为为“假假”值值时时,执行右边的命令。执行右边的命令。vi使用与Shell编程Unix Programming管道线处理管道线处理 例如:例如:(a a)pwd pwd;who who;ls lls 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 前者大于等于后者()test number1 op number2 number1 op number2 43vi使用与Shell编程Unix Programming2.Shell 编程2.8 测试数值44vi使用与Shell编程Unix Programming2.Shell 编程2.8 与()的使用当使用&或|时,需要在条件分支中完成多个动作,执行若干个命令,就需要使用类似复合语句的构造,在shell中使用大括号。书写规则1:-f main.c&pwd;ls;rm main.c-f;书写规则2:-f main.c&pwdlsrm main.c-f必须有空格必须有“;”回车()的使用没有这么多限制;但 的执行效率高45vi使用与Shell编程Unix Programming2.Shell 编程2.8 expr计算表达式的值B-shell本身没有提供数学运算和字符串运算的能力,所有这些运算都是借助于命令expr完成的;expr支持算术运算(+、-、*、/),取余数(%),以及数值比较的关系运算(、=、);expr的运算优先级和C语言一样:乘除法优先级最高,其次加减法,然后是关系运算。关系运算的结果是expr打印1(关系成立)或者0(关系不成立);也可以使用括号。46vi使用与Shell编程Unix Programming2.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表达式中,变量与转义符、操作符之间用空格分隔47vi使用与Shell编程Unix Programming2.Shell 编程2.9 条件结构if-then-elif-fi语法1 if 条件1;then命令1 elif 条件2;then命令2 else命令3fi语法2 if 条件1then 命令1 elif 条件2then 命令2 else 命令3fi条件与“then”在一行的,条件之后必须加“;”48vi使用与Shell编程Unix Programming2.Shell 编程2.9 条件结构if-then-elif-fi49vi使用与Shell编程Unix Programming2.Shell 编程2.10 case结构语法 case 条件 in条件1)命令1;条件2)命令2;esac“esac”是“case”的反写可以是多个命令串50vi使用与Shell编程Unix Programming2.Shell 编程2.10 case结构一定要加上双引号,如果在引用这个脚本文件时没有携带任何参数,那么$1就会是空字符串,这种情况下省略了双引号就会导致case行语法错误。51vi使用与Shell编程Unix Programming2.Shell 编程2.11 while循环结构语法 while 条件do命令1命令2 done52vi使用与Shell编程Unix Programming2.Shell 编程2.11 while循环结构例:#!/bin/sh#Name:while.sh#Usage:Test while-do-done#a=10while$a-gt 0 doecho$a=$aa=expr$a-1sleep 1done53vi使用与Shell编程Unix Programming2.Shell 编程2.12 for循环结构语法 for name in word1 word2 do命令1命令2 done循环控制变量循环条件表格:每一次循环name取表格中的一个值54vi使用与Shell编程Unix Programming2.Shell 编程2.12 for循环结构例:#!/bin/sh#Name:for.sh#Usage:Test for-do-done#for ./*doecho$filedone打印当前目录下的所有文件55vi使用与Shell编程Unix Programming2.Shell 编程2.13 break、continue和exit的使用命令break、continue用在循环结构for和while中使用,与C语言中的beak和continue流程控制功能类似。break退出循环;continue退出当前循环进入下一次循环。exit命令用来终止Shell程序;exit后面的参数,就是Shell脚本程序结束的返回值。56vi使用与Shell编程Unix Programming2.Shell 编程2.14 Shell函数语法 name()cmd1;cmd2;或name()cmd1cmd257vi使用与Shell编程Unix Programming2.Shell 编程2.14 Shell函数在调用函数时,引用函数的名字,可以附加上0到多个参数,在函数体内部以位置变量$1,$2,或$*,$方式引用函数的参数。函数体内部可以使用内部命令return,使函数有返回码,返回码0代表成功,非零表示失败。函数体内一个函数不能调用它自己。shell函数不允许递归调用。58vi使用与Shell编程Unix Programming2.Shell 编程2.14 Shell函数例:#sum()ret=expr$1+$2if$#-lt 2 thenecho Please input two parameterselsesum$1$2echo“$1+$2=$ret”fi函数头函数体调用函数59vi使用与Shell编程Unix Programming2.15 Shell程序调试 shellshell程程序序是是一一种种解解释释性性语语言言,它它的的执执行行是是逐逐行行进进行行的的,程程序序中中是是否否有有语语法法错错误误,不不执执行行到到那那一一行行系系统统是是无无法法知知道道的的。C C,pascalpascal等等高高级级语语言言是是有有编编译译过过程程的的,程程序序中中的的语语法法错错误误在在编编译译阶阶段段就就能能检检测测出出来来,因因此此比比shellshell更容易调试更容易调试shellshell程序通常有三种调试方法:程序通常有三种调试方法:1 1)交互式调试)交互式调试 shellshell程程序序中中使使用用的的命命令令都都能能在在命命令令行行中中运运行行,所所以以对对于于一一些些不不很很熟熟悉悉的的命命令令和和语语法法可可以以先先用用命命令令进进行行验验证证,然然后后再再编编写写到到shellshell程程序序中中,这这种种调试方法称为交互式调试,也是最简单的一种调试方法。调试方法称为交互式调试,也是最简单的一种调试方法。vi使用与Shell编程Unix Programming2.15 Shell程序调试2 2)在编辑过程中不断调试执行所编辑的)在编辑过程中不断调试执行所编辑的shellshell程序程序 在在UNIXUNIX系系统统中中可可以以打打开开多多个个工工作作窗窗口口。我我们们可可以以在在一一个个窗窗口口中中用用vivi等等编编辑辑器器进进行行编编辑辑,然然后后在在另另一一个个连连接接窗窗口口中中执执行行该该shellshell程程序序,这这样样可可以以随时观察到已经编写的部分是否正确。最终完成这个随时观察到已经编写的部分是否正确。最终完成这个shellshell程序的编写。程序的编写。3 3)用)用shellshell程序提供的跟踪功能进行调试程序提供的跟踪功能进行调试 shellshell程序可以使用程序可以使用 -v-x-v-x 选项对选项对shellshell程序进行跟踪程序进行跟踪-v-v:当当读读入入shellshell输输入入行行时时把把它它们们显显示示出出来来,完完成成详详细细跟跟踪踪。ShellShell程程序序在在完完成成这这段段程程序序执执行行时时首首先先逐逐行行读读入入执执行行的的命命令令,并并在在标标准准输输出出上上显显示示该该命命令令要要执执行行的的实实际际内内容容,然然后后执执行行该该命命令令。如如果果没没有有语语法法错错误误,执执行行将一直进行下去直到完成将一直进行下去直到完成shellshell的执行。的执行。-x-x:执行命令前先把命令和它们的参数显示出来:执行命令前先把命令和它们的参数显示出来 vi使用与Shell编程Unix Programming2.15 Shell程序调试假设有这么一个简单的假设有这么一个简单的shellshell,叫,叫test1.sh test1.sh date date echo$PATH echo$PATH我们用我们用-v-v参数来调试参数来调试,执行执行sh -v test1.shsh -v test1.sh那么输出就应该是:那么输出就应该是:datedate Mon Sep 8 9:55:01 Linux9 2003 Mon Sep 8 9:55:01 Linux9 2003 echo$PATH echo$PATH /usr/bin:/usr/ucb/bin:/home/user1 /usr/bin:/usr/ucb/bin:/home/user1shellshell在在执执行行datedate前前先先显显示示该该命命令令然然后后显显示示datedate的的执执行行结结果果,接接着着显显示示echo$PATHecho$PATH以及它的执行结果。以及它的执行结果。如如果果用用-x-x参参数数来来执执行行这这个个shellshell,执执行行 sh sh-x-x test1.shtest1.sh则则系系统统的的输输出出将将是:是:+date+date Mon Sep 8 9:55:01 Linux9 2003 Mon Sep 8 9:55:01 Linux9 2003 +echo/usr/bin:/usr/ucb/bin:/home/user1 +echo/usr/bin:/usr/ucb/bin:/home/user1 /usr/bin:/usr/ucb/bin:/home/user1 /usr/bin:/usr/ucb/bin:/home/user1 date date这一行没有参数,所以只显示命令这一行没有参数,所以只显示命令 echoecho这一行有参数这一行有参数$path$path,被直接替换成了参数的值。,被直接替换成了参数的值。vi使用与Shell编程
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!