收藏 分销(赏)

shell脚本教程详细解很好PPT课件.ppt

上传人:可**** 文档编号:735361 上传时间:2024-02-27 格式:PPT 页数:80 大小:410KB
下载 相关 举报
shell脚本教程详细解很好PPT课件.ppt_第1页
第1页 / 共80页
shell脚本教程详细解很好PPT课件.ppt_第2页
第2页 / 共80页
shell脚本教程详细解很好PPT课件.ppt_第3页
第3页 / 共80页
shell脚本教程详细解很好PPT课件.ppt_第4页
第4页 / 共80页
shell脚本教程详细解很好PPT课件.ppt_第5页
第5页 / 共80页
点击查看更多>>
资源描述

1、College of Information Science and Engineering Shandong Agricultural University SHELL脚本编程1 1.shellshell脚本能提高用户操作和管理员进行系统管理的效率,一般步骤1.1.编辑器编写脚本程序2.2.shellshell做解释程序,非交互地执行脚本,两种执行方式:1.1.用shsh命令执行脚本文件2.2.给脚本文件添加执行权限,用././命令执行2 2.HELLO WORLD!HELLO WORLD!1.1.vi hello.shvi hello.shn按i i进入插入模式n输入echo“hello

2、world!”echo“hello world!”n:输入wqwq保存退出2.2.sh hello.shsh hello.sh或者chmod 755 hello.shchmod 755 hello.sh./hello.sh./hello.sh3 3.一、VIVI编辑器1.1.VIVI的三种工作模式2.2.VIVI的启动3.3.VIVI的退出4.4.VIVI的文本编辑5.5.VIVI命令模式下的操作6.6.VIVI行命令模式下的操作 VI 编辑器的使用4 4.n系统配置文件、shellshell脚本文件等都是文本文件,编辑它们都要使用文本编辑器。n在LinuxLinux系统中有多种文本编辑器,其

3、中既有字符界面如的VIVI、EMACASEMACAS等,也有图形界面的如“附件”菜单下的“文本编辑器(geditgedit)”等,用户可以根据自己的喜好选择使用。n学习vivi的方法:vivi的命令太多且难以记忆,而实际上真正经常使用的命令并不是太多,只要掌握几个关键的并加以适当练习很快就上手使用vivi。5 5.为什么选择VIVIn就使用的方便性而言,有比vivi更好的编辑器,还要图形化的editedit,为什么还要用vivi?p历史久远,功能强大,在有些情况下系统中能够找到的编辑器只有vivi;p用户一旦熟悉后,使用非常方便;系统管理员使用正则表达式可以极大地提高工作效率,而学习vivi也

4、是掌握正则表达式的有效途径。n由于vivi的版本不同,其命令格式、功能和用法会有一些差别。ShellShell中执行vivi命令,RedHatRedHat系统实际上是执行vimvim,它是传统vivi的增强版本6 6.1 1、VIVI的三种工作模式n命令模式p启动VIVI默认进入命令模式。此时界面不能编辑,只能接受命令(键入的命令看不到)p文件的保存,退出,文本的删除、复制、搜索等操作n输入模式p编辑模式 p命令模式下用i(sert),a(ppend)i(sert),a(ppend),o,so,s等均可进入该模式。按escesc返回命令模式n行编辑模式p实际上也是命令模式的一种,在命令模式下输

5、入冒号进入一个命令行,可显示地输入命令(所以也有些书认为是两种工作模式)。三种模式可自由切换,一般切换命令就是操作的英文单词的首字母7 7.2 2、VIVI的启动n启动命令:vi my.txtvi my.txtn如果文件存在,则vivi显示文件内容并等待用户的命令。n如果指定的文件不存在,则vivi将告知用户这是未命名的文件,并进入一个空白的界面。n启动vivi时都是默认处于命令模式。用户必须使用命令切换到文本输入模式才能进行输入编辑,或者可执行删除、复制等编辑命令。vi vi R file_nameR file_name,以只读方式打开文件8 8.3 3、VIVI的退出n冒号进命令行模式下:

