《第六章vi与Shell入门》由会员分享,可在线阅读,更多相关《第六章vi与Shell入门(43页珍藏版)》请在金锄头文库上搜索。
1、第六章第六章vivi与与ShellShell入门入门第六章vi与Shell入门复习复习第六章vi与Shell入门内容提要lvi文本编辑器文本编辑器l什么是什么是Shell?lBASHShelll变量与变量设置变量与变量设置l变量设置规则变量设置规则l命令别名与历史命令别名与历史lBASHShell的配置文件的配置文件第六章vi与Shell入门vi文本编辑器文本编辑器lLinux/Unix下的配置文件都是文本文件下的配置文件都是文本文件lvi是使用最广泛的编辑器是使用最广泛的编辑器lvi分为三种工作模式:分为三种工作模式:l一般模式一般模式l编辑模式编辑模式l命令模式命令模式第六章vi与Shel
2、l入门vi文本编辑器文本编辑器lvi的一般模式:的一般模式:l以以vi处理一个文件的时候,一进入该文件就是一般模式了(处理一个文件的时候,一进入该文件就是一般模式了(vi命令启动命令启动后的默认状态)。在这个模式中,可以使用上下左右键来移动光标,也后的默认状态)。在这个模式中,可以使用上下左右键来移动光标,也可以使用删除字符或删除整行来处理文件内容,也可以使用复制、粘贴。可以使用删除字符或删除整行来处理文件内容,也可以使用复制、粘贴。lvi的编辑模式:的编辑模式:l在一般模式中可以处理删除、复制、粘贴等动作,但是却无法编辑。在一般模式中可以处理删除、复制、粘贴等动作,但是却无法编辑。l按下按下
3、i,I,o,O,a,A等字母之后才会进入编辑模式,进入该模式后,左下等字母之后才会进入编辑模式,进入该模式后,左下方会出现方会出现INSERT或或REPLACE等字样。等字样。l按下按下ESC就可以回到一般模式就可以回到一般模式第六章vi与Shell入门vi文本编辑器文本编辑器lvi的进入编辑模式的命令详解的进入编辑模式的命令详解li从光标所在位置前开始插入文本从光标所在位置前开始插入文本lI将光标移到当前行行首,然后在其前插入文本将光标移到当前行行首,然后在其前插入文本la用于在当前光标位置之后插入文本用于在当前光标位置之后插入文本lA把光标移到行尾,从那里开始插入文本把光标移到行尾,从那里
4、开始插入文本lo在光标所在行的在光标所在行的下面下面新开一行,并将光标置于新行行首,等待输入文新开一行,并将光标置于新行行首,等待输入文本本lO在光标所在行的在光标所在行的上面上面新开一行,并将光标置于新行行首,等待输入文新开一行,并将光标置于新行行首,等待输入文本本第六章vi与Shell入门vi文本编辑器文本编辑器lvi的命令模式的命令模式l在一般模式当中,输入在一般模式当中,输入:或或/就可以将光标移动到最底下那一行,从而就可以将光标移动到最底下那一行,从而进入命令模式。进入命令模式。l在这个模式当中,可以进行搜索、保存、退出、读取另外一个文件、显在这个模式当中,可以进行搜索、保存、退出、
5、读取另外一个文件、显示行号等动作。示行号等动作。第六章vi与Shell入门vi文本编辑器文本编辑器l图解图解vi的三种模式的三种模式一般模式一般模式移动光标移动光标查找查找替换替换删除删除复制复制粘贴粘贴编辑模式编辑模式输入字符输入字符命令模式命令模式读取读取保存保存显示行号显示行号i o a ESC: / ?ESC第六章vi与Shell入门vi文本编辑器文本编辑器lvi的举例:的举例:输入输入vitest.txt按下按下i,进入编辑模式,进入编辑模式输入输入hello按下按下Esc进入一般模式进入一般模式输入输入:wq回车保存退出回车保存退出第六章vi与Shell入门vi文本编辑器文本编辑器
6、lvi一般模式下常用命令(一般模式下常用命令(1/3):):hjkl用于光标左移、下移、上移、右移用于光标左移、下移、上移、右移Ctrl+f屏幕向前移动一页屏幕向前移动一页Ctrl+b屏幕向后移动一页屏幕向后移动一页0移到行的第一个字符处移到行的第一个字符处$移到行的最后一个字符处移到行的最后一个字符处G移到文件的最后一行移到文件的最后一行nG移动到文件的第移动到文件的第n行行n光标向下移动光标向下移动n行行nH光标移到当前屏幕的第光标移到当前屏幕的第n行行首行行首第六章vi与Shell入门vi文本编辑器文本编辑器lvi一般模式下常用命令(一般模式下常用命令(2/3):):x向后删除一个字符向
7、后删除一个字符nx向后删除向后删除n个字符个字符X向前删除一个字符向前删除一个字符dd删除光标所在的行删除光标所在的行ndd删除光标所在行的向后删除光标所在行的向后n行行yy复制光标所在行复制光标所在行nyy复制光标所在行的向后复制光标所在行的向后n行行p粘贴到光标的下一行粘贴到光标的下一行P粘贴到光标的上一行粘贴到光标的上一行第六章vi与Shell入门vi文本编辑器文本编辑器lvi一般模式下常用命令(一般模式下常用命令(3/3):):/word在光标之后查找在光标之后查找word?word 在光标之前查找在光标之前查找wordn向相同的方向移动到有向相同的方向移动到有word的地方的地方N向
8、相反的方向移动到有向相反的方向移动到有word的地方的地方u撤销上次操作撤销上次操作.重做重做ZZ存盘退出存盘退出ZQ 不保存退出不保存退出第六章vi与Shell入门vi文本编辑器文本编辑器lvi命令模式下常用命令(命令模式下常用命令(1/3):)::n跳到第跳到第n行行:q退出,如果有修改没有保存会提示退出,如果有修改没有保存会提示:wq存盘退出存盘退出:q!不保存退出不保存退出:w存盘存盘:wfile将当前编辑内容保存到将当前编辑内容保存到file:rfile读取另外一个文件读取另外一个文件file的数据,插入到光标所在行的后面的数据,插入到光标所在行的后面:fnewfile将当前文件重命
9、名到将当前文件重命名到newfile(别忘了保存)(别忘了保存)第六章vi与Shell入门vi文本编辑器文本编辑器lvi命令模式下常用命令(命令模式下常用命令(2/3):)::n1,n2s/word1/word2/g在第在第n1与与n2行之间寻找行之间寻找word1这个字符串,并将该字符串替换为这个字符串,并将该字符串替换为word2:1,$s/word1/word2/g从第一行到最后一行寻找从第一行到最后一行寻找word1字符串,并将该字符串替换为字符串,并将该字符串替换为word2(.可可以表示当前行,以表示当前行,$可以表示最后一行)可以表示最后一行):1,$s/word1/word2/
10、gc从第一行到最后一行寻找从第一行到最后一行寻找word1字符串,并将该字符串替换为字符串,并将该字符串替换为word2。且。且在替换前显示提示字符给使用者确认。在替换前显示提示字符给使用者确认。第六章vi与Shell入门vi文本编辑器文本编辑器lvi命令模式下常用命令(命令模式下常用命令(3/3):)::n1,n2con3第第n1行到行到n2行的内容拷贝到行的内容拷贝到n3后后:n1,n2mn3第第n1行到行到n2行的内容移动到行的内容移动到n3后后:n1,n2d删除第删除第n1行到行到n2行的内容行的内容:!Cmd运行运行Shell命令命令Cmd:r!Cmd将命令行运行的结果写入当前位置将
11、命令行运行的结果写入当前位置:n1,n2w!Cmd将第将第n1行到行到n2行的内容作为行的内容作为Cmd的输入运行命令,如果没有指定的输入运行命令,如果没有指定n1和和n2,则将整个文件作为输入。则将整个文件作为输入。:setnu显示行号显示行号:setnonu隐藏行号隐藏行号第六章vi与Shell入门vi文本编辑器文本编辑器lvi练习:练习:l将将/etc/man.config拷贝到当前目录,用拷贝到当前目录,用vi打开打开l显示行号,并移动到第显示行号,并移动到第62行查看内容行查看内容l移动到第一行,并且向下搜寻一下移动到第一行,并且向下搜寻一下manl将将50到到100行之间的行之间的
12、man改为改为MAN,并且一个一个挑选是否需要修改,并且一个一个挑选是否需要修改l修改完之后,突然反悔了,全部复原修改完之后,突然反悔了,全部复原l复制复制51到到60行这十行的内容,并且贴到最后一行之后行这十行的内容,并且贴到最后一行之后l删除删除11到到30行之间的行之间的20行行l将这个文件另存成将这个文件另存成man.test.configl保存退出保存退出第六章vi与Shell入门什么是什么是Shell?l想要听音乐需要什么?想要听音乐需要什么?l首先需要声卡首先需要声卡l操作系统的核心可以支持这个声卡(有相应的声卡驱动程序)操作系统的核心可以支持这个声卡(有相应的声卡驱动程序)l用
13、户发出播放音乐的指令用户发出播放音乐的指令l必须发出指令,硬件才会工作。如果可以直接同硬件沟通,那么不需要内核。必须发出指令,硬件才会工作。如果可以直接同硬件沟通,那么不需要内核。否则,用户的指令必须先发送给内核,然后内核再去控制硬件。否则,用户的指令必须先发送给内核,然后内核再去控制硬件。shell正是正是用户与内核沟通的平台:用户与内核沟通的平台:l用户可以通过用户可以通过shell给内核发送指令给内核发送指令l内核也可以把指令执行的过程或者结果信息发送到内核也可以把指令执行的过程或者结果信息发送到shell给用户看。给用户看。第六章vi与Shell入门什么是什么是Shell?l来自第一讲
14、的图:来自第一讲的图:内核(Kernel)外壳(Shell,KDE,Application)用户硬件(Hardware)第六章vi与Shell入门BASHShelll早年的早年的Unix年代,年代,Unix发展者众多,所以发展者众多,所以shell有很多不同版本,例如常听有很多不同版本,例如常听到的到的BourneShell(sh)、在、在Sun中默认的中默认的CShell、商业上常用的商业上常用的KSHell以及以及TCSH等,每一种等,每一种Shell都各有其特点。都各有其特点。lLinux使用的是使用的是BourneAgainShell(简称(简称bash),这个),这个Shell是是B
15、ourneShell的增强版本,也是基于的增强版本,也是基于GNU的架构下发展出来的。的架构下发展出来的。第六章vi与Shell入门BASHShelll第一个流行的第一个流行的shell是由是由StevenBourne开发出来的,为了纪念他所以就称开发出来的,为了纪念他所以就称为为Bourneshell,或直接简称为,或直接简称为sh。l另一个广为流传的另一个广为流传的shell是由柏克莱大学的是由柏克莱大学的BillJoy设计依赖于设计依赖于BSD版的版的Unix系统中的系统中的shell,这个,这个shell的语法有点类似的语法有点类似C语言,所以才得名为语言,所以才得名为Cshell(简
16、称(简称csh)。)。lBASHshell是是GNU计划中重要的工具软件之一,目前也是计划中重要的工具软件之一,目前也是GNU操作系统操作系统中标准的中标准的shell,与,与sh兼容。兼容。第六章vi与Shell入门BASHShelllBASHShell的特点的特点(1/5):l命令记忆能力命令记忆能力lLinux可以记忆以前输入过的命令,只要使用上下键就可以找到以前可以记忆以前输入过的命令,只要使用上下键就可以找到以前执行的指令来执行。执行的指令来执行。l这些命令按照先后顺序记录在用户这些命令按照先后顺序记录在用户Home目录下的隐藏文件目录下的隐藏文件.bash_history中中l.b
17、ash_history里面记录了上一次登录以前执行过的命令,本次登录里面记录了上一次登录以前执行过的命令,本次登录执行的命令都保存在内存中,只有成功注销之后,内存数据才会刷新执行的命令都保存在内存中,只有成功注销之后,内存数据才会刷新到到.bash_history文件中文件中l有时候有时候.bash_history文件中记录了你包含在指令中的密码,可能引文件中记录了你包含在指令中的密码,可能引起安全问题(如起安全问题(如sqlplussys/abcdefgassysdba),所以最好还是),所以最好还是设置命令的记录数量不要太大。设置命令的记录数量不要太大。第六章vi与Shell入门BASHS
18、helllBASHShell的特点的特点(2/5):l命令补全功能命令补全功能l如果在执行命令的时候不想按下太多的按键(例如命令如果在执行命令的时候不想按下太多的按键(例如命令pcpro),在),在输入了输入了pcprofile之后,再按下之后,再按下Tab键的话,那么键的话,那么bash马上会自马上会自动的将后面的动的将后面的dump接上来。接上来。l如果有重复的命令,那么按下两次如果有重复的命令,那么按下两次Tab将会把所有重复的命令列出将会把所有重复的命令列出来。来。l直接在提示字符后面连按两次直接在提示字符后面连按两次键,则系统会将所有可以使用的键,则系统会将所有可以使用的命令都列出来
19、。命令都列出来。l例如,如果想要知道目前系统里面,所有以例如,如果想要知道目前系统里面,所有以b开头的命令呢?就是按开头的命令呢?就是按下下b之后,连按两次之后,连按两次就就ok。第六章vi与Shell入门BASHShelllBASHShell的特点的特点(3/5):l文件名称补全功能文件名称补全功能l如果用如果用vi来读取某个文件,例如来读取某个文件,例如/etc/man.config这个文件,那么这个文件,那么可以输入可以输入vi/etc/man之后,直接按下之后,直接按下键,该文件名称就会被键,该文件名称就会被自动的补上。自动的补上。l同样,出现文件多个匹配项时,可以按下两个同样,出现文
20、件多个匹配项时,可以按下两个TAB键来显示所有匹配键来显示所有匹配项。项。l这样大大增加了指令输入的正确率。这样大大增加了指令输入的正确率。第六章vi与Shell入门BASHShelllBASHShell的特点的特点(4/5):l命令别名设置功能命令别名设置功能l假如我需要知道某个目录底下的所有文件信息(包含隐藏文件)及所假如我需要知道某个目录底下的所有文件信息(包含隐藏文件)及所有的文件属性,那么我就必须要输入有的文件属性,那么我就必须要输入ls-al这样的指令。这样的指令。l每次都输入多麻烦!每次都输入多麻烦!l可以通过为自己经常使用的命令(包括参数)定义别名来避免过多输可以通过为自己经常
21、使用的命令(包括参数)定义别名来避免过多输入。入。l例如:例如:aliaslm=ls-al(注意(注意=两边不要有空格)两边不要有空格)l那么以后那么以后lm就等于执行就等于执行ls-all直接输入直接输入alias,可以显示目前以及定义好的所有别名,可以显示目前以及定义好的所有别名第六章vi与Shell入门BASHShelllBASHShell的特点的特点(5/5):l任务控制,前台、背景控制任务控制,前台、背景控制lbgfglCtrl+ZlCtrl+ClShellScripts第六章vi与Shell入门变量与变量设置变量与变量设置l变量变量(1/2):l假设假设JAVA安装在安装在/usr
22、/jdk1.5下面下面l其他很多程序(比如应用服务器)的执行都需要其他很多程序(比如应用服务器)的执行都需要JRE,这些服务的启动,这些服务的启动可能形如:可能形如:/usr/jdk1.5/bin/javacom.bea.WebLogicStart/usr/jdk1.5/bin/javacom.bea.EJBContainer/usr/jdk1.5/bin/javacom.bea.WebContainerl那么假如那么假如JAVA换了其他目录,或者要使用其他版本(如换了其他目录,或者要使用其他版本(如jdk1.5-jdk6.0)呢?)呢?第六章vi与Shell入门变量与变量设置变量与变量设置l
23、变量变量(2/2):l通常的做法是定义变量,如:通常的做法是定义变量,如:JAVA_HOME=/usr/jdk1.5l那么其他程序都用变量,而不用绝对值,如:那么其他程序都用变量,而不用绝对值,如:$JAVA_HOME/bin/javacom.bea.WebLogicStart$JAVA_HOME/bin/javacom.bea.EJBContainer$JAVA_HOME/bin/javacom.bea.WebContainerl那么假如那么假如JAVA换了其他目录,或者要使用其他版本(如换了其他目录,或者要使用其他版本(如jdk1.5-jdk6.0),那么只需要修改变量的值即可:),那么只
24、需要修改变量的值即可:JAVA_HOME=/usr/jdk6.0l变量就是特定字符串值的别名变量就是特定字符串值的别名第六章vi与Shell入门变量与变量设置变量与变量设置l显示变量值的命令:显示变量值的命令:echol用法:用法:echo$variablel例如:例如:echo$PATHecho$HOMEecho$MAILecho$USERecho$HOSTNAMEl查看所有查看所有Linux预定义变量的命令:预定义变量的命令:env第六章vi与Shell入门变量与变量设置变量与变量设置l重要的系统环境变量:重要的系统环境变量:HISTSIZE=1000=当前命令记忆数量当前命令记忆数量HO
25、ME=/home/test=登录用户的登录用户的Home目录目录HOSTNAME=test.adsldns.org=主机名称主机名称HOSTTYPE=i386=主机主机CPU等级等级(i386,i686.)LANGUAGE=zh_CN.UTF-8=默认语言,要修改它可以修改默认语言,要修改它可以修改/etc/sysconfig/i18n文件文件MAIL=/var/spool/mail/root=邮件目录邮件目录LOGNAME=root=登录帐号登录帐号PWD=/root=当前路径当前路径PS1=uhW$=命令行提示符样式命令行提示符样式第六章vi与Shell入门变量与变量设置变量与变量设置l显
26、示所有变量的命令:显示所有变量的命令:setlset除了会显示出目前的环境变量之外,也会显示出用户自定义变量。常除了会显示出目前的环境变量之外,也会显示出用户自定义变量。常见的用户自定义变量有:见的用户自定义变量有:BASH=/bin/bash=BASH主程序所在路径主程序所在路径COLORS=/etc/DIR_COLORS=使用颜色使用颜色COLUMNS=100=终端的字符列数终端的字符列数HIST=历史命令文件历史命令文件MAILCHECK=60=每隔每隔60s检查一次邮检查一次邮PPID=24572=当前当前bash父进程父进程IDUID=500=当前用户的当前用户的UID$=当前当前s
27、hell的的PID?=最后一个命令的返回值,最后一个命令的返回值,0表示成功,否则为表示成功,否则为1第六章vi与Shell入门变量设置规则变量设置规则l变量设置规则变量设置规则(1/2)l变量与变量内容(值)用等号连接变量与变量内容(值)用等号连接l等号两边不能直接接空格符等号两边不能直接接空格符l变量名称只能是英文字母与数字,但是数字不能是开头字符变量名称只能是英文字母与数字,但是数字不能是开头字符l若有空格符可以使用双引号或单引号来将变量内容括起来。注意:若有空格符可以使用双引号或单引号来将变量内容括起来。注意:双引双引号内的特殊字符可以保有变量特性,但是单引号内的特殊字符则仅为一号内的
28、特殊字符可以保有变量特性,但是单引号内的特殊字符则仅为一般字符般字符l必要时需要转义字符必要时需要转义字符“”来将特殊符号(如回车换行,来将特殊符号(如回车换行,$,空格符,空格符,单引号等)变成一般符号单引号等)变成一般符号第六章vi与Shell入门变量设置规则变量设置规则l变量设置规则变量设置规则(2/2)l在命令中,如果需要其他命令的执行结果信息,可以使用在命令中,如果需要其他命令的执行结果信息,可以使用commandl若该变量为扩增变量内容时,则需以双引号(有些版本也不用)及若该变量为扩增变量内容时,则需以双引号(有些版本也不用)及$变变量名称(如:量名称(如:$PATH:/home)
29、继续累加内容)继续累加内容l若该变量需要在其它子程序执行,则需要以若该变量需要在其它子程序执行,则需要以export来使变量生效,如来使变量生效,如exportPATHl通常大写字符为系统变量,自定义变量可以使用小写字符,方便区别通常大写字符为系统变量,自定义变量可以使用小写字符,方便区别(只是建议)(只是建议)l取消变量的方法为:取消变量的方法为:unset变量名称变量名称第六章vi与Shell入门变量设置规则变量设置规则l变量设置实战变量设置实战(1/3)12name=VBrid=错误!变量开头不能是数字错误!变量开头不能是数字name=VBird=错误!等号两边不能直接接空格错误!等号两
30、边不能直接接空格name=VBird=正确!正确!echo$name显示显示VBirdname=VBirdname=错!带空格需要加上双引号!错!带空格需要加上双引号!name=VBirdname=正确!正确!name=VBirdsname=正确!正确!第六章vi与Shell入门变量设置规则变量设置规则l变量设置实战变量设置实战(2/3)aa=hexyname=$aaisme=达不到累加的效果,达不到累加的效果,name与变量与变量aaisme同值同值name=$nameisme=正确!正确!echo$name显示显示VBirdsnameismePATH=$PATH:/home/test=正确
31、的!正确的!echo$PATH将多了一段将多了一段PATH=$PATH:/home/test=正确!这个形式对于正确!这个形式对于PATH来说也是正确的来说也是正确的第六章vi与Shell入门变量设置规则变量设置规则l变量设置实战变量设置实战(3/3)hexyhexy$aa=abcdhexyhexy$bb=$aaaabbhexyhexy$cc=$aaaabb问题:现在问题:现在aabbcc的值是多少?的值是多少?abcdabcdaabb$aaaabb第六章vi与Shell入门变量设置规则变量设置规则lexport命令命令l让让“局部变量局部变量”变成变成“全局变量全局变量”,这样,这样shel
32、l设置的变量在其子设置的变量在其子shell中同样有效。但是不能跨越当前会话中同样有效。但是不能跨越当前会话l举例:举例:name=hexybash=进入子进入子shellecho$name=显示空显示空exit=退出子退出子shellexportname=导出导出bash=进入子进入子shellecho$name=显示显示hexy第六章vi与Shell入门命令别名与历史命令别名与历史l设置别名的命令:设置别名的命令:aliasl可以减少输入量:可以减少输入量:l在命令加参数比较长的情况下,定义别名可以提高工作效率。例如我在命令加参数比较长的情况下,定义别名可以提高工作效率。例如我们经常需要这
33、样的命令们经常需要这样的命令“ls-al|less”,每次输入确实麻烦,那么如,每次输入确实麻烦,那么如果定义别名果定义别名aliaslm=”ls-al|more”那么以后只需要输入那么以后只需要输入lm即可即可l减少错误:减少错误:l如果直接输入如果直接输入rm删除文件,可能出现误删的情况,那么可以这样做:删除文件,可能出现误删的情况,那么可以这样做: aliasrm=”rm-i”l提高操作习惯程度:提高操作习惯程度:l比如我们习惯了比如我们习惯了DOS里面的里面的dir和和cls命令,那么可以定义命令,那么可以定义aliasdir=”ls-l”;aliascls=”clear”第六章vi与Shell入门命令别名与历史命令别名与历史l设置别名的命令(续):设置别名的命令(续):aliasl不带任何参数的不带任何参数的alias可以显示当前定义的所有别名可以显示当前定义的所有别名l取消别名设置可以使用取消别名设置可以使用unalias命令命令l举例:举例:aliaslm=ls-al|morelm=使用别名使用别名unaliaslm=取消别名取消别名alias.bashrclsl=无效无效source.bashrclsl=有效了有效了第六章vi与Shell入门