




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目7
shell基础《Linux网络操作系统项目教程(欧拉/麒麟)(微课版)(第5版)》“十四五”职业教育国家规划教材能力要求CAPACITY了解shell的强大功能和shell的命令解释过程。0103掌握grep的高级用法。02学会使用重定向和管道的方法。04掌握正则表示法。思政导入IDEOLOGY明确职业技术岗位所需的职业规范和精神,树立社会主义核心价值观。“高山仰止,景行行止”。为计算机事业做出过巨大贡献的王选院士,应是青年学生崇拜的对象,也是师生学习和前行的动力。。思政目标IDEOLOGY
“面壁十年图破壁,难酬蹈海亦英雄”。为中华之崛起而读书,从来都不仅限于纸上。思政内容IDEOLOGY
王选院士曾经为中国的计算机事业做出过巨大贡献,并因此获得国家最高科学技术奖,你知道王选院士吗?王选院士(1937—2006年)是享誉国内外的著名科学家,汉字激光照排技术创始人,北京大学计算机科学技术研究所主要创建者,历任副所长、所长,博士生导师。他曾任第十届全国政协副主席、九三学社副主席、中国科学技术协会副主席、中国科学院院士、中国工程院院士等。思政内容IDEOLOGY王选院士发明的汉字激光照排系统两次获国家科技进步一等奖(1987年、1995年),两次被评为全国十大科技成就(1985年、1995年),并获国家重大技术装备成果奖特等奖。王选院士一生荣获了国家最高科学技术奖、联合国教科文组织科学奖、陈嘉庚科学奖、美洲中国工程师学会个人成就奖、何梁何利基金科学与技术进步奖等20多项重大成果和荣誉。项目知识准备项目设计与准备项目实施项目实录:Linux系统安装与基本配置内容导航CONTENTS一、项目知识准备变量的定义和引用shell支持具有字符串值的变量。shell变量通过赋值语句完成变量说明并予以赋值。在命令行或shell脚本文件中使用$name的形式引用变量name的值。1.变量的定义和引用在shell中,变量的赋值格式如下:name=string其中,name是变量名,它的值就是string,“=”是赋值符号。变量名是以字母或下画线开头的字母、数字和下画线字符序列组成的。一、项目知识准备变量的定义和引用通过在变量名(name)前加$字符(如$name)引用变量的值,引用的结果就是用字符串string代替$name,此过程也称为变量替换。在定义变量时,若string中包含空格、制表符和换行符,则string必须用'string'或者"string"的形式,即用单(双)引号将其括起来。双引号内允许变量替换,而单引号内则不可以。一、项目知识准备变量的定义和引用下面给出一个定义和使用shell变量的例子。//显示字符常量[root@Server01~]#echowhoareyouwhoareyou[root@Server01~]#echo'whoareyou'whoareyou[root@Server01~]#echo"whoareyou"whoareyou[root@Server01~]#//由于要输出的字符串中没有特殊字符,所以''和""的效果是一样的,不用""但相当于使用了""[root@Server01~]#echoJet'aime>//由于要使用特殊字符('),//'不匹配,shell认为命令行没有结束,回车后会出现系统第二提示符,//让用户继续输入命令行,按“Ctrl+C”组合键结束[root@Server01~]#//为了解决这个问题,可以使用下面的两种方法[root@Server01~]#echo"Jet'aime"Jet’aime[root@Server01~]#echoJet\'aime一、项目知识准备shell变量的作用域与程序设计语言中的变量一样,shell变量有其规定的作用范围。shell变量分为局部变量和全局变量。局部变量的作用范围仅限制在其命令行所在的shell或shell脚本文件中。全局变量的作用范围则包括本shell进程及其所有子进程。可以使用export内置命令将局部变量设置为全局变量。下面给出一个shell变量作用域的例子。//在当前shell中定义变量var1[root@Server01~]#var1=Linux//在当前shell中定义变量var2并将其输出[root@Server01~]#var2=unix[root@Server01~]#exportvar2//引用变量的值[root@Server01~]#echo$var1Linux[root@Server01~]#echo$var2unix一、项目知识准备shell变量的作用域//显示当前shell的PID[root@Server01~]#echo$$2670[root@Server01~]#//调用子shell[root@Server01~]#bash//显示当前shell的PID[root@Server01~]#echo$$2709//由于var1没有被输出,所以在子shell中已无值[root@Server01~]#echo$var1//由于var2被输出,所以在子shell中仍有值[root@Server01~]#echo$var2unix//返回主shell,并显示变量的值[root@Server01~]#exit[root@Server01~]#echo$$2670[root@Server01~]#echo$var1Linux[root@Server01~]#echo$var2unix一、项目知识准备环境变量环境变量是指由shell定义和赋初值的shell变量。shell用环境变量来确定查找路径、注册目录、终端类型、终端名称、用户名等。所有环境变量都是全局变量,并可以由用户重新设置。不同类型的shell的环境变量有不同的设置方法。在bash中,设置环境变量用set命令,命令的格式是:set环境变量=变量的值例如,设置用户的主目录为/home/john,可以用以下命令:[root@Server01~]#setHOME=/home/john一、项目知识准备环境变量不加任何参数直接使用set命令可以显示出用户当前所有环境变量的设置,如下所示:[root@Server01~]#setBASH=/bin/bashBASH_ENV=/root/.bashrc(略)
#路径PATH的设置PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11PS1='[\u@\h\W]\$'PS2='>'SHELL=/bin/bash可以看到其中路径PATH的设置为(使用“set|grepPATH=”命令过滤需要的内容):PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin总共有5个目录,bash会在这些目录中依次搜索用户输入的命令的可执行文件。在环境变量前面加上$符号,表示引用环境变量的值,例如:[root@Server01~]#cd$HOME上述命令将把目录切换到用户的主目录。当修改PATH变量时,例如,将一个路径/tmp加到PATH变量前,应设置为:[root@Server01~]#PATH=/tmp:$PATH一、项目知识准备环境变量shell环境依赖于多个文件的设置。环境设置文件有两种,一种是系统环境设置文件,另一种是个人环境设置文件。(1)系统中的用户环境设置文件。登录环境设置文件:/etc/profile。(2)用户设置的环境设置文件。登录环境设置文件:$HOME/.bash_profile。非登录环境设置文件:$HOME/.bashrc。一、项目知识准备工作环境设置文件项目知识准备项目设计与准备项目实施项目实录:Linux系统安装与基本配置内容导航CONTENTS二、项目设计与准备项目设计与准备本项目要用到Server01,完成的任务如下。(1)理解命令运行的判断依据(2)掌握grep的高级用法(3)掌握正则表示法(4)学会使用重定向和管道命令项目知识准备项目设计与准备项目实施项目实录:Linux系统安装与基本配置内容导航CONTENTS三、项目实施任务7-1命令运行的判断依据:;、&&、||Server01的IP地址为192.168.10.1/24,计算机的网络连接方式是仅主机模式(VMnet1)。在某些情况下,若想使多条命令一次输入而顺序执行,该如何办呢?1.cmd;cmd例如在关机的时候希望可以先运行两次sync同步化写入磁盘后才关机,那么怎么操作呢?[root@Server01~]#sync;sync;shutdown-hnow在命令与命令中间利用分号(;)来隔开,这样一来,分号前的命令运行完后就会立刻接着运行后面的命令。三、项目实施任务7-1命令运行的判断依据:;、&&、||2.$?(命令回传值)与“&&”或“||”。“&&”及“||”命令的执行情况说明如下表:命令执行情况说
明cmd1&&cmd2若cmd1运行完毕且正确运行($?=0),则开始运行cmd2;若cmd1运行完毕且为错误($?≠0),则cmd2不运行cmd1||cmd2若cmd1运行完毕且正确运行($?=0),则cmd2不运行;若cmd1运行完毕且为错误($?≠0),则开始运行cmd2三、项目实施任务7-1命令运行的判断依据:;、&&、||实例说明:要求在某个目录下面创建一个文件。如果该目录存在的话,直接创建这个文件;如果不存在,就不进行创建操作。【例7-1】使用ls查阅目录/tmp/abc是否存在,若存在,则用touch创建/tmp/abc/hehe。[root@Server01~]#ls/tmp/abc&&touch/tmp/abc/hehels:无法访问'/tmp/abc':没有那个文件或目录#说明找不到该目录,但并没有touch的错误,表示touch并没有运行[root@Server01~]#mkdir/tmp/abc[root@Server01~]#ls/tmp/abc&&touch/tmp/abc/hehe[root@Server01~]#ll/tmp/abctotal0-rw-r--r--.1rootroot0Jul1422:34hehe三、项目实施任务7-1命令运行的判断依据:;、&&、||上面的例子中,我们还必须手动自行创建目录,很麻烦。能不能自动判断:没有该目录就创建呢?【例7-2】测试/tmp/abc是否存在,若不存在,则予以创建;若存在,就不做任何事情。[root@Server01~]#rm-r/tmp/abc<==先删除此目录以方便测试[root@Server01~]#ls/tmp/abc||mkdir/tmp/abcls:无法访问'/tmp/abc':没有那个文件或目录[root@Server01~]#ll/tmp/abcTotal0<==结果出现了,能访问到该目录,不报错,说明运行了mkdir命令三、项目实施任务7-1命令运行的判断依据:;、&&、||【例7-3】如果不管/tmp/abc存在与否,都要创建/tmp/abc/hehe文件,怎么办呢?
[root@Server01~]#ls/tmp/abc||mkdir/tmp/abc&&touch/tmp/abc/hehe分析:若/tmp/abc不存在。回传$?≠0;因为||遇到不为0的$?,故开始执行mkdir/tmp/abc,由于mkdir/tmp/abc会成功执行,所以回传$?=0;因为&&遇到$?=0,故会执行touch/tmp/abc/hehe,最终hehe就被创建了。若/tmp/abc存在。回传$?=0;因为||遇到$?=0不会执行,此时$?=0继续向后传;而&&遇到$?=0就开始创建/tmp/abc/hehe,所以最终/tmp/abc/hehe被创建。流程图如下:三、项目实施任务7-1命令运行的判断依据:;、&&、||【例7-4】以ls测试/tmp/bobbying是否存在:若存在,则显示“exist”;若不存在,则显示“notexist”。ls/tmp/bobbying&&echo"exist"||echo"notexist"意思是说,在ls/tmp/bobbying运行后,若正确,就运行echo"exist",若有问题,就运行echo"notexist"。那如果写成如下的方式又会如何呢?三、项目实施任务7-2掌握grep的高级使用grep是shell中处理字符很方便的命令,其命令格式如下。格式:grep[-A][-B][--color=auto]'查找字符串'filename选项与参数的含义如下。-A:后面可加数字,为after的意思,除了列出该行外,后续的n行也列出来。-B:后面可加数字,为befor的意思,除了列出该行外,前面的n行也列出来。三、项目实施任务7-2掌握grep的高级使用【例7-5】用dmesg列出核心信息,再以grep找出内含IPv6的那行。[root@Server01~]#dmesg|grep'IPv6'[1.228032]SegmentRoutingwithIPv6[13.707603]IPv6:ADDRCONF(NETDEV_UP):ens160:linkisnotready#dmesg可列出核心信息,通过grep获取IPv6的相关信息。三、项目实施任务7-2掌握grep的高级使用【例7-6】承上题,要将获取到的关键字显色,且加上行号(-n)来表示。[root@Server01~]#dmesg|grep-n--color=auto'IPv6'1265:[1.228032]SegmentRoutingwithIPv61531:[13.707603]IPv6:ADDRCONF(NETDEV_UP):ens160:linkisnotready#除了会有特殊颜色外,最前面还有行号三、项目实施任务7-2掌握grep的高级使用【例7-7】承上题,在关键字所在行的前一行与后一行也一起找出来显示。[root@Server01~]#dmesg|grep-n-A1-B1--color=auto'IPv6'1264-[1.227794]NET:Registeredprotocolfamily101265:[1.228032]SegmentRoutingwithIPv61266-[1.228032]NET:Registeredprotocolfamily17--1530-[9.349047]random:7urandomwarning(s)missedduetoratelimiting1531:[13.707603]IPv6:ADDRCONF(NETDEV_UP):ens160:linkisnotready1532-[13.761952]vmxnet30000:03:00.0ens160:intrtype3,mode0,2v#如上所示,你会发现关键字1265所在的前后各1行及1531前后各1行也都被显示出来#这样可以让你将关键字前后数据找出来进行分析三、项目实施任务7-3练习基础正则表达式说明:练习文件sample.txt的内容。文件共有22行,最底下一行为空白行。1.查找特定字符串。假设我们要从文件sample.txt当中取得“the”这个特定字符串,最简单的方式是:[root@Server01~]#grep-n'the'/root/sample.txt8:Ican'tfinishthetest.12:thesymbol'*'isrepresentedasstart.15:Youarethebestismeanyouaretheno.1.16:Theworld<Happy>isthesamewith"glad".18:googleisthebesttoolsforsearchkeyword.如果想要反向选择呢?也就是说,当该行没有“the”这个字符串时才显示在屏幕上:[root@Server01~]#grep-vn'the'/root/sample.txt三、项目实施任务7-3练习基础正则表达式如果你想要获得不论大小写的“the”这个字符串,则执行[root@Server01~]#grep-in'the'/root/sample.txt8:Ican'tfinishthetest.9:Oh!Thesouptastegood.12:thesymbol'*'isrepresentedasstart.14:Thegdsoftwareisalibraryfordraftingprograms.15:Youarethebestismeanyouaretheno.1.16:Theworld<Happy>isthesamewith"glad".18:googleisthebesttoolsforsearchkeyword.三、项目实施任务7-3练习基础正则表达式2.利用中括号[]来搜寻集合字符。对比“test”或“taste”这两个单词可以发现,它们有共同点“t?st”存在。这个时候,可以这样来查寻:[root@Server01~]#grep-n't[ae]st'/root/sample.txt8:Ican'tfinishthetest.9:Oh!Thesouptastegood.其实[]里面不论有几个字符,都只代表某一个字符,所以,上面的例子说明需要的字符串是tast或test。三、项目实施任务7-3练习基础正则表达式而如果想要搜寻到有“oo”的字符时,则使用:[root@Server01~]#grep-n'oo'/root/sample.txt1:"OpenSource"isagoodmechanismtodevelopprograms.2:appleismyfavoritefood.3:Footballgameisnotusefeetonly.9:Oh!Thesouptastegood.18:googleisthebesttoolsforsearchkeyword.19:goooooogleyes!三、项目实施任务7-3练习基础正则表达式如果不想要“oo”前面有“g”的行显示出来。此时,可以利用在集合字节的反向选择[^]来完成:[root@Server01~]#grep-n'[^g]oo'/root/sample.txt2:appleismyfavoritefood.3:Footballgameisnotusefeetonly.18:googleisthebesttoolsforsearchkeyword.19:goooooogleyes!三、项目实施任务7-3练习基础正则表达式例如大写英文/小写英文/数字等,就可以使用[a-z],[A-Z],[0-9]等方式来书写。假设oo前面不想有小写字母,则:[root@Server01~]#grep-n'[^a-z]oo'sample.txt3:Footballgameisnotusefeetonly.获取有数字的那一行:[root@Server01~]#grep-n'[0-9]'/root/sample.txt5:However,thisdressisabout$3183dollars.15:Youarethebestismeanyouaretheno.1.三、项目实施任务7-3练习基础正则表达式3.行首与行尾字节^$。查询到行首是字符串“the”:[root@Server01~]#grep-n'^the'/root/sample.txt12:thesymbol'*'isrepresentedasstart.想要开头是小写字母的那些行列出:[root@Server01~]#grep-n'^[a-z]'/root/sample.txt如果不想要开头是英文字母,则可以这样:[root@Server01~]#grep-n'^[^a-zA-Z]'/root/sample.txt1:"OpenSource"isagoodmechanismtodevelopprograms.21:#IamBobby三、项目实施任务7-3练习基础正则表达式如果想要找出行尾结束为小数点(.)的那些行。[root@Server01~]#grep-n'\.$'/root/sample.txt如果想要找出哪一行是空白行,即该行没有输入任何数据。[root@Server01~]#grep-n'^$'/root/sample.txt22:因为只有行首跟行尾有(^$),所以这样就可以找出空白行了。三、项目实施任务7-3练习基础正则表达式4.任意一个字符“.”与重复字节“*”。.(小数点):代表一个任意字符。*(星号):代表重复前一个字符0次到无穷多次假设需要找出“g??d”的字符串,即共有4个字符,开头是“g”而结束是“d”?[root@Server01~]#grep-n'g..d'/root/sample.txt1:"OpenSource"isagoodmechanismtodevelopprograms.9:Oh!Thesouptastegood.16:Theworld<Happy>isthesamewith"glad".三、项目实施任务7-3练习基础正则表达式当需要“至少两个o以上的字符串”时,就需要ooo*,即[root@Server01~]#grep-n'ooo*'/root/sample.txt如果想要字符串开头与结尾都是g,但是两个g之间仅能存在至少一个o。[root@Server01~]#grep-n‘goo*g'sample.txt如果想要找出以g开头且以g结尾的字符串,当中的字节可有可无,那该如何操作呢?[root@Server01~]#grep-n'g.*g'/root/sample.txt如果想要找出“任意数字”的行列呢?[root@Server01~]#grep-n'[0-9][0-9]*'/root/sample.txt三、项目实施任务7-3练习基础正则表达式5.限定连续RE字符范围{}“{}”:限定范围的字符。但因为“{”与“}”的符号在shell里是有特殊意义的,所以必须使用转义字符“\”来让其失去特殊意义才行。假设要找到含两个o的字符串的行:[root@Server01~]#grep-n'o\{2\}'/root/sample.txt假设要找出g后面接2~5个o,然后再接一个g的字符串:[root@Server01~]#grep-n'go\{2,5\}g'/root/sample.txt如果想要的是2个o以上的goooo....g呢?[root@Server01~]#grep-n'go\{2,\}g'/root/sample.txt三、项目实施任务7-4基础正则表达式的特殊字符汇总基础正则表示的特殊字符汇总成表如下:三、项目实施任务7-4基础正则表达式的特殊字符汇总基础正则表示的特殊字符汇总成表(续)如下:重定向符说
明<
实现输入重定向。输入重定向并不经常使用,因为大多数命令都以参数的形式在命令行上指定输入文件的文件名。尽管如此,当使用一个不接受文件名为输入参数的命令,而需要的输入又是在一个已存在的文件中时,就能用输入重定向解决问题>或>>实现输出重定向。输出重定向比输入重定向更常用。输出重定向使用户能把一个命令的输出重定向到一个文件中,而不是显示在屏幕上。很多情况下都可以使用这种功能。例如,如果某个命令的输出很多,在屏幕上不能完全显示,即可把它重定向到一个文件中,稍后再用文本编辑器来打开这个文件2>或2>>实现错误重定向&>同时实现输出重定向和错误重定向三、项目实施任务7-5使用重定向重定向就是不使用系统的标准输入端口、标准输出端口或标准错误端口,而进行重新的指定,所以重定向分为输入重定向、输出重定向和错误重定向。通常情况下,重定向到一个文件。在shell中,要实现重定向主要依靠重定向符,即shell是检查命令行中有无重定向符来决定是否需要实施重定向。重定向符如下表:三、项目实施任务7-5使用重定向下面举几个使用重定向的例子。(1)将ls命令生成的/tmp目录的一个清单存到当前目录中的dir文件中。[root@Server01~]#ls-l/tmp>dir(2)将ls命令生成的/etc目录的一个清单以追加的方式存到当前目录中的dir文件中。[root@Server01~]#ls-l/etc>>dir(3)passwd文件的内容作为wc命令的输入(wc命令用来计算数字,可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据)。[root@Server01~]#wc</etc/passwd(4)将命令myprogram的错误信息保存在当前目录下的err_file文件中。[root@Server01~]#myprogram2>err_file(5)将命令myprogram的输出信息和错误信息保存在当前目录下的output_file文件中。[root@Server01~]#myprogram&>output_file(6)将命令ls的错误信息保存在当前目录下
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络安全与信息技术2025年考试重点题目及答案
- 兰州职业技术学院《Hadoop大数据技术》2023-2024学年第二学期期末试卷
- 四川工业科技学院《微机原理与汇编语言》2023-2024学年第二学期期末试卷
- 2025年数据分析与处理职业考试试卷及答案
- 2025年注册会计师资格考试试卷及答案
- 2025年移动互联网应用开发职业考试试题及答案
- 2025年职业健康管理师考试试卷及答案汇编
- 山东省广饶一中2024-2025学年高三最后一卷化学试题文试题含解析
- 岐山县2025年小升初总复习数学精练含解析
- 江苏省句容市、丹阳市2024-2025学年第一次高中毕业生复习统一检测试题语文试题含解析
- 2023年福建三明市初中毕业班数学质量检测卷(附答案)
- 现金盘点表完整版
- 金蝶固定资产管理系统
- LY/T 2457-2015西南桦培育技术规程
- GB/T 40998-2021变性淀粉中羟丙基含量的测定分光光度法
- GB/T 25840-2010规定电气设备部件(特别是接线端子)允许温升的导则
- 军标类型整理文档
- FZ/T 52019-2011莱赛尔短纤维
- 止血包扎(课件)
- 2022年湖南高二学业水平合格考试政治试卷真题及答案详解
- 投行业务二o一五年度经营绩效考核办法
评论
0/150
提交评论