6、:q!不存档强制退出。:w 保存但不退出,w w(rite)后可加所要存档的文档名。:wq 存档后退出。p命令模式下按zz,功能与:wq 相同。p:x 与:wq相同n命令模式:ZZZZ、ZQZQ保存/不保存退出9 9.4 4、怎么编辑必须从命令模式转入插入模式才能进行输入编辑,可用命令有:n新增(append)pa:从光标所在位置后面开始新增资料pA:从光标所在行最后面的地方开始新增资料。n插入(insert)pi:从光标所在位置前面开始插入资料pI:从光标所在行的第一个非空白字元前面开始插入资料。n开始(open)po:在光标所在行下新增一列并进入输入模式。O:在光标所在行上方新增一列并进入

7、输入模式。冒号进入行命令模式,输入set nu可设置vi显示行号1010.5、命令模式下的操作:删除与修改nx:删除光标所在字符ndw dw 删除一个单词ndd:删除光标所在的行ns s:删除光标所在字节,并进入输入模式#表示数字n#x#x 删除几个字符,如3x3xn#dw#dw 删除几个单词,如3dw3dw表示删除三个单词n#dd#dd 删除多个行,如3dd 3dd 表示删除光标行及光标的下两行nd$d$删除光标到行尾的内容d d光标键:左:删除光标前面的字符;右:删除光标所在的字符;上:将当前行与上一行删除;下:当前行与下一行删除ndnd上下光标键:删除当前行之上、下的几行文本(包括当前行

8、)u:恢复刚才被修改的文本 U:恢复光标所在行的所有修改.:重复上一次命令的操作1111.命令模式下的操作:文本复制、粘贴n复制命令:y ypyy:yy:复制整行pyw:yw:复制光标所在的单词pnywnyw:复制包括光标所在的n n个单词pnyy:nyy:复制包括当前行在内的n n行n粘贴命令pP Pn光标移动ph h、j j、k k、l lpnGnG:移动到底n n行行首1212.6 6、行命令模式下的操作:字符串的查找、替换n:/string:/string搜索指定的字符串。p按键n n:继续进行搜索 如果写的是斜杠(/):按n n会从当前位置向后查找;如果写的是问号(?),按n n键则

9、从当前位置向前查找n查找且替换p:%s /SEARCH/REPLACE:%s /SEARCH/REPLACE把文档中所有SEARCHSEARCH替换成REPLACEREPLACE;p:#,#s/SEARCH/REPLACE/g:#,#s/SEARCH/REPLACE/g 号表示数字,表示从多少行到多少行,把SEARCHSEARCH替换成REPLACEREPLACE;p:s /SEARCH/REPLACE/g:s /SEARCH/REPLACE/g 把当前光标所在行中的SEARCHSEARCH单词,替换成REPLACEREPLACE,并把所有SEARCHSEARCH高亮显示1313.7 7、设置

10、vivi 全局的配置文件位于/etc/vim/vimrc(/etc/vim/vimrc(或者/etc/vimrc)/etc/vimrc)也可以拥有自己独立的配置文件,配置文件位“/.vimrc”/.vimrc”,如果没有该文件,也可以直接用如下命令创建并编辑比如:set nu set nu 显示行号set ruler set ruler 显示光标位置set undolevel set undolevel 显示光标位置set smartindent set smartindent 智能缩进syntax on(syntax on(或syn on)syn on)语法高亮1414.文本输入状态命令状态

