版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
07openEuler网络操作系统搭建、配置与管理第7章Shell基本知识与命令教材配套·授课版课件openEuler24.03LTSKernel6.6本章内容导航1Shell基本知识2Shell的其他命令3实验项目:Shell编程4法治教育:编程伦理与法律规范第7章Shell基本知识与命令★重点知识地图openEuler24.03LTS·Kernel6.63/103本章知识地图:Shell解释器·变量运算·管道重定向·实验openEulerShell编程基础Shell是用户与内核之间的接口·Bash最流行Shell与Bash•Shell解释器的作用•Bash历史与特性•变量定义与引用•环境变量export运算与正则•expr数学运算•$(())算术扩展•非空检查与默认值•正则表达式匹配管道与重定向•管道|串联命令•重定向>>><<<<•history/alias•通配符*?[]实验项目:Shell编程(shebang脚本)·法治教育:编程伦理与法律规范➊编写Shell脚本➋chmod添加执行权限➌运行与调试第7章Shell基本知识与命令★重点本章学习目标openEuler24.03LTS·Kernel6.64/103本章学习目标(5项)完成本章学习后,应能理解Shell的作用并掌握常用命令、变量运算、正则表达式与管道重定向。1.Shell概述理解shell的作用——操作系统内核与用户之间的接口。2.Bash基础认识bash的历史、版本与新特性。3.Shell命令掌握ls/df/du/mkfs/fdisk等常用Linux命令。4.管道与重定向理解pipelining(|)和输出重定向(>>><)。5.历史、别名与通配符使用history、alias、wildcard(*)提高交互效率。第7章Shell基本知识与命令第7章Shell基本知识与命令Shell既是命令行的交互界面,也是一种编程语言,它为用户提供了一个向Linux内核发送请求以运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。用Shell编写的程序通常叫作脚本程序,它无须专门的编译器,而是由Shell逐行解释。Linux系统及其发行版中承担系统管理与维护工作的大量程序都是由脚本程序实现的。本章介绍Shell的基本知识与命令。openEuler24.03LTS·Kernel6.65/103SECTION1Shell基本知识1Shell变量的定义和引用★(重点)谈及Shell变量时,是指存储数据的一个名字。Shell变量中实际存储的是字符信息。合法的变量名由大小写字母、数字和下划线组成。Shell有自己的一些预定义变量,通常称为环境变量。环境变量一般由大写字母、数字和下划线组成。变量无须特别声明。所有未被赋值的变量都是空字符。变量赋值后,将得到一个字符串。由于赋值是直接在命令行操作,因此字符串应遵循命令行规则,例如,字符串中存在空格,应在字符串首尾使用引号;使用单引号可以将一些特殊字符(如$、!)当作普通字符处理。$name=”helloworld”Shell变量的设置规则与取用如下。openEuler24.03LTS·Kernel6.67/103Shell变量的定义和引用★(重点)•变量与变量内容以一个等号“=”来链接,如下所示。name=euler需要说明的是:等号两边不能直接接空白字符,这在Shell语法中是错误的。•和编程语言类似,用户自定义变量的名称可以是任何由字母、数字或下划线组成的字符串,长度不能超过20个字符。•因为变量名区分大小写,所以变量Var1和变量var1是不同的。•echo是一个常用的打印变量内容的命令,类似于编程语言中的“print”语句,用于输出命令的运行结果,如图7-1所示。openEuler24.03LTS·Kernel6.68/103图7-1echo命令openEuler24.03LTS·Kernel6.69/103Shell变量的定义和引用★(重点)图7-1echo命令利用echo语句能够读取变量的值,只是需要在变量名称前面加上$,或者用${变量}的方式来取用都可以。•使用反引号,运行里面的命令,并把结果返回给变量,如图7-2所示。openEuler24.03LTS·Kernel6.610/103Shell变量的定义和引用★(重点)图7-2反引号使用•除此之外,另一种表达方式就是使用“$(命令)”这种表达方式等价于反引号,如图7-3所示:openEuler24.03LTS·Kernel6.612/103Shell变量的定义和引用★(重点)图7-3其他表达方式•反斜线是转义符,它可以将具有特定意义的符号变成普通字符,如图7-4所示。openEuler24.03LTS·Kernel6.614/103图7-4反斜线的使用★(重点)openEuler24.03LTS·Kernel6.615/103Shell变量的定义和引用★(重点)图7-4反斜线的使用•双引号内的特殊字符如$等,可以保有原本的特性,如图7-5所示。openEuler24.03LTS·Kernel6.616/103图7-5双引号的使用openEuler24.03LTS·Kernel6.617/103Shell变量的定义和引用★(重点)图7-5双引号的使用•单引号内的特殊字符则仅为一般字符(纯文本),如图7-5所示。•取消变量的方法为使用unset:“unset变量名称”例如,取消name的设置,如图7-6所示。openEuler24.03LTS·Kernel6.618/103图7-6取消变量openEuler24.03LTS·Kernel6.619/103Shell变量的定义和引用★(重点)图7-6取消变量•使用readonly可以声明一个静态变量,这里的静态变量类似于编程语言中的静态变量,它只定义一次,不能反复的定义和初始化,即静态变量无法被unset,如图7-7所示。openEuler24.03LTS·Kernel6.620/103图7-7声明静态变量openEuler24.03LTS·Kernel6.621/103Shell变量的定义和引用★(重点)图7-7声明静态变量以上便是变量的设置规则与取用的基本操作,除此之外,再介绍一下Shell中的注释操作。Shell中的注释操作与编程语言类似,分为多行注释和单行注释,只是表现形式上与编程语言不同。•多行注释:<!注释内容
!:<<!C=dateD=$(date)echo"C=$C"echo"D=$D"openEuler24.03LTS·Kernel6.622/103Shell变量的定义和引用★(重点)!•单行注释:##echo"HelloWorld"openEuler24.03LTS·Kernel6.623/103变量的运算默认情况下,一般认为Shell变量仅有字符串的意义,因此,讨论Shell变量的运算,实际上就是在讨论Shell环境中字符串的运算规则。Shell变量运算主要针对下面的问题。★(重点)•确定变量存在(非空),并且进行空变量的处理。•给变量设置默认值。•按特定规则修改变量的值。Shell环境中的字符串支持表7-1中列出的运算操作。表7-1变量或字符串支持的操作变量匹配方式pattern除了用字母、Shell通配符表示以外,还可以使用表7-2中列出的扩展匹配方式,其中的匹配列表patterns中的每一个模式之间用分隔。表7-2Shell变量的扩展匹配编程语言中十分重要的一个特性就是数学运算能力。遗憾的是,Shell在这方面多少有些不尽如人意。openEuler24.03LTS·Kernel6.624/103变量的运算在Shell中,执行数学运算有两种方式:expr命令和方括号[]。•expr命令Shell运算支持表7-3的运算符,它们与C语言中的整数运算符规则大致相同。★(重点)除了表7-3所列运算外,Shell还支持:+=、<<=这种类似C语言的双目运算规则。表7-3常用运算符用expr命令计算(2+3)*4的值,命令如下。TEMP=`expr2+3`RES=`expr$TEMP\*4`echo”result3=$RES”这里需要注意的是:有些运算符在Shell中另有他意(如*)。openEuler24.03LTS·Kernel6.625/103变量的运算当这些符号出现在expr命令中时,可能会被Shell解释成其他意思,要解决这个问题,就要在那些容易被Shell错误解释的运算符(或字符)被传入expr命令之前,使用Shell的转义字符(反斜线)对其进行转义。另外,务必在运算符两侧加上空格,如无空格则会被Shell解释为字符串。显然,从编程的角度来看expr的写法有些笨拙,下面介绍另一种更简单的方法来执行数学运算。•方括号[]要将数学运算结果赋给变量,可以使用$和方括号($[operation])。还是以计算(2+3)*4的值为例,命令如下。RES=$[(2+3)*4]echo“result2=$RES”在使用方括号执行数学运算时,无须担心Shell会误解乘号或其他符号。Shell清楚方括号内的*号不是通配符。当然,也可以使用双括号(())来表示上面的运算式,将需要运算的表达式括起,这种表示形式与方括号是等价的,即:★(重点)openEuler24.03LTS·Kernel6.626/103变量的运算RES=$(((2+3)*4))需要注意的是:bashShell的数学运算符只支持整数运算。如果需要涉及的浮点数的数学运算,请自行查阅相关资料。openEuler24.03LTS·Kernel6.627/103Shell中变量的作用域作用域,顾名思义,它定义了变量在脚本中的可见性和可访问的范围。★(重点)在Shell脚本中,变量的作用域主要分为全局变量、局部变量和环境变量三种。了解它们的作用域,有助于后续Shell脚本的学习。•全局变量全局变量是在脚本层面定义的变量,它们在整个脚本的执行过程中都有效,包括在脚本中定义的函数内部也可以访问,命令如下。#!/bin/bashglobal_var="I'mglobal"my_function(){echo$global_varopenEuler24.03LTS·Kernel6.628/103Shell中变量的作用域}my_function#输出:I'mglobal在这个例子中,global_var是一个全局变量,在my_function函数内部可以访问它。•局部变量在一个脚本程序中常常会包含若干个函数,每个函数都有自己要处理的变量。默认情况下,一个变量一旦被赋值,就可以被整个脚本访问,除非使用Shell的命令local加以限定。由local限定的变量称为局部变量。未声明为local的变量是全局变量。当存在同名的局部变量和全局变量时,在函数内部优先访问局部变量,在函数外部不能访问局部变量,命令如下。#!/bin/bashopenEuler24.03LTS·Kernel6.629/103Shell中变量的作用域my_function(){locallocal_var="I'mlocal"echo$local_var}my_function输出:I'mlocalecho$local_var输出为空,因为local_var是局部变量,外部无法访问关于函数的知识,将在后续介绍。•环境变量环境变量是定义在整个系统环境中的变量,它的作用域很大,不仅在当前脚本中有效,还可以被当前脚本启动的所有子进程继承和访问。★(重点)openEuler24.03LTS·Kernel6.630/103环境变量环境变量就是一个较简单的字符串用来替代某些具有特殊意义的设定及数据,如环境变量PATH就替代了所有常用命令的绝对路径。有了PATH这个环境变量,运行某个命令时不再需要输入全局路径,直接输入命令名
即可。使用echo命令可以显示环境变量的值,如图7-8所示。openEuler24.03LTS·Kernel6.631/103环境变量图7-8显示环境变量除了PATH、PWD、HOME、LOGNAME外,还可以使用env命令列出系统预设的全部环境变量,如图7-9所示。不过登录的用户身份不同,显示的这些环境变量的值也不一样。如图7-9显示的就是root用户的环境变量。openEuler24.03LTS·Kernel6.633/103图7-9root用户的环境变量openEuler24.03LTS·Kernel6.634/103环境变量图7-9root用户的环境变量下面简单介绍几个常见的环境变量。•HOSTNAME:主机名。•SHELL:当前用户的Shell类型。•HISTSIZE:历史记录数。•MAIL:当前用户的邮件存放目录。•PATH:PATH环境变量决定了Shell将去哪些目录中寻找命令或程序。•PWD:显示当前目录。•LANG:与语言相关的环境变量,使用多语言时可以修改此环境变量。•HOME:显示当前用户主目录。•LOGNAME:当前用户的名称。env命令显示的变量只是环境变量,系统预设的变量其实还有很多。openEuler24.03LTS·Kernel6.635/103环境变量使用set命令可以把系统预设的全部变量都显示出来,如图7-10所示。openEuler24.03LTS·Kernel6.636/103图7-10显示系统预设的全部变量openEuler24.03LTS·Kernel6.637/103环境变量图7-10显示系统预设的全部变量篇幅有限,这里并没有将所有显示结果都截图,读者可自行实践查看。使用export语句可以声明一个环境变量,具体使用情况主要有以下两种。•想让系统内的所有用户均能使用这种情况下,用户需要在/etc/profile文件末尾行加入export变量名=内容,然后执行source/etc/profile命令刷新配置文件就可以生效了。此时再执行命令,发现自定义变量在系统内自动生效如图7-11~图7-13所示。★(重点)openEuler24.03LTS·Kernel6.638/103环境变量图7-11修改/etc/profile文件openEuler24.03LTS·Kernel6.640/103图7-12刷新配置文件openEuler24.03LTS·Kernel6.641/103环境变量图7-13显示自定义变量★(重点)•只想让当前用户使用该变量用户需要在用户主目录下(这里展示的是root用户)。.bashrc文件的最末行加入export变量名=内容(如图7-14),然后执行source.bashrc命令就可以生效了。此时再登录其他用户(如euler),变量就不会生效了(如图7-15)。上面用的source命令的作用是将目前设定的配置刷新,即不用注销再登录用户,配置也能生效。openEuler24.03LTS·Kernel6.644/103图7-14修改.bashrc文件★(重点)openEuler24.03LTS·Kernel6.645/103环境变量图7-15切换用户后不生效需要注意的是:如果export命令后不加任何变量名,则它会声明所有变量,如图7-16所示。openEuler24.03LTS·Kernel6.648/103图7-16声明所有变量openEuler24.03LTS·Kernel6.649/103SECTION2Shell的其他命令2正则表达式★(重点)正则表达式(RegularExpression),又称规则表达式,简写作regex或regexp)是一种描述文本特征的逻辑语言。它使用一套预定义的符号代替通用的匹配规则,在文字搜索、编辑器中的查找/替换、数据库检索、网页关键字匹配上都有应用。Linux系统的命令grep就是典型的应用。很多文档编辑器的查找/替换可以直接使用正则表达式实现,一些编程语言内建或通过扩展库支持正则表达式功能。正则表达式是由正则表达式引擎实现的。这是一种底层软件,负责解释正则表达式并用这些模式进行文本匹配。尽管在Linux世界中有很多不同的正则表达式引擎,但最流行的是以下两种。•POSIX基础正则表达式(basicregularexpression,BRE)引擎。•POSIX扩展正则表达式(extendedregularexpression,ERE)引擎。由于正则表达式的实现方法众多,因此很难用一种简洁的描述来涵盖所有可能的正则表达式,所以这里只讨论最常见的正则表达式。openEuler24.03LTS·Kernel6.652/103正则表达式★(重点)•匹配规则表7-4列出了常用的匹配规则,涵盖了单个字符串搜索的绝大多数情况。例如,“找出由6个字母构成的单词”这一要求,若考虑仅有首字母大写的可能,可以表述为:\b[A-Z][a-z][a-z][a-z][a-z][a-z]\b说明如下。•\b:单词边界,前后各一个确保匹配的是一个完整的单词,而不是单词的一部分。•[A-Z]:匹配一个大写字母,表示单词的首字母。•[a-z][a-z][a-z][a-z][a-z]:匹配5个小写字母,表示单词的其余5个字母。表7-4常用匹配规则•重复匹配除了用特定的符号表示一类字符以外,正则表达式还定义了一组字符的重复操作规则。表7-5列出了常用的符号。openEuler24.03LTS·Kernel6.653/103正则表达式★(重点)表7-5重复操作规则有了表7-5提供的功能,“由6个字母构成的单词”这一需求可以更简洁地表示为如下命令。\b[A-Z][a-z]{5}\b切勿混淆()和[],前者包裹的一串符号是一个整体,作为字符串匹配:后者是一串符号的列表,它只匹配其中的一个字符。在匹配方式上,()等同于不加括号的字符,但它可以成为一个已定义的表达式子模式,方便之后引用。在一个表达式中,每个定义的子模式以出现的先后顺序序号为标记,序号从1开始。引用时用表示对应的子模式。比如下面这个例子表示“找出由6个字母构成的单词同时要求首字母大写的且要求中间有两个字母相同”。\b[A-Z][a-z]{2}([a-z])[a-z]\3\b说明如下。•[a-z]{2}:表示匹配2个小写字母,即单词的前两个小写字母。openEuler24.03LTS·Kernel6.654/103正则表达式★(重点)•([a-z]):表示匹配一个小写字母,并将其捕获为一个分组(分组1)。•[a-z]:匹配一个小写字母,表示单词的第四个小写字母。•\3:引用分组1中捕获的字母,确保第四个和第六个字母相同。•非贪婪匹配正则表达式在进行重复匹配时的基本规则是,在使整个表达式得到匹配的前提下,匹配尽可能多的字符。这种行为被称作贪婪匹配。例如,使用规则^.+l在字符串hello,world中匹配字符,得到的是hello,worl而不是hel。若想找出最短的匹配字符串,使用^.+?l可以得到hel。这种行为被称作非贪婪匹配(或称懒惰匹配)。?是正则表达式中的另一种用法,它被放在重复表达式之后,表示在使表达式匹配成功的前提下使用尽可能少的重复。表7-6是非贪婪匹配的几种形式。表7-6非贪婪匹配openEuler24.03LTS·Kernel6.655/103正则表达式★(重点)•特殊匹配机制除了上述匹配规则外,正则表达式还包含一些条件匹配和一些特定的匹配标志,如表7-7所示。表7-7扩展匹配方式说明:表中,I、L、M、S、X、U标志分别表示下面的意思。•I(Ignore):忽略字母大小写。•L(Locale):\w、\W、\b、\B依赖本地语言字符集。•M(Multiline):多行模式,A、$既匹配串首尾也匹配行首尾。•S(dotall):点匹配所有符号,包括换行符。•X(verbose):忽略空格和注释。•U(Unicode):\w、\W、\b、\B依赖Unicode字符集。需要强调的是,正则表达式引擎在匹配字符时是自前向后搜索的,已匹配过的字符默认不再用于之后的匹配。openEuler24.03LTS·Kernel6.656/103重定向和管道命令有时候,用户想要保存命令的输出而不只是在屏幕上显示。Shell提供了几个运算符,它
们可以将命令的输出重定向到其他位置(如文件)。重定向既可用于输入,也可用于输出,例如将文件重定向,作为命令输入。如果用户想要把两个或者多个命令按先后顺序执行输入/输出操作则可以使用管道命令,本节将介绍如何在Shell中使用重定向和管道。•输入/输出重定向某些情况下,需要保存程序的输出,此时就可以通过重定向,将程序的输出保存到文件中,表7-8中列出了重定向操作符。★(重点)表7-8重定向操作符输出重定向>的文件如果不存在,则创建它;如果存在,则会覆盖原来的内容,如图7-17所示。openEuler24.03LTS·Kernel6.657/103图7-17输出重定向符号的使用openEuler24.03LTS·Kernel6.658/103重定向和管道命令图7-17输出重定向符号的使用而追加式输出重定向>>的定向文件如果存在,则会把新的内容追加到该文件之后,不会覆盖原来的内容,如图7-18所示。openEuler24.03LTS·Kernel6.659/103图7-18追加式输出重定向符号的使用openEuler24.03LTS·Kernel6.660/103重定向和管道命令图7-18追加式输出重定向符号的使用输入重定向“<”符号将文件的内容作为命令的输入,这在很多情况下可以替代直接将文件名作为命令参数的方式,特别适用于从文件中读取大量数据。openEuler24.03LTS·Kernel6.661/103图7-19输入重定向符号的使用openEuler24.03LTS·Kernel6.662/103重定向和管道命令图7-19输入重定向符号的使用这里,<符号将example.txt文件的内容重定向到cat命令的输入。执行上述命令后,输出结果与直接使用catexample.txt相同。<<<是BashShell中的一个特殊重定向符号,称为herestring(这里字符串)。它用于将一个字符串作为命令的输入,而不是从文件中读取输入。<<<符号后面直接跟字符串,该字符串会被传递给命令的标准输入,如图7-20所示。openEuler24.03LTS·Kernel6.663/103重定向和管道命令图7-20特殊重定向字符串的使用<<<是一种非常方便的重定向方式,特别适用于将单个字符串或包含换行符的多行字符串作为命令的输入。它在处理简单的字符串操作时非常有用,可以避免创建临时文件,使命令更加简洁和高效。注意区别输入重定向<和<<<的不同,前者的输入重定向来自文件,后者的输入重定向直接是字符串。需要注意的是,重定向只适用于标准I/O设备,两个普通文件不能进行重定向操作。Linux的系统命令多数都是以标准I/O设备为操作对象的,也因此用户可以灵活的使用重定向命令。•管道有时需要将一个命令的输出连到另一个命令的输入,如果用重定向实现会较复杂,这时可以使用管道命令,管道(丨)就像现实中的水管一样,可以连接两个命令的输入和输出,甚至是串联多个命令。格式:command1|command2|command3下面的案例可以帮助读者更好的理解管道的概念:★(重点)ls/bin/|greppython|lessopenEuler24.03LTS·Kernel6.665/103重定向和管道命令ls/bin/命令列出了
/bin
目录中的所有文件和目录,用greppython命令从
ls/bin/
的输出中筛选出包含"python"的行,最后用less将
grep
的输出通过
less
分页显示,方便查看。管道“|”用于将一个命令的输出作为另一个命令的输入,从而实现命令之间的数据流传递。通过管道,可以将多个简单的命令组合起来,完成复杂的任务。管道在处理文本数据、过滤信息、统计结果等方面非常有用。注意管道与重定向的不同:重定向连接的是命令和文件,管道连接的是一个命令的标准输出和另一个命令的标准输入。openEuler24.03LTS·Kernel6.666/103SECTION3实验项目:Shell编程3实验项目:Shell编程•实验目的掌握Shell环境变量、管道符、输入输出重定向的使用方法。•实验步骤•创建一个新文件lab.sh,向文件中写入如下代码并保存。#!/bin/bash#------------------------------------------------------------#实验:Shell环境变量、管道、输入输出重定向#使用方法:#1)保存为lab.shopenEuler24.03LTS·Kernel6.668/103实验项目:Shell编程#2)chmod+xlab.sh#3)./lab.sh#实验结束后请手动删除/tmp/work-$$目录#------------------------------------------------------------#-------------实验准备-------------WORKDIR=/tmp/work-$$mkdir-p"$WORKDIR/temp"cd"$WORKDIR"openEuler24.03LTS·Kernel6.669/103实验项目:Shell编程#-------------1.环境变量-------------echo"=====1.环境变量====="#1.1查看当前PATH的前3个目录echo"当前PATH的前3个目录:"OLD_IFS=$IFSIFS=:i=0fordin$PATH;openEuler24.03LTS·Kernel6.670/103实验项目:Shell编程do[$i-lt3]&&echo"$d"i=$((i+1))doneIFS=$OLD_IFS#1.2临时修改环境变量exportMY_NAME="Alice"echo"MY_NAME=$MY_NAME"openEuler24.03LTS·Kernel6.671/103实验项目:Shell编程/bin/sh-c'echo"在子Shell中读取MY_NAME=$MY_NAME"'#-------------2.输入输出重定向-------------echo""echo"=====2.输入输出重定向====="#2.1标准输出重定向echo"HelloWorld">hello.txtcathello.txt#2.2标准错误重定向openEuler24.03LTS·Kernel6.672/103实验项目:Shell编程ls/no/such/file2>error.logecho"错误信息已被捕获:"caterror.log#2.3合并标准输出与标准错误ls/no/such/file>both.log2>&1echo"合并后的日志:"catboth.log#2.4多行写入openEuler24.03LTS·Kernel6.673/103实验项目:Shell编程echo"Shellisfun,">poem.txtecho"重定向也不难,">>poem.txtecho"管道一接万事简。">>poem.txtecho"刚刚写好的诗:"catpoem.txt#-------------3.管道-------------echo""openEuler24.03LTS·Kernel6.674/103实验项目:Shell编程echo"=====3.管道====="#3.1统计当前目录下条目数量count=0forfin*;do[-e"$f"]&&count=$((count+1))doneecho"当前目录共有$count个条目"openEuler24.03LTS·Kernel6.675/103实验项目:Shell编程#3.2多级管道:查找包含error的行并排序去重grep-ierrorboth.log|sort|uniq#3.3管道与环境变量结合echo"PATH中包含sbin的目录:"OLD_IFS=$IFSIFS=:fordin$PATH;doopenEuler24.03LTS·Kernel6.676/103实验项目:Shell编程echo"$d"|grepsbindoneIFS=$OLD_IFS#3.4保存logls-l>ls.logcatls.logecho"ls的结果已保存到ls.log:"catls.logopenEuler24.03LTS·Kernel6.677/103实验项目:Shell编程#-------------4.综合练习-------------★(重点)echo""echo"=====4.综合练习====="#4.1提取使用/bin/bash的用户名grep'/bin/bash$'/etc/passwd|grep-o'^[^:]*'>bash_users.txtecho"使用bash的用户有:"catbash_users.txt#4.2统计这些用户的数量openEuler24.03LTS·Kernel6.678/103实验项目:Shell编程USER_COUNT=0whileread_;doUSER_COUNT=$((USER_COUNT+1))done<bash_users.txtecho"总数:$USER_COUNT"#4.3追加实验报告echo"实验报告">lab_report.txtopenEuler24.03LTS·Kernel6.679/103实验项目:Shell编程echo"========================">>lab_report.txtecho"时间:$(date)">>lab_report.txtecho"工作目录:$WORKDIR">>lab_report.txtecho"使用bash的用户数量:$USER_COUNT">>lab_report.txtecho"这些用户是:">>lab_report.txtcatbash_users.txt>>lab_report.txt#4.4把报告文件复制到脚本启动目录cplab_report.txt"$(dirname"$0")/lab_report.txt"openEuler24.03LTS·Kernel6.680/103实验项目:Shell编程#-------------5.实验总结-------------echo""echo"=====5.实验总结====="echo"实验完毕!关键知识点回顾:"echo"1)环境变量仅在当前进程及子进程生效,除非写入shell启动文件。"echo"2)>覆盖写,>>追加写,2>重定向标准错误,2>&1合并错误到标准输出。"openEuler24.03LTS·Kernel6.681/103实验项目:Shell编程echo"3)管道|把前一个命令的标准输出接到后一个命令的标准输入。"echo"4)用cat可以实现类似tee的效果:先写文件再显示。"echo"5)所有实验文件已保存在$(dirname"$0")/lab_report.txt与$WORKDIR/temp/目录。"echo"请手动删除$WORKDIR以完成清理。"openEuler24.03LTS·Kernel6.682/103实验项目:Shell编程•为文件添加执行权限chmodu+xlab.sh•结束后查看/tmp/work-6532目录下生成的文件,该脚本演示了管道符、输入输出重定向的基本使用方法,运行结果如图7-21~图7-24所示。openEuler24.03LTS·Kernel6.683/103图7-21运行结果(1)openEuler24.03LTS·Kernel6.684/103实验项目:Shell编程图7-21运行结果(1)openEuler24.03LTS·Kernel6.685/103图7-22运行结果(2)openEuler24.03LTS·Kernel6.686/103实验项目:Shell编程图7-22运行结果(2)openEuler24.03LTS·Kernel6.687/103图7-23运行结果(3)openEuler24.03LTS·Kernel6.688/103实验项目:Shell编程图7-23运行结果(3)openEuler24.03LTS·Kernel6.689/103图7-24查看生成的文件openEuler24.03LTS·Kernel6.690/103实验项目:Shell编程图7-24查看生成的文件openEuler24.03LTS·Kernel6.691/103SECTION4法治教育:编程伦理与法律规范4法治教育:编程伦理与法律规范在信息技术迅猛发展的今天,编程已经成为一项重要的技能。然而,随着编程技术的普及,编程伦理与法律规范的问题也日益凸显。★(重点)作为编程学习者,不仅要掌握编程技术,更要树立正确的编程伦理观念,遵守相关的法律规范。编程伦理是指在编程过程中应遵循的道德准则和行为规范。它要求从业人员在编程时尊重他人的知识产权,不抄袭、不盗用他人的代码和成果;同时,还要注重代码的质量和安全性,避免编写恶意软件或存在安全漏洞的程序,对社会和他人造成危害。此外,编程伦理还要求从业人员保持诚信和责任感,对编写的程序负责,及时修复发现的问题和漏洞。法律规范方面,各国都制定了相关的法律法规来规范编程行为。例如,知识产权保护法规定了对软件著作权的保护,禁止未经授权的复制、分发和使用他人的软件。网络安全法则要求编程者必须遵守网络安全规定,不得利用编程技术从事非法活动,如黑客攻击、网络诈骗等。此外,还有一些针对特定领域的法律规范,如医疗软件必须遵守医疗行业的规定和标准。作为一名学习者,应该积极了解并遵守相关的编程伦理与法律规范。openEuler24.03LTS·Kernel6.693/103法治教育:编程伦理与法律规范这不仅有助于树立正确的价值观,还能保护个人的合法权益,避免陷入法律纠纷。★(重点)同时,从业人员也应该积极倡导和传播正确的编程伦理观念,为构建一个健康、安全的编程环境贡献自己的力量。在未来的学习和实践中,要时刻牢记编程伦理与法律规范的重要性,将它们融入到编程思维和行动中。只有这样,才能成为既有技术实力又有道德操守的优秀编程人才,为社会的发展和进步做出更大的贡献。本章小结openEuler24.03LTS·Kernel6.694/103第7章Shell基本知识与命令★重点本章小结openEuler24.03LTS·Kernel6.695/103本章小结·核心知识回顾①本章介绍了Shell脚本编程的基础知识,涵盖了变量的定义、引用、运算,及环境变量的使用。讨论了变量的设置与取用规则,并介绍了如何通过$符号或${变量名}来引用变量。此外,还介绍了如何使用unset命令取消变量,及如何通过export命令将变量提升为环境变量,使其在子进程中可用。在变量运算方面,介绍了字符串和数学运算的基本规则,包括非空检查、默认值设置、值的修改,及使用expr命令和方括号[]进行数学运算。②本章还介绍了正则表达式的基本概念和应用。通过实例,展示了如何使用正则表达式进行模式匹配,包括单个字符匹配、重复匹配、非贪婪匹配和特殊匹配机制,强调了正则表达式引擎在匹配字符时的自前向后搜索特性,及如何通过条件匹配和特定的匹配标志来优化匹配过程。③最后,介绍了重定向和管道命令的使用方法。重定向允许用户将命令的输出保存到文件中,或从文件中读取输入,而管道命令则允许用户将多个命令的输出和输入串联起来,形成复杂的命令链。通过实例展示了如何使用重定向操作符>、>>、<和<<<,及如何使用管道将命令的输出传递给下一个命令的输入。④通过本章的学习,读者应能够熟练掌握Shell脚本编程的基础知识,包括变量的定义和引用、数学和字符串运算、正则表达式的使用,及重定向和管道命令的应用。这些知识为编写高效、灵活的Shell脚本奠定了坚实的基础,让读者能够在Shell脚本的学习中更加得心应手。第7章Shell基本知识与命令★重点本章小结openEuler24.03LTS·Kernel6.696/103本章小结·重点命令速查表分类命令作用/说明变量name=value定义Shell变量变量echo$name/${name}引用变量值变量unsetname取消变量环境变量exportname=value提升为环境变量(子进程可用)运算expr2+3数学运算(运算符两侧需空格)运算RES=$(((2+3)*4))算术扩展运算正则grep'pattern'file正则匹配(\b、[A-Z]、{n})管道cmd1|cmd2管道串联命令输出与输入重定向cmd>file/>>file输出重定向/追加式重定向cmd<file/<<EOF输入重定向/分界符效率history/!!/alias历史命令/执行上一条/别名脚本chmodu+xlab.sh添加执行权限并运行脚本第7章Shell基本知识与命令★重点本章小结openEuler24.03LTS·Kernel6.697/103本章小结·学习建议(5条)1.掌握变量基础变量定义、引用($与${})、unset取消、export提升环境变量。2.熟练运算规则expr与$(())数学运算,注意运算符两侧空格与特殊符号转义。3.活用正则表达式单个字符/重复/非贪婪匹配,注意引用与转义规则。4.善用管道重定向>、>>、<、<<<与|串联命令,构建复杂数据处理流程。5.勤练提升效率history、alias、通配符(*、?、[])提高交互效率。练习题练习题•选择题•Shell变量中实际存储的是什么类型的信息?()A.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 草原布病高危人群定期筛查科普课件
- 草原蜱虫监测与密度调查科普课件
- 秋冬睡眠质量提升方法课件
- 国际残疾人日后续篇:如何帮助残障人士课件
- (完整版)康复医学考试试题及答案
- 洪雅2026注册验收师练习试卷
- 2025年安陆三年级语文阅读培训试卷
- 2025年度耳鼻喉科主治医师工作总结暨工作计划
- 2026零售定点药店医保培训考试考核试题(+答案解析)
- (2026)司法考试题库试题附答案
- 2027届浙江名校联盟高三一模高考物理模拟试卷(含答案详解)
- 2026年甘肃省酒泉市属事业单位选调工作人员29人(第二批)笔试参考题库及答案解析
- 2026年公卫执业医师《医学微生物学》试题及答案
- 青岛华通集团招聘笔试题解析
- (2026秋版)部编版五年级语文上册全册教案(教学设计)
- 2025年重庆市垫江县小升初数学试卷附答案解析
- 2026年低压电工实操考试题及完整答案(全国通-用)
- 唐僧人物性格与取经信念解读
- 2026年海南(专升本)数学考试题库(含答案)
- 2026版SSC儿童脓毒症指南解读
- 逻辑与情感的终极博弈《嫌疑人X的献身》深度解析
评论
0/150
提交评论