Linux网络操作系统教程课件 第7章 Shell编程基础_第1页
Linux网络操作系统教程课件 第7章 Shell编程基础_第2页
Linux网络操作系统教程课件 第7章 Shell编程基础_第3页
Linux网络操作系统教程课件 第7章 Shell编程基础_第4页
Linux网络操作系统教程课件 第7章 Shell编程基础_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章Shell编程基础【教学目标】理解ShellScript的建立与执行方法。理解Shell变量的种类和作用。掌握Shell运算符的使用方法。掌握ShellScript的运行方式以及程序设计的流程控制。【素质目标】通过Shell编程实践,强调精益求精的工匠精神,鼓励学生在解决实际问题时不断优化脚本、提高效率,培养对工作认真负责的态度。增强学生的网络安全意识,提醒学生在编写脚本过程中遵守安全规范,防止出现因脚本漏洞而引发的信息安全事故。7.1认识ShellScriptShellScript是针对Shell所写的“脚本”。ShellScript是一种利用Shell功能编写的程序,它采用纯文本文件格式,融合了Shell命令、语法、正则表达式以及管道操作和数据流重定向等功能,能够实现预定的处理目标。7.1.1ShellScript简介

简单地说,ShellScript类似于早期的DOS中的批处理命令,其最简单的功能是将许多命令汇总起来,让用户能够轻松地处理复杂的操作。

用户只要运行ShellScript文件,就能够一次运行多个命令。ShellScript能提供数组循环、条件与逻辑判断等重要功能,使得用户可以直接使用Shell来编写程序,而不必使用C语言等传统程序设计语言来编写程序。ShellScript可以被简单地看作批处理文件,也可以被看作一种程序设计语言,且这种程序设计语言是由Shell与相关工具命令组成的,所以不需要编译即可运行。另外,ShellScript具有排错功能,可以帮助系统管理员快速地管理主机系统。7.1.2ShellScript的编写和执行1.ShellScript的编写注意事项(1)命令的执行是从上至下、从左至右进行的。(2)命令、参数与选项间的多个空格都会被忽略。(3)空白行会被忽略,按“Tab”键生成的空白行被视为空格。(4)按“Enter”键后,尝试开始执行该行或该串命令。(5)如果一行的内容太多,则可以使用“\[Enter]”来延伸至下一行。(6)“#”可作为注释,加在“#”后面的数据将全部被视为注释而被忽略。2.执行ShellScript

假设程序文件是/home/script/shell01.sh,执行ShellScript时可以采用以下3种方式。(1)输入脚本的绝对路径或相对路径。(2)执行bash或sh脚本。(3)在脚本路径前加“.”或source。3.编写ShellScript

一个ShellScript通常包括如下几部分。(1)首行。首行表示脚本将要调用的Shell解释器。例如:#!/bin/bash(2)注释。注释符号“#”放在需要注释内容的前面,建议备注ShellScript的功能以防日后忘记。(3)可执行内容。可执行内容是使用的Linux命令或以程序设计语言编写而成的程序。4.编写ShellScript的良好习惯

养成编写ShellScript的良好习惯是很重要的,但初学者在刚开始编写程序的时候,十分容易忽略良好习惯的培养,认为写出的程序只要能够运行即可。其实,程序的注释越清楚,日后维护越方便,对系统管理员的成长有很大帮助。f建议养成编写ShellScript的良好习惯,在每个ShellScript的文件头处包含如下内容。(1)ShellScript的功能。(2)ShellScript的版本信息。(3)ShellScript的制作人与联系方式。(4)ShellScript的版权声明。(5)ShellScript的历史记录。(6)ShellScript内较特殊的命令,使用绝对路径的方式来进行操作。(7)预先声明与设置ShellScript运行时需要的环境变量。5.read命令read命令的格式如下。read[-ers][-a数组][-d分隔符][-i缓冲区文字][-n读取字符数][-N读取字符数][-p提示符][-t超时][-u文件描述符][名称...]7.2编写ShellScript7.2.1Shell变量Shell变量是Shell传递数据的一种方式,是用来代表每个取值的符号名。当ShellScript需要保存信息,如一个文件名或一个数字时,Shell会将其存放在一个Shell变量中。

设置Shell变量的规则如下。(1)变量名称可以由字母、数字和下画线组成,但是不能以数字开头,环境变量名称建议采用大写字母,以便于区分。(2)在bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。(3)变量与值用等号连接,等号两侧不能有空格。(4)如果变量的值包含空格,则需要使用单引号或者双引号将其引起来。Shell中的变量分为环境变量、位置参数变量、预定义变量和用户自定义变量,可以通过set命令查看系统中的所有变量。(1)环境变量用于保存与系统操作环境相关的数据,如HOME、PWD、SHELL、USER等。(2)位置参数变量主要用于向脚本中传递参数或数据,变量名不能自定义,变量的作用固定。(3)预定义变量是bash中已经定义好的,变量名不能自定义,变量的作用固定。(4)用户自定义变量以字母或下画线开头,由字母、数字和下画线组成,大小写字母的含义不同,变量名长度没有限制。1.变量的使用