11、行编辑状态按ESC键按A,I,S,C,O等命令按“:”键执行非退出命令,如w三种模式间的转换关系1515.案例练习n1.1.请在 /tmp/tmp 这个目录下建立一个名为 vitest vitest 的目录;n2.2.进入 vitest vitest 这个目录当中;n3.3.将 /etc/man.config/etc/man.config 拷贝到本目录底下n4.4.使用 vi vi 开启本目录下的 man.config man.config 这个档案;n5.5.在 vi vi 中设定一下行号;n6.6.移动到第 58 58 行,向右移动 40 40 个字符,请问您看到的双引号内是什么目录?n7

12、.7.移动到第一行,并且向下搜寻一下“bzip2”bzip2”这个字符串,请问他在第几行?n8.8.接着下来,我要将 50 50 到 100 100 行之间的 man man 改为 MANMAN,并且一个一个挑选是否需要修改,如何下达指令?n9.9.修改完之后,突然反悔了,要全部复原,有哪些方法?n10.10.我要复制 51 51 到 60 60 行这十行的内容,并且贴到最后一行之后;n11.11.删除 11 11 到 30 30 行之间的 20 20 行;n12.12.将这个文件另存成一个 man.test.config man.test.config 的文件;n13.13.到第 29 29

13、 行,并且删除 15 15 个字符;n14.14.储存后离开1616.n1.mkdir/tmp/vitest1.mkdir/tmp/vitestn2.cd/tmp/vitest 2.cd/tmp/vitest n3.cp/etc/man.config.3.cp/etc/man.config.n4.vi man.config 4.vi man.config n5.:set nu 5.:set nu n6.6.先按下 58G 58G 再按下 40 40 会看到/dir/bin/foo /dir/bin/foo 这个字样在双引号内;n7.7.先执行 1G 1G 或 gg gg 后,直接输入/bzip

14、2/bzip2n8.8.直接执行:50,100s/man/MAN/gc :50,100s/man/MAN/gc 即可n9.(1)9.(1)简单的方法可以一直按 u u 恢复到原始状态,(2)(2)使用不储存离开 :q!:q!之后,再重新读取一次该文件;n10.51G 10.51G 然后再 10yy 10yy 之后按下 G G 到最后一行,再p p粘贴1010行 n11.11G 11.11G 之后,再给他 20dd 20dd即可删除 20 20 行了;n12.:w man.test.config 12.:w man.test.config n13.29G 13.29G 之后,再给他 15x 15

15、x 即可删除 15 15 个字符;n14.:wq!14.:wq!1717.二、SHELLSHELL变量与语法1.1.ShellShell概述2.2.shellshell变量和符号3.3.shellshell控制流程语法4.4.shellshell中的输出重定向5.5.脚本实例 SHELL变量与语法1818.1 1、shellshell的基本元素(1 1)#!/bin/bash/bin/bash 必须的,指出shellshell的类型(2 2)#注释(3 3)变量(4 4)控制一、ShellShell概述一个shell脚本vi clearup.sh#!/bin/bash#this is clea

16、rcd/var/logcat/dev/null/var/log/messages /dev/null Linux中的无限大的垃圾回收站echo Logs cleaned up.1919.2 2、一般步骤:(1 1)编辑文件(2 2)保存文件(3 3)将文件赋予可执行的权限(4 4)运行及排错2020.注意:1.1.一般以.sh.sh为文件后缀。没有也能执行。2.2.常见的两种执行方式n././文件名 在当前目录下写明路径执行,要求文件必须有执行权限,如chmod 755 run.shchmod 755 run.sh./run.sh./run.shnsh sh 文件名sh run.shsh ru

17、n.sh3.3.文件开头指定一个或多个解释脚本程序的shellshell,如#!/bin/bash#!/bin/bashn如果指定,注意/bin/bin不要漏了“/”/”,否则用././方式执行会找不到路径。n不指定的话一般默认以/bin/sh/bin/sh执行shellshell脚本2121.3、Shell的一般结构 shell 类型 函数 主过程一般模板 abc.sh#!/bin/bash shell类型#a simple shell script example#a functionfunciton sayhello()函数echo Enter Your name:read name 读

