shell脚本教程详细讲解(很好)课件

上传人:艳*** 文档编号:242972901 上传时间:2024-09-13 格式:PPT 页数:80 大小:409KB
返回 下载 相关 举报
shell脚本教程详细讲解(很好)课件_第1页
第1页 / 共80页
shell脚本教程详细讲解(很好)课件_第2页
第2页 / 共80页
shell脚本教程详细讲解(很好)课件_第3页
第3页 / 共80页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,College of Information Science and Engineering,Shandong Agricultural University,SHELL,脚本编程,2,shell,脚本能提高用户操作和管理员进行系统管理的效率,一般步骤,编辑器编写脚本程序,shell,做解释程序,非交互地执行脚本,两种执行方式:,用,sh,命令执行脚本文件,给脚本文件添加执行权限,用,./,命令执行,3,HELLO WORLD!,vi hello.sh,按,i,进入插入模式,输入,echo “hello world!”,:,输入,wq,保存退出,sh hello.sh,或者,chmod 755 hello.sh,./hello.sh,4,一、VI编辑器,VI,的三种工作模式,VI,的启动,VI,的退出,VI,的文本,编辑,VI,命令模式下的操作,VI,行命令模式下的操作,VI,编辑器的使用,5,系统配置文件、shell脚本文件等都是文本文件,编辑它们都要使用文本编辑器。,在Linux系统中有多种文本编辑器,其中既有字符界面如的VI、EMACAS等,也有图形界面的如“附件”菜单下的“文本编辑器(gedit)”等,用户可以根据自己的喜好选择使用。,学习vi的方法:vi的命令太多且难以记忆,而实际上真正经常使用的命令并不是太多,只要掌握几个关键的并加以适当练习很快就上手使用vi。,6,为什么选择,VI,就使用的方便性而言,有比,vi,更好的编辑器,还要图形化的,edit,,为什么还要用,vi,?,历史久远,功能强大,在有些情况下系统中能够找到的编辑器只有,vi,;,用户一旦熟悉后,使用非常方便;系统管理员使用正则表达式可以极大地提高工作效率,而学习,vi,也是掌握正则表达式的有效途径。,由于,vi,的版本不同,其命令格式、功能和用法会有一些差别。,Shell,中执行,vi,命令,,RedHat,系统实际上是执行,vim,,它是传统,vi,的增强版本,7,1,、,VI,的三种工作模式,命令模式,启动,VI,默认进入命令模式。此时界面不能编辑,只能接受命令,(,键入的命令看不到,),文件的保存,退出,文本的删除、复制、搜索等操作,输入模式,编辑模式,命令模式下用,i(sert),a(ppend),,,o,s,等均可进入该模式。按,esc,返回命令模式,行编辑模式,实际上也是命令模式的一种,在,命令模式下输入冒号,进入一个命令行,,可显示地输入命令,(所以也有些书认为是两种工作模式)。,三种模式可自由切换,一般切换命令就是操作的英文单词的首字母,8,2,、,VI,的启动,启动命令:vi my.txt,如果文件存在,则vi显示文件内容并等待用户的命令。,如果指定的文件不存在,则vi将告知用户这是未命名的文件,并进入一个空白的界面。,启动vi时都是默认处于命令模式。用户必须使用命令切换到文本输入模式才能进行输入编辑,或者可执行删除、复制等编辑命令。,vi,R file_name,,以只读方式打开文件,9,3,、,VI,的退出,冒号进命令行模式下:,:q!,不存档强制退出。,:w,保存但不退出,,,w,(rite),后,可加所要存档的文档名。,:wq,存档后退出。,命令模式下按,zz,,,功能与,:wq,相同。,:x,与,:wq,相同,命令模式:,ZZ,、,ZQ,保存,/,不保存退出,10,4、怎么编辑,必须从命令模式转入插入模式才能进行输入编辑,可用命令有,:,新增,(append),a,:从光标所在位置,后面,开始新增资料,A,:,从光标所在,行最后面的,地方开始新增资料。,插入,(insert),i,:,从光标所在位置,前面,开始插入资料,I,:从光标所在,行,的第一个非空白字元,前面,开始插入资料。,开始,(open),o,:在光标所,在行下,新增一列并进入输入模式。,O:,在光标所,在行上方,新增一列并进入输入模式。,冒号进入行命令模式,输入,set nu,可设置,vi,显示行号,11,5,、命令模式下的操作:删除与修改,x,:,删除光标所在字符,dw,删除一个单词,dd,:删除光标所在的行,s,:删除光标所在字节,并进入输入模式,#,表示数字,#x,删除几个字符,如,3x,#dw,删除几个单词,如,3dw,表示删除三个单词,#dd,删除多个行,如,3dd,表示删除光标行及光标的下两行,d$,删除光标到行尾的内容,d,光标键:,左:删除光标前面的字符;,右:删除光标所在的字符;,上:将当前行与上一行删除;,下:当前行与下一行删除,nd,上下光标键,:,删除当前行之上、下的几行文本(包括当前行),u:,恢复刚才被修改的文本,U,:恢复光标所在行的所有修改,.:,重复上一次命令的操作,12,命令模式下的操作:,文本复制、粘贴,复制命令:,y,yy:,复制整行,yw:,复制光标所在的单词,nyw,:复制包括光标所在的,n,个单词,nyy:,复制包括当前行在内的,n,行,粘贴命令,P,光标移动,h,、,j,、,k,、,l,nG,:移动到底,n,行行首,13,6,、行,命令模式下的操作:,字符串的查找、替换,:/string,搜索指定的字符串。,按键,n,:继续进行搜索,如果写的是斜杠(,/,):按,n,会从当前位置向后查找;如果写的是问号(?),按,n,键则从当前位置向前查找,查找且替换,:%s /SEARCH /REPLACE,把文档中所有,SEARCH,替换成,REPLACE,;,:#,# s /SEARCH /REPLACE /g,号表示数字,表示从多少行到多少行,把,SEARCH,替换成,REPLACE,;,:s /SEARCH /REPLACE /g,把,当前光标,所在行中的,SEARCH,单词,替换成,REPLACE,,并把所有,SEARCH,高亮显示,14,7,、设置,vi,全局的配置文件位于,/etc/vim/vimrc(,或者,/etc/vimrc),也可以拥有自己独立的配置文件,配置文件位“,/.vimrc”,,如果没有该文件,也可以直接用如下命令创建并编辑,比如:,set nu ,显示行号,set ruler ,显示光标位置,set undolevel ,显示光标位置,set smartindent ,智能缩进,syntax on(,或,syn on) ,语法高亮,15,文本输入状态,命令状态,行编辑状态,按,ESC,键,按,A,I,S,C,O,等命令,按“:”键,执行非退出命令,如,w,三种模式间的转换关系,16,案例练习,1.,请在,/tmp,这个目录下建立一个名为,vitest,的目录;,2.,进入,vitest,这个目录当中;,3.,将,/etc/man.config,拷贝到本目录底下,4.,使用,vi,开启本目录下的,man.config,这个档案;,5.,在,vi,中设定一下行号;,6.,移动到第,58,行,向右移动,40,个字符,请问您看到的双引号内是什么目录?,7.,移动到第一行,并且向下搜寻一下“,bzip2”,这个字符串,请问他在第几行?,8.,接着下来,我要将,50,到,100,行之间的,man,改为,MAN,,并且一个一个挑选是否需要修改,如何下达指令?,9.,修改完之后,突然反悔了,要全部复原,有哪些方法?,10.,我要复制,51,到,60,行这十行的内容,并且贴到最后一行之后;,11.,删除,11,到,30,行之间的,20,行;,12.,将这个文件另存成一个,man.test.config,的文件;,13.,到第,29,行,并且删除,15,个字符;,14.,储存后离开,17,1. mkdir /tmp/vitest,2. cd /tmp/vitest,3. cp /etc/man.config .,4. vi man.config,5. :set nu,6.,先按下,58G,再按下,40,会看到,/dir/bin/foo,这个字样在双引号内;,7.,先执行,1G,或,gg,后,直接输入,/bzip2,8.,直接执行,:50,100s/man/MAN/gc,即可,9. (1),简单的方法可以一直按,u,恢复到原始状态,,(2),使用不储存离开,:q!,之后,再重新读取一次该文件;,10. 51G,然后再,10yy,之后按下,G,到最后一行,再,p,粘贴,10,行,11. 11G,之后,再给他,20dd,即可删除,20,行了;,12. :w man.test.config,13. 29G,之后,再给他,15x,即可删除,15,个字符;,14. :wq!,18,二、SHELL变量与语法,Shell,概述,shell,变量和符号,shell,控制流程语法,shell,中的输出重定向,脚本实例,SHELL,变量与语法,19,1,、,shell,的基本元素,(,1,),#,!,/bin/bash,必须的,指出,shell,的类型,(,2,),#,注释,(,3,)变量,(,4,)控制,一、,Shell,概述,一个,shell,脚本,vi clearup.sh,#,!,/bin/bash,# this is clear,cd /var/log,cat /dev/null/var/log/messages,/dev/null Linux,中的无限大的垃圾回收站,echo Logs cleaned up.,20,2,、一般步骤:,(,1,)编辑文件,(,2,)保存文件,(,3,)将文件赋予可执行的权限,(,4,)运行及排错,21,注意:,一般以,.sh,为文件后缀。没有也能执行。,常见的两种执行方式,./,文件名,在当前目录下写明路径执行,要求文件必须有执行权限,如,chmod 755 run.sh,./run.sh,sh,文件名,sh run.sh,文件开头指定一个或多个解释脚本程序的,shell,,如,#!/bin/bash,如果指定,注意,/bin,不要漏了“,/”,,否则用,./,方式执行会找不到路径。,不指定的话一般默认以,/bin/sh,执行,shell,脚本,22,3,、,Shell,的一般结构,shell,类型,函数,主过程,一般模板,abc.sh,#!/bin/bash shell,类型,#a simple shell script example,#a function,funciton sayhello(),函数,echo Enter Your name:,read name,读取来自键盘输入的变量,echo Hello $name,echo programme starts here.,主过程,sayhello,echo programme ends.,23,1,、注释符,#,除了,#!/bin/bash,里的,#,特殊,2,、美元符,$,变量符。与反斜杠转义符相反,使其后的普通字符作为变量名,如,$a,表示变量,a,的值。变量字符长度超过,1,个时,用,括起来,3,、单引号,被引起的字符全部做普通字符,即全部原样,echo my $SHELL,二、Shell中的特殊符号,24,4,、双引号,引号内的内容,除,$,、转义符,、倒引号,这三个保留特殊功能,其他字符均做普通字符。,5,、倒引号,(,数字,1,键旁边的那个键),引号内的字符串当做,shell,命令行解释执行,得到的结果取代整个倒引号括起来的部分。,pwd,即,pwd,命令的执行结果,$LOGNAME,系统变量,25,练习一下:区别下面几句,echo my home is $HOME,echo “my home is $HOME”,echo my home is $HOME,echo “my home is pwd”,echo my home is pwd,用于括起来,shell,命令,用于原样显示,26,6.,反斜线,反斜线是转义字符,它能把特殊字符变成普通字符。在某个字符前面利用反斜杠(,)能够阻止,shell,把后面的字符解释为特殊字符。,例,4,:,yuqunyuqun $echo “Filename is N0$*”,Filename is N0$*,注意:在单引号括起来的字符串中,反斜线也成为普通字符,而失去转义字符功能。,27,三、变量,shell,变量 可以保存如路径名、文件名或者一个数字,本地变量 局部变量只在创建它们的,Shell,中使用,可以在,shell,程序内任意使用和修改它们。,环境变量 可以在创建它们的,Shell,及其派生出来的任意子程序中使用。有些变量是用户创建的,其他的则是专用的(比如,PATH,、,HOME),。是系统环境的一部分,不必去定义它们,可以在,shell,程序中使用它们 。还能在,shell,中加以修改。,内部变量 由系统提供的。与环境变量不同,但用户不能修改它们。,28,本地变量和环境变量的对比,29,1,、本地变量(局部变量、用户变量),本地变量 在用户现在的,shell,生命期的脚本中使用,变量名,=,值,注意:,(,1,)等号两边不可以有空格,(,2,)取值包含空格,必须用双引号括起来,(,3,),Shell,变量可以用大小写字母,区分大小写,30,变量的声明和使用,(,1,)变量是弱类型的(不用声明类型),(,2,)变量声明及赋值格式,变量,=,值,(等号两边不能有空格),(,3,)变量的引用,$,变量名,$,变量名,变量名为,1,个字符时建议使用方式一,多余一个字符时建议使用方式二,举例,: $a,$abc,31,显示变量,echo,命令可以显示单个变量取值,变量名前加,$,echo $Name,echo $name,echo $nameare,echo $name are,输出引用变量时加,比较好,32,清除变量,unset,变量名,举例:,echo $name,unset name,(,注意:,name,前没有,$),显示本地所有变量,set,33,设置只读变量,设置变量时,不想再改变其值,可以将之设为只读变量,变量名,=,值,readonly,变量名,34,2,、环境变量,环境变量用于所有用户进程(通常称为子进程)。登陆进程称为父进程,通过,pstree,可以查看,环境变量可以用于所有子程序,着包括编辑器、脚本和应用,举例:,vi a.sh,#!/bin/bash,#,检测环境变量,echo ,家目录是,$HOME,环境变量可以在命令行中设置,但用户注销时这些值将丢失,环境变量均为大写,必须用,export,命令导出,35,设置环境变量,variable-name=value,export variable-name(,环境变量名大写,),显示环境变量,env,可以看到所有的环境变量,echo $,环境变量名 (显示一个变量),清除环境变量,unset,环境变量名,36,HOME,: 代表使用者的家目录。,cd ,去到使用者的家目录 或者利用,cd,就可以直接回到使用者家目录了。,PS1,:,shell,的主提示符,SHELL,: 目前这个环境使用的,SHELL,是哪个程序? 如果是,bash,的话,预设是,/bin/bash,PWD,:用户当前工作目录的路径。它指出用户目前在,Linux,文件系统中处在什么位置。它是由,Linux,自动设置的,HISTSIZE,: 这个与“历史命令”有关,曾经下达过的指令可以被系统记录下来,而记录的,“,数目”则是由这个值来设定的。,ENV,: 这个使用者所使用的个性化环境设置文件的读取文件。,MAIL,: 当我们使用,mail,这个指令在收信时,系统会去读取的邮件信箱文件 (,mailbox),。,PATH,: 就是执行文件搜寻的路径,目录与目录中间以冒号,(:),分隔, 由于文件的搜寻是依序由,PATH,的变量内的目录来查询,所以,目录的顺序也是重要的喔。,LANG,: 语系文件,很多数据都会用到他,当出现编码错误的时候往往需要设置它,中文编码是,zh_CN.UTF8,37,PATH示例,举例:配置,java,环境变量可使任何目录都能执行,javac,命令,(,1,)需要配置,Java,环境变量,JAVA_HOME(JDK,存放的路径),CLASSPATH,(字节码的位置,让,JVM,知道要运行的类的字节码放在哪),PATH (,让,OS,找到,javac,等命令的存放的位置),(,2,)在,Linux,下配置它们,打开终端,vi .bash_profile,在配置文件中追加内容,JAVA_HOME=JDK,存放位置,CLASSPATH=.(,当前目录),PATH=$JAVA_HOME/BIN:$PATH(,不覆盖原来的内容,追加),export JAVA_HOME CLASSPATH PATH,保存,让配置起作用(,source .bash_profile,或者注销,),38,让环境变量的修改在退出,shell,再次登录时仍有效,需要在相关配置文件中修改,Bash,的初始化文件有:,/etc/profile,、,/.bash_profile,、,/.bash_login,、,/.profile,、,/.bashrc,、,/etc/bashrc,/etc/profile,/.bash_profile,/.bashrc,/etc/bashrc,/.bash_login,/.profile,39,/etc/profile,存放一些全局(共有)变量,不管哪个用户,登录时都会读取该文件。通常设置一些,Shell,变量,PATH,USER,HOSTNAME,和,HISTSIZE,等,/.bash_profile:,每个用户都可使用该文件输入专用于自己使用的,shell,信息,当用户登录时,该文件仅仅执行一次,!,默认情况下,他设置一些环境变量,执行用户的,.bashrc,文件,.,/.bashrc:,该文件包含专用于你的,bash shell,的,bash,信息,当登录时以及每次打开新的,shell,时,该该文件被读取,.,/etc/bashrc:,为每一个运行,bash shell,的用户执行此文件,.,当,bash shell,被打开时,该文件被读取,.,40,上述配置文件的作用,1,)登录,Linux,先启动系统配置文件,/etc/profile,,并从,/etc/profile.d,目录的配置文件中搜集,shell,的设置,为系统的,每个用户,设置环境信息。,2,)用户配置文件,/.bash_profile,,每个用户,专用于自己使用,的,shell,信息,仅用户,登录时执行一次,!,默认情况下,此文件通过脚本执行同目录下用户的,.bashrc,文件。,3,),/.bashrc,文件包含专用于用户,bash shell,的,bash,信息,登录及每次打开新的,shell,时都会执行,。里面又会调用,/etc/bashrc,41,设置用户自己的环境变量,在,/home/user/.bash_profile,中定义下句,会怎样?,alias la=ls a|grep “.*”,答:,user,下次再登陆,其,shell,会自动建立一个别名命令,la,,功能为查看当前目录下名字以,.,开头的文件。,写在,/.bash_profile,中,需重新登录才能有效。除非运行,source .bash_profile,使其立即有效。,写在,/.bashrc,中,则打开新的终端中就有效,区别:,bash_profile,只在会话开始的时候读取一次,而,bashrc,则每次打开终端时都会读取,按照传统,定义的变量如,PATH,放到,.bash_profile,中,而像别名函数等放在,.bashrc,中,但是,.bash_profile,先于,.bashrc,读取内容,也可全放入,.bashrc,中,习惯用各自的配置文件,编辑不需要,root,权限,42,3,、内部变量,内部变量是,Linux,所提供的一种特殊类型的变量,这类变量在程序中用来作出判断。在,shell,程序内这类变量的值是不能修改的。,部分内部变量是:,$# ,传送给,shell,程序的位置参数的数量,$?,最后命令的完成码或者在,shell,程序内部执行的,shell,程序(返回值),$0shell,程序的名称,$*,调用,shell,程序时所传送的全部参数的单字符串,,“,参数,1”“,参数,2”,形式保存的参数,43,$“,参数,1”“,参数,2”,形式保存的参数,$n,第,n,个参数,$,本程序的,PID,$!,上一个命令的,PID,44,使用,shell,预定义变量的脚本举例,45,4,位置参数(,1,),位置参数及引用,可以编写一个,shell,脚本,当从命令行或者从其他,shell,脚本中调用它的时候,这个脚本接收若干参数。这些选项是通过,Linux,作为位置参数(,positional parameter,)提供给,shell,程序的。在,shell,脚本中应有变量,接收实参,这类变量的名称很特别,分别是,1,,,2,,,3,,,,这类变量称为位置变量。位置参数,1,存放在位置变量,1,中,位置参数,2,存放位置变量,2,中,,,在程序中可以使用,$1,,,$2,,,来访问,,举例:,46,(,2,) 用,set,命令为位置参数赋值,在,shell,程序中可以利用,set,命令为位置参数赋值或重新赋值。,一般格式:,set ,参数表,说明:该命令后面无参数时,将显示系统中的系统变量的值;如果有参数将分别给位置参数赋值。,47,四、变量表达式,1,、条件判断命令,test,test n1 -,参数,n2,(或,参数 表达式),真返回,0,,假返回,1,。,(,1,)整数,比较运算符见右表,test 1,lt,4,#,判断,10,4,、其他参数,-a,逻辑与,-o,逻辑或,!逻辑非,51,3、控制流程,shell,运算符和,C,语言基本类似,也有分支、循环流程控制。,简单举例,后面例子涉及的命令,seq,命令:产生,1-9,的数字序列,比如,seq 1 4,expr,命令:对表达式求值,直接求值命令:对被括起来的表达式求值,52,表达式求值:,$ expr 1 + 3,$ expr 2 1,$ expr 1 * 3,使用*要加转义符,$ echo expr 1 + 3,注意:表达式中,数字和运算符指教要有空格,出现在语句中要加反引号,53,1,)分支结构,if,分支,if, $# -eq 0 ,then,echo “,输入了,0,个参数”,elif, $# -lt 1 ,then echo “,输入了多个参数”,else echo “,输入了,1,个参数”,fi,case,case “$#”,in,0,),echo “,输入了,0,个参数,”,;,1,),echo “,输入了,1,个参数”,;,*,),echo “,输入了多个参数”,;,esac,每个分支条件后必须以两个分号结尾,54,2,)循环结构,for,例子,输出,100,内,10,的倍数,for i in seq 1 9,do,echo expr $i * 10,done,或写,echo $(expr $i * 10),乘号前加转义符,,与数字间要有空格。,55,read,变量,1 ,变量,2 ,可以从键盘上读取多个变量的值,用户输入数据时,以空格或者,Tab,键作为分隔。,如果输入的数据个数不够,则从左到右对应赋值,没有输入的变量为空;,如果输入的数据个数超了,则从左到右对应赋值,最后一个变量被赋予剩余的所有数据。,56,read a b,for i in seq $a $b,do,echo expr $i * 10,done,输出,a,到,b,序列数各数的,10,倍数,57,while,例子,求,1,到,100,的和,i=1,sum=0,while $i le 100 ,do,sum=$sum+$i,i=$i+1,done,echo $sum, ,:直接求值命令,58,五 命令结果重定向,1stdout,标准输出,2stderr,标准错误,输出重定向到文件,file,,终端上只能看到标准错误:,#,命令,file,错误重定向到文件,file,,终端上只能看到标准输出:,#,命令,2file,标准输出和标准错误都重定向到,file,,终端上看不到任何信息:,#,命令,file,2&1,(等于,#,命令,1file,2&1,),59,屏蔽命令任何输出的:,/dev/null 2&1,cp /etc/my.conf,/dev/null 2&1,/dev/null,空设备,此句命令的结果是:,cp,命令没有目标文件,应该输出错误。,2&1,表示错误重定向指向标准输出。,/dev/null,又使标准输出重定向到空,就是不要输出信息,即:一个错误的命令执行,什么功能都不实现,且没有任何信息或错误提示输出。,60,1,),command file 2file,2,),command file 2&1,有什么区别?,1,)的写法,stdout,和,stderr,都直接送到,file,中,会出现两个同抢占,file,的管道,,file,会被打开两次,stdout,和,stderr,输出的信息会互相覆盖。,2,)的写法将,stdout,直接送向,file, stderr,继承,1,的管道后,再被送往,file,此时,file,只被打开了一次,也只使用了一个管道,FD1,它包括了,stdout,和,stderr,的内容。 从,IO,效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写,shell,脚本的时候,常用,command file 2&1,这样的写法。,還可以:,命令 2file &2,命令 &/dev/null,61,* 有趣的,IO Redirection,$ cat file,文件內容会被洗掉,$ cat file,此处会没有内容,stdout,、,stderr,的管道先准备好才会从,stdin,读内容, file,会先清空,file,,然後才读进,/dev/nulldosleep 300doneecho “$user has logged on!”fi,说明:(,1,)如果没有从命令行输入用户名,则测试,$# -ne 1,为“真”,显示用法提示信息。(,2,)程序中,until,语句的,expression,(循环条件)是,who|grep “$user”,命令执行的返回码,如果没有找到指定的用户名,返回码为非,0,(为“假”),则用,sleep,命令暂停执行程序,5,分钟;找到后返回码为,0,(为“真”),则终止循环并显示该用户已经登录的信息。(,3,)采用重定向到,/dev/null,空文件的目的是不显示查找到的用户其他信息。,每隔,5,分钟检查指定的用户是否登录系统,71,实验8.1,关键代码提示,1)checkuser,a=cut -d: -f1 /etc/passwd | grep -c “$1$”,if $a -gt 0 ,2)printnumber,判断参数是否是数,a=$(echo $1|bc 2/dev/dull),if $a != $1 ,$1,参数不是数,bc,计算器,进制转换命令,可自学:,4,个,linux,筛选数据常用工具,cut, grep, awk, sed,72,截取小数点前后的子串,$,变量名,匹配模式,截掉匹配子串后剩余字符串是结果,str1=$a%.*,str2=$a#*.,#,从左向右,,%,从右向左,搜索最长匹配符号写两次,最短匹配写,1,次,$MYVAR=foodforthought.jpg$echo$MYVAR#*forthought.jpg$echo$MYVAR#*foodforthought.jpg,$MYFOO=chickensoup.tar.gz$echo$MYFOO%.*chickensoup$echo$MYFOO%.*chickensoup.tar,指定字符偏移和长度截出子串,$EXCLAIM=cowabunga,$echo$EXCLAIM:0:3cow,#,从第一个字符开始,截,3,个字符,$echo$EXCLAIM:3:7 abunga,#,从第四个字符开始,截,7,个字符,作 业,练习本课件给出的例子。熟练,vi,编辑器,熟悉脚本语法。,实验,8.1,74,更多练习,练习,vi,编辑器的使用并熟练掌握它。,简要说明,shell,的功能,常用的,shell,有哪些?,查看系统,PATH,环境变量,了解可执行文件的路径信息,如何实现用系统当前日期和时间作为第一级提示符?,如何实现用,alias,命令将,cp,命令设置别名为,copy,?,简要说明,shell,程序的结构。,简要说明运行,shell,脚本程序的几种方法。,如果你希望编写的脚本程序在任何一个目录下都能直接执行(输入程序名后回车),则应该如何处理?,75,变量的赋值方式有几种?各用在哪些场合?,写出几个与命令行参数有关的变量并简要说明如何在脚本中引用。,以下,shell,脚本文件存在什么错误?,echo what month is this?,read $month,echo $ month is as good a month as any.,编写一个,shell,程序,它输出一个,1,到,10,之间的平方和立方对照表。,编写一个名为,reverse,的,shell,程序,将输入的若干个命令行参数以逆序输出。,用其它循环语句编程实现本题的功能。,76,编写一个,shell,脚本程序,它能根据输入的命令行参数采取不同的动作:如果是目录,则列出该目录中的文件;如果是可执行的文件,则用,shell,执行之;如果是可读的文件,则分屏显示其内容。,编写一个求平方和求立方的函数,在,shell,程序中调用它实现第十四题的功能。,编写一个弹出式菜单的,shell,程序并实现其简单的菜单功能:,*,MENU * 1.copy 2.rename * 3.remove 4.find * 5.exit * *,即用户按下数字,1,,则提示用户输入源和目的文件名后执行复制;输入数字,2,,则提示用户输入要更名的文件或目录名后执行更名操作;输入数字,3,和,4,分别执行删除和查找操作;输入数字,5,,则退出该菜单,shell,程序的执行。,77,附:vi的常用命令,命令模式的常用命令,命令,说明,功能键,命令,说明,功能键,h,向左移一个字符,Ctrl+f,(,b),向后,(,前)翻一页,PageDown(Pageup),l,向右移一个字符,H,移至窗口的第一行,j,向上移一个字符,M,移至窗口的中间行,k,向下移一个字符,L,移至窗口的最后一行,0,移动到该行首,Home,G,移至文件的最后行,$,移动到该行之末,End,nG,移至文件第,n,行,78,命令,说明,命令,说明,x,删除光标后的字符,s,删除光标所在字符,并进入输入状态,X,删除光标前的字符,S,删除光标所在行,并进入输入状态,dd,删除光标所在的行,u,恢复刚才被修改的文本,ndd,删除包括光标所在行的,n,行文本,U,恢复光标所在行的所有修改,r,修改光标所在字符,.,重复上一次命令操作,R,进入替换状态,直至按,Esc,回到指令模式状态,删除与修改,79,命令,说明,命令,说明,Y,复制到当前行的编辑缓冲区,p,将编辑缓冲区的内容粘贴到光标后的一行,nY,复制当前行开始的,n,行至编辑缓冲区,P,将编辑缓冲区的内容粘贴到光标前的一行,80,末行命令模式的常用命令,命令,说明,命令,说明,:q,结束编辑,:x,若有修改存盘退出,:q!,强制离开,vi,,放弃存盘,:e filename,编辑名为,filename,的文件,:w,存盘,:set nu,显示行号,:w filename,将编辑内容为名,filename,的文件,:set nonu,不显示行号,:wq,存盘并退出,/exp,往前查找字符串,exp,ZZ,存盘并退出,?exp,往后查找字符串,exp,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库


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

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


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