通常使用大写字母来命名变量,变量名以字母或下画线开头。在使用变量时,要在变量名前面加上“$”。(1)变量的赋值。(2)使用单引号和双引号的区别。(3)列出所有变量。(4)撤销变量。2.环境变量

用户自定义变量只在当前的Shell中生效,而环境变量会在当前Shell及其所有子Shell中生效。如果将环境变量写入相应的配置文件,则这个环境变量会在所有的Shell中生效。3.位置参数变量$n:$0代表命令本身,$1~$9代表接收的第1~9个参数,10及以上的参数需要用{}括起来。例如,${10}代表接收的第10个参数。$*:代表接收所有参数,并将所有参数看作一个整体。$@:代表接收所有参数,对每个参数分别进行处理。$#:代表接收的参数个数。4.预定义变量

预定义变量是在Shell中已经定义的变量,和环境变量有一些类似。不同的是,预定义变量不能重新定义,用户只能根据Shell的定义来使用这些变量。

预定义变量及其功能说明如表7.1所示。预定义变量功能说明$?最后一次执行的命令的返回状态。如果这个变量的值为0,则证明上一条命令执行正确;如果这个变量的值不为0(具体是什么数值由命令来决定),则证明上一条命令执行错误$$当前进程的进程号$!后台运行的最后一个进程的进程号表7.1

预定义变量及其功能说明7.2.2Shell运算符Shell支持很多运算符,包括算术运算符、关系运算符、布尔运算符、字符串运算符、逻辑运算符、文件测试运算符、$(

)和''、${}、[

]、((

))和[[

]]等。1.算术运算符

原生的bash并不支持算术运算,但可以通过其他命令来实现算术运算功能,如awk和expr命令,其中expr命令更为常用。expr命令是一个表达式计算命令,使用它能完成表达式的求值操作。

算术运算符有以下几个。(1)+(加法):如`expr$X+$Y`。(2)-(减法):如`expr$X-$Y`。(3)*(乘法):如`expr$X\*$Y`。(4)/(除法):如`expr$X/$Y`。(5)%(取余):如`expr$X%$Y`。(6)=(赋值):如X=$Y,表示把变量Y的值赋给变量X。(7)==(相等):用于比较两个数字,相同则返回true,否则返回false。(8)!=(不相等):用于比较两个数字,不相同则返回true。2.关系运算符

关系运算符只支持数字,不支持字符串,除非字符串是数字形式。

常用的关系运算符如表7.2所示,其中假设变量X为10,变量Y为20。运算符功能说明举例-eq检测两个数是否相等,相等则返回true,否则返回false[$X-eq$Y]返回

false-ne检测两个数是否不相等,不相等则返回true,否则返回false[$X-ne$Y]返回

true-gt检测运算符左侧的数是否大于运算符右侧的数,如果是,则返回true,否则返回false[$X-gt$Y]返回

false-lt检测运算符左侧的数是否小于运算符右侧的数,如果是,则返回true,否则返回false[$X-lt$Y]返回

true-ge检测运算符左侧的数是否大于或等于运算符右侧的数,如果是,则返回true,否则返回false[$X-ge$Y]返回

false-le检测运算符左侧的数是否小于或等于运算符右侧的数,如果是,则返回true,否则返回false[$X-le$Y]返回

true表7.2

常用的关系运算符3.布尔运算符

常用的布尔运算符如表7.3所示,其中假设变量X为10,变量Y为20。运算符功能说明举例-a与运算,两个表达式都为true时才返回true[$X-lt20-a$Y-gt10]返回true-o或运算,只要有一个表达式为true,就返回true,否则返回false[$X-lt20-o$Y-gt10]返回true!非运算,表达式为true时返回false,否则返回true[!false]返回true表7.3

常用的布尔运算符4.字符串运算符

常用的字符串运算符如表7.4所示,其中假设变量X为10,变量Y为20。运算符功能说明举例=检测两个字符串是否相等,相等则返回true,否则返回false[$X=$Y]返回false!=检测两个字符串是否不相等,不相等则返回true,否则返回false[$X!=$Y]返回true-z检测字符串长度是否为0,为0则返回true,否则返回false[-z$X]返回false-n检测字符串长度是否不为0,不为0则返回true,否则返回false[-n"$X"]返回true$检测字符串是否为空,不为空则返回true,否则返回false[$X]返回true表7.4

常用的字符串运算符5.逻辑运算符