18、取来自键盘输入的变量echo Hello$nameecho programme starts here.主过程sayhelloecho programme ends.2222.1 1、注释符#除了#!/bin/bash#!/bin/bash里的#特殊2 2、美元符$变量符。与反斜杠转义符相反,使其后的普通字符作为变量名,如$a$a表示变量a a的值。变量字符长度超过1 1个时,用括起来3 3、单引号被引起的字符全部做普通字符,即全部原样echo my$SHELLecho my$SHELL二、ShellShell中的特殊符号2323.4 4、双引号引号内的内容,除$、转义符、倒引号 这三个保留特

19、殊功能,其他字符均做普通字符。5 5、倒引号(数字1 1键旁边的那个键)引号内的字符串当做shellshell命令行解释执行,得到的结果取代整个倒引号括起来的部分。pwd即pwd命令的执行结果$LOGNAME系统变量2424.练习一下:区别下面几句necho my home is$HOMEecho my home is$HOMEnecho“my home is$HOME”echo“my home is$HOME”necho my home is$HOMEecho my home is$HOMEnecho“my home is pwd”echo“my home is pwd”necho my h

20、ome is pwdecho my home is pwd 用于括起来shell命令 用于原样显示2525.6.6.反斜线 反斜线是转义字符,它能把特殊字符变成普通字符。在某个字符前面利用反斜杠()能够阻止shellshell把后面的字符解释为特殊字符。例4 4:yuqunyuqun$echo “Filename is N0$*”yuqunyuqun$echo “Filename is N0$*”Filename is N0$*Filename is N0$*注意:在单引号括起来的字符串中,反斜线也成为普通字符,而失去转义字符功能。2626.三、变量shell shell 变量 可以保存如路径

21、名、文件名或者一个数字n本地变量 局部变量只在创建它们的ShellShell中使用,可以在shellshell程序内任意使用和修改它们。n环境变量 可以在创建它们的ShellShell及其派生出来的任意子程序中使用。有些变量是用户创建的,其他的则是专用的(比如PATHPATH、HOME)HOME)。是系统环境的一部分,不必去定义它们,可以在shellshell程序中使用它们 。还能在shellshell中加以修改。n内部变量 由系统提供的。与环境变量不同,但用户不能修改它们。2727.本地变量和环境变量的对比2828.1 1、本地变量(局部变量、用户变量)u本地变量 在用户现在的shell生命

22、期的脚本中使用u 变量名=值注意:(1)等号两边不可以有空格 (2)取值包含空格,必须用双引号括起来 (3)Shell变量可以用大小写字母,区分大小写2929.u变量的声明和使用(1 1)变量是弱类型的(不用声明类型)(2 2)变量声明及赋值格式 变量=值(等号两边不能有空格)(3 3)变量的引用$变量名$变量名 变量名为1 1个字符时建议使用方式一,多余一个字符时建议使用方式二 举例:$a:$a$abc$abc 3030.u显示变量 echoecho命令可以显示单个变量取值,变量名前加$echo$Nameecho$nameecho$nameareecho$name are输出引用变量时加比较

23、好3131.u清除变量 unset unset 变量名举例:echo$nameecho$name unset name unset name(注意:namename前没有$)$)显示本地所有变量 setset3232.u设置只读变量 设置变量时,不想再改变其值,可以将之设为只读变量 变量名=值 readonly 变量名3333.2 2、环境变量环境变量用于所有用户进程(通常称为子进程)。登陆进程称为父进程,通过pstree可以查看u环境变量可以用于所有子程序,着包括编辑器、脚本和应用 举例:vi a.sh#!/bin/bash#检测环境变量 echo 家目录是$HOMEu 环境变量可以在命令行