常用的逻辑运算符如表7.5所示,其中假设变量X为10,变量Y为20。运算符功能说明举例&&逻辑与运算[$X-lt100&&$Y-gt100]返回false||逻辑或运算[$X-lt100||$Y-gt100]返回true表7.5

常用的逻辑运算符6.文件测试运算符运算符功能说明举例-bfile检测文件是否为块设备文件,如果是,则返回true,否则返回false[-b$file]返回

false-cfile检测文件是否为字符设备文件,如果是,则返回true,否则返回false[-c$file]返回

false-dfile检测文件是否为目录文件,如果是,则返回true,否则返回false[-d$file]返回

false-ffile检测文件是否为普通文件(既不是目录文件,又不是设备文件),如果是,则返回true,否则返回false[-f$file]返回

true-gfile检测文件是否设置了SGID位,如果是,则返回true,否则返回false[-g$file]返回

false-kfile检测文件是否设置了黏着位(StickyBit),如果是,则返回true,否则返回false[-k$file]返回

false-pfile检测文件是否为有名管道,如果是,则返回true,否则返回false[-p$file]返回

false-ufile检测文件是否设置了SUID位,如果是,则返回true,否则返回false[-u$file]返回

false-rfile检测文件是否可读取,如果是,则返回true,否则返回false[-r$file]返回

true-wfile检测文件是否可写入,如果是,则返回true,否则返回false[-w$file]返回

true-xfile检测文件是否可执行,如果是,则返回true,否则返回false[-x$file]返回

true-sfile检测文件是否为空(文件大小是否大于0),如果不为空,则返回true,否则返回false[-s$file]返回

true-efile检测文件(包括目录)是否存在,如果是,则返回true,否则返回false[-e$file]返回

true表7.6

常用的文件测试运算符7.$()和''

在Shell中,$()和''都可用于命令替换。这两种方式都可以得到内核的版本号。其各自的优缺点如下。(1)$()的优缺点。优点:输入直观,不容易输入错误或看错。缺点:不是所有的Shell都支持$()。(2)''的优缺点。优点:''基本上可在全部的LinuxShell中使用,若写成ShellScript,则移植性比较高。缺点:''很容易输入错误或看错。8.${}${}用于变量替换,一般情况下,$VAR与${VAR}并没有什么不同,但是${}能比较精确地限定变量名称的范围。9.$[]和$(())$[]和$(())的作用是一样的,都用于算术运算,支持+、-、*、/、%运算。但要注意的是,bash只能做整数运算,浮点数是被当作字符串处理的。10.[][]为test命令的另一种形式,使用时要注意以下几点。(1)必须在其左括号的右侧和右括号的左侧各加一个空格,否则会报错。(2)test命令使用标准的数学比较符号来表示字符串的比较,而[]使用文本符号来表示数值的比较。(3)大于符号或小于符号必须进行转义,否则会被理解成重定向操作。11.(())和[[]](())和[[]]分别是[]针对数学比较表达式和字符串表达式的加强版。(())不需要将表达式中的大于符号或小于符号转义,其除了可以使用标准的算术运算符外,还增加了a++(后增)、a--(后减)、++a(先增)、--a(先减)、!(逻辑求反)、~(位求反)、**(幂运算)、<<(左位移)、>>(右位移)、&(位布尔与)、|(位布尔或)、&&(逻辑与)、||(逻辑或)等运算符。[[]]增加了模式匹配功能。7.2.3Shell流程控制语句Shell流程控制语句是指改变ShellScript运行顺序的命令,可以是不同位置的命令,也可以在两段或多段程序中选择一个程序运行。Shell流程控制语句一般可以分为以下几种。(1)无条件语句:继续运行位于不同位置的一段命令。(2)条件语句:当特定条件成立时,运行一段命令,如单分支if条件语句、多分支if条件语句、case语句。(3)循环语句:运行一段命令若干次,直到特定条件成立,如for循环语句、while循环语句、until循环语句。(4)跳转语句:运行位于不同位置的一段命令,但完成后仍会继续运行原来要运行的命令。(5)停止程序语句:不运行任何命令(无条件终止)。1.单分支if条件语句

单分支if条件语句的格式如下。if[条件判断];then

程序fi或者if[条件判断]then

程序fi2.多分支if条件语句

多分支if条件语句格式如下。if[条件判断1]then

当条件判断1成立时,执行程序1elif[条件判断2]then

当条件判断2成立时,执行程序2……else

当所有条件都不成立时,最后执行的程序fi3.case语句case语句相当于一个多分支if条件语句,case变量的值用来匹配value1、value2、value3、…、valueN,匹配之后执行其后的命令,直到遇到双分号(;;)为止。case语句以esac作为终止符。case语句的格式如下。case值invalue1)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论