24、中设置,但用户注销时这些值将丢失u 环境变量均为大写u 必须用export命令导出3434.n设置环境变量 p variable-name=valuevariable-name=valuep export variable-name(export variable-name(环境变量名大写)n显示环境变量p env env 可以看到所有的环境变量p echo$echo$环境变量名 (显示一个变量)n清除环境变量p unset unset 环境变量名3535.uHOME HOME:代表使用者的家目录。cd cd 去到使用者的家目录 或者利用 cd cd 就可以直接回到使用者家目录了。uPS1PS

25、1:shellshell的主提示符u SHELL SHELL:目前这个环境使用的 SHELL SHELL 是哪个程序?如果是 bash bash 的话,预设是 /bin/bash/bin/bashuPWDPWD:用户当前工作目录的路径。它指出用户目前在LinuxLinux文件系统中处在什么位置。它是由LinuxLinux自动设置的u HISTSIZE HISTSIZE:这个与“历史命令”有关,曾经下达过的指令可以被系统记录下来,而记录的“数目”则是由这个值来设定的。u ENV ENV:这个使用者所使用的个性化环境设置文件的读取文件。uMAIL MAIL:当我们使用 mail mail 这个指令

26、在收信时,系统会去读取的邮件信箱文件 (mailbox)mailbox)。u PATH PATH:就是执行文件搜寻的路径,目录与目录中间以冒号(:)(:)分隔,由于文件的搜寻是依序由 PATH PATH 的变量内的目录来查询,所以,目录的顺序也是重要的喔。uLANG LANG:语系文件,很多数据都会用到他,当出现编码错误的时候往往需要设置它,中文编码是zh_CN.UTF8zh_CN.UTF83636.PATHPATH示例n举例:配置javajava环境变量可使任何目录都能执行javacjavac命令(1 1)需要配置JavaJava环境变量u JAVA_HOME(JDKJAVA_HOME(JD

27、K存放的路径)u CLASSPATH CLASSPATH(字节码的位置,让JVMJVM知道要运行的类的字节码放在哪)u PATH(PATH(让OSOS找到javacjavac等命令的存放的位置)(2 2)在LinuxLinux下配置它们u 打开终端u vi.bash_profilevi.bash_profileu 在配置文件中追加内容 JAVA_HOME=JDKJAVA_HOME=JDK存放位置 CLASSPATH=.(CLASSPATH=.(当前目录)PATH=$JAVA_HOME/BIN:$PATH(PATH=$JAVA_HOME/BIN:$PATH(不覆盖原来的内容,追加)export

28、JAVA_HOME CLASSPATH PATHexport JAVA_HOME CLASSPATH PATHu 保存,让配置起作用(source.bash_profilesource.bash_profile或者注销)3737.让环境变量的修改在退出shellshell再次登录时仍有效,需要在相关配置文件中修改BashBash的初始化文件有:/etc/profile/etc/profile、/.bash_profile/.bash_profile、/.bash_login/.bash_login、/.profile/.profile、/.bashrc/.bashrc、/etc/bashrc/

29、etc/bashrc/etc/profile/.bash_profile/.bashrc/etc/bashrc/.bash_login/.profile3838.n/etc/profile/etc/profile 存放一些全局(共有)变量,不管哪个用户,登录时都会读取该文件。通常设置一些ShellShell变量PATH,USER,HOSTNAMEPATH,USER,HOSTNAME和HISTSIZEHISTSIZE等n/.bash_profile:/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shellshell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设

30、置一些环境变量,执行用户的.bashrc.bashrc文件.n/.bashrc:/.bashrc:该文件包含专用于你的bash shellbash shell的bashbash信息,当登录时以及每次打开新的shellshell时,该该文件被读取.n/etc/bashrc:/etc/bashrc:为每一个运行bash shellbash shell的用户执行此文件.当bash shellbash shell被打开时,该文件被读取.3939.上述配置文件的作用1 1)登录LinuxLinux先启动系统配置文件/etc/profile/etc/profile,并从/etc/profile.d/etc

31、/profile.d目录的配置文件中搜集shellshell的设置,为系统的每个用户设置环境信息。2 2)用户配置文件/.bash_profile/.bash_profile,每个用户专用于自己使用的shellshell信息,仅用户登录时执行一次!默认情况下,此文件通过脚本执行同目录下用户的.bashrc.bashrc文件。3 3)/.bashrc/.bashrc文件包含专用于用户bash shellbash shell的bashbash信息,登录及每次打开新的shellshell时都会执行。里面又会调用/etc/bashrc/etc/bashrc4040.设置用户自己的环境变量n在/home

32、/user/.bash_profile/home/user/.bash_profile中定义下句,会怎样?alias la=ls a|grep“.*”alias la=ls a|grep“.*”答:useruser下次再登陆,其shellshell会自动建立一个别名命令lala,功能为查看当前目录下名字以.开头的文件。p写在/.bash_profile/.bash_profile中,需重新登录才能有效。除非运行source.bash_profilesource.bash_profile使其立即有效。p写在/.bashrc/.bashrc中,则打开新的终端中就有效n区别:bash_profile

33、bash_profile只在会话开始的时候读取一次,而bashrcbashrc则每次打开终端时都会读取n按照传统,定义的变量如PATHPATH放到.bash_profile.bash_profile中,而像别名函数等放在.bashrc.bashrc中,但是.bash_profile.bash_profile先于.bashrc.bashrc读取内容,也可全放入.bashrc.bashrc中习惯用各自的配置文件,编辑不需要root权限4141.3 3、内部变量 内部变量是LinuxLinux所提供的一种特殊类型的变量,这类变量在程序中用来作出判断。在shellshell程序内这类变量的值是不能修改

34、的。部分内部变量是:u$#$#传送给shellshell程序的位置参数的数量u$?$?最后命令的完成码或者在shellshell程序内部执行的shellshell程序(返回值)u$0shell$0shell程序的名称u$*$*调用shellshell程序时所传送的全部参数的单字符串,“参数1”“1”“参数2”2”形式保存的参数4242.u$“参数1”“1”“参数2”2”形式保存的参数u$n$n第n n个参数u$本程序的PIDPIDu$!$!上一个命令的PIDPID4343.使用shellshell预定义变量的脚本举例4444.4 4 位置参数(1 1)位置参数及引用 可以编写一个shellsh

35、ell脚本,当从命令行或者从其他shellshell脚本中调用它的时候,这个脚本接收若干参数。这些选项是通过LinuxLinux作为位置参数(positional parameterpositional parameter)提供给shellshell程序的。在shellshell脚本中应有变量,接收实参,这类变量的名称很特别,分别是1 1,2 2,3 3,这类变量称为位置变量。位置参数1 1存放在位置变量1 1中,位置参数2 2存放位置变量2 2中,在程序中可以使用$1$1,$2$2,来访问,举例:4545.(2 2)用setset命令为位置参数赋值在shellshell程序中可以利用sets

36、et命令为位置参数赋值或重新赋值。一般格式:set set 参数表 说明:该命令后面无参数时,将显示系统中的系统变量的值;如果有参数将分别给位置参数赋值。4646.四、变量表达式1 1、条件判断命令testtesttest n1-test n1-参数 n2n2(或 参数 表达式)真返回0 0,假返回1 1。(1 1)整数,比较运算符见右表test 1test 1 lt lt 4 4#判断14104 4、其他参数-a-a 逻辑与-o-o 逻辑或!逻辑非5050.3 3、控制流程nshellshell运算符和C C语言基本类似,也有分支、循环流程控制。n简单举例后面例子涉及的命令pseqseq命令

37、:产生1-91-9的数字序列 比如 seq 1 4seq 1 4pexprexpr命令:对表达式求值p直接求值命令:对被括起来的表达式求值5151.表达式求值:$expr 1+3$expr 1+3$expr 2 1$expr 2 1$expr 1*3$expr 1*3 使用*要加转义符$echo expr 1+3$echo expr 1+3注意:表达式中,数字和运算符指教要有空格,出现在语句中要加反引号5252.1 1)分支结构nifif分支if if$#-eq 0$#-eq 0 thenthenecho“echo“输入了0 0个参数”elif elif$#-lt 1$#-lt 1 then

38、echo“then echo“输入了多个参数”else echo“else echo“输入了1 1个参数”fifincasecasecase“$#”case“$#”inin 0 0)echo“echo“输入了0 0个参数”;1 1)echo“echo“输入了1 1个参数”;*)echo“echo“输入了多个参数”;esacesac每个分支条件后必须以两个分号结尾5353.2 2)循环结构nfor for 例子输出100100内1010的倍数for i in seq 1 9for i in seq 1 9dodoecho expr$i*10echo expr$i*10donedone或写 ech

39、o$(expr$i*10)echo$(expr$i*10)n乘号前加转义符,与数字间要有空格。5454.nread read 变量1 1 变量2 2 p可以从键盘上读取多个变量的值,用户输入数据时,以空格或者TabTab键作为分隔。p如果输入的数据个数不够,则从左到右对应赋值,没有输入的变量为空;p如果输入的数据个数超了,则从左到右对应赋值,最后一个变量被赋予剩余的所有数据。5555.read a bread a bfor i in seq$a$bfor i in seq$a$bdodoecho expr$i*10echo expr$i*10donedone输出a a到b b序列数各数的101

40、0倍数5656.nwhilewhile例子求1 1到100100的和i=1i=1sum=0sum=0while$i le 100 while$i le 100 dodosum=$sum+$isum=$sum+$i i=$i+1 i=$i+1donedoneecho$sumecho$sumn:直接求值命令5757.五 命令结果重定向p1 1stdoutstdout标准输出p2 2stderrstderr标准错误n输出重定向到文件filefile,终端上只能看到标准错误:#命令 file filen错误重定向到文件file file,终端上只能看到标准输出:#命令 2file2filen标准输出和

41、标准错误都重定向到filefile,终端上看不到任何信息:#命令 filefile 2&1 2&1(等于#命令 1file1file 2&1 2&1)5858.屏蔽命令任何输出的:/dev/null 2&1cp/etc/my.conf cp/etc/my.conf /dev/null 2&1/dev/null 2&1p/dev/null/dev/null空设备n此句命令的结果是:1.1.cpcp命令没有目标文件,应该输出错误。2.2.2&12&1表示错误重定向指向标准输出。3.3./dev/null/dev/null又使标准输出重定向到空,就是不要输出信息p即:一个错误的命令执行,什么功能都不

42、实现,且没有任何信息或错误提示输出。5959.1 1)command file 2filecommand file 2file2 2)command file 2&1 command file 2&1 n有什么区别?1 1)的写法,stdout,stdout和stderrstderr都直接送到filefile中,会出现两个同抢占filefile的管道,filefile会被打开两次,stdout,stdout和stderrstderr输出的信息会互相覆盖。2 2)的写法将stdoutstdout直接送向file,stderrfile,stderr继承1 1的管道后,再被送往file,file,此

43、时,file,file 只被打开了一次,也只使用了一个管道FD1,FD1,它包括了stdoutstdout和stderrstderr的内容。从IOIO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shellshell脚本的时候,常用command file 2&1 command file 2&1 这样的写法。還可以:命令 2file&2命令&/dev/null6060.*有趣的IO RedirectionIO Redirection$cat file$cat file文件內容会被洗掉$cat file$cat file此处会没有内容n stdout stdout、stderr

44、 stderr 的管道先准备好才会从 stdinstdin读内容n file file 会先清空 filefile,然後才读进 file/dev/nulluntil who|grep“$user”/dev/nulldodosleep 300sleep 300donedoneecho“$user has logged on!”echo“$user has logged on!”fifin说明:(1 1)如果没有从命令行输入用户名,则测试$#-ne 1$#-ne 1为“真”,显示用法提示信息。(2 2)程序中untiluntil语句的expressionexpression(循环条件)是who|g

45、rep“$user”who|grep“$user”命令执行的返回码,如果没有找到指定的用户名,返回码为非0 0(为“假”),则用sleepsleep命令暂停执行程序5 5分钟;找到后返回码为0 0(为“真”),则终止循环并显示该用户已经登录的信息。(3 3)采用重定向到/dev/null/dev/null空文件的目的是不显示查找到的用户其他信息。每隔5 5分钟检查指定的用户是否登录系统7070.实验8.18.1关键代码提示1)checkuser1)checkuserna=cut-d:-f1/etc/passwd|grep-c“$1$”a=cut-d:-f1/etc/passwd|grep-c“

46、$1$”nif$a-gt 0 if$a-gt 0 2)printnumber2)printnumbern判断参数是否是数a=$(echo$1|bc 2/dev/dull)a=$(echo$1|bc 2/dev/dull)if$a!=$1 if$a!=$1$1$1参数不是数pbcbc计算器,进制转换命令可自学:4 4个linuxlinux筛选数据常用工具cut,grepcut,grep,awk,sed,awk,sed 7171.截取小数点前后的子串n$变量名匹配模式 截掉匹配子串后剩余字符串是结果pstr1=$a%.*str1=$a%.*pstr2=$a#*.str2=$a#*.#从左向右,%从

47、右向左搜索最长匹配符号写两次,最短匹配写1 1次n$MYVAR=foodforthought.jpg$MYVAR=foodforthought.jpg$echo$MYVAR#*fo$echo$MYVAR#*forthought.jpgrthought.jpg$echo$MYVAR#*fo$echo$MYVAR#*foodforthought.jpgodforthought.jpgn$MYFOO=chickensoup.tar.gz$MYFOO=chickensoup.tar.gz$echo$MYFOO%.*$echo$MYFOO%.*chickensoupchickensoup$echo$MY

48、FOO%.*$echo$MYFOO%.*chickensoup.tarchickensoup.tarn指定字符偏移和长度截出子串$EXCLAIM=cowabunga$EXCLAIM=cowabunga$echo$EXCLAIM:0:3$echo$EXCLAIM:0:3cowcow#从第一个字符开始,截3 3个字符$echo$EXCLAIM:3:7$echo$EXCLAIM:3:7 abungaabunga#从第四个字符开始,截7 7个字符7272.作 业1.练习本课件给出的例子。熟练vi编辑器,熟悉脚本语法。2.实验8.17373.更多练习1.1.练习vivi编辑器的使用并熟练掌握它。2.2.

49、简要说明shellshell的功能,常用的shellshell有哪些?3.3.查看系统PATHPATH环境变量,了解可执行文件的路径信息4.4.如何实现用系统当前日期和时间作为第一级提示符?5.5.如何实现用aliasalias命令将cpcp命令设置别名为copycopy?6.6.简要说明shellshell程序的结构。7.7.简要说明运行shellshell脚本程序的几种方法。8.8.如果你希望编写的脚本程序在任何一个目录下都能直接执行(输入程序名后回车),则应该如何处理?7474.1.1.变量的赋值方式有几种?各用在哪些场合?2.2.写出几个与命令行参数有关的变量并简要说明如何在脚本中引用

50、。3.3.以下shellshell脚本文件存在什么错误?echo what month is this?echo what month is this?read$monthread$monthecho$month is as good a month as any.echo$month is as good a month as any.4.4.编写一个shellshell程序,它输出一个1 1到1010之间的平方和立方对照表。5.5.编写一个名为reversereverse的shellshell程序,将输入的若干个命令行参数以逆序输出。n用其它循环语句编程实现本题的功能。7575.1.1.编

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 通信科技 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服