第八章shell编程PPT课件.pptx_第1页
第八章shell编程PPT课件.pptx_第2页
第八章shell编程PPT课件.pptx_第3页
第八章shell编程PPT课件.pptx_第4页
第八章shell编程PPT课件.pptx_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

第八章shell编程 8 1vi编辑器8 2shell概述8 3shell的功能8 4常用shell8 5shell程序设计 2020 3 27 1 vi编辑器是所有Unix及Linux系统下标准的编辑器 它的强大不逊色于任何最新的文本编辑器 由于对Unix及Linux系统的任何版本 vi编辑器是完全相同的 因此您可以在其他任何介绍vi的地方进一步了解它 Vi也是Linux中最基本的文本编辑器 学会它后 您将在Linux的世界里畅行无阻 Linux中的vi编辑器叫vim 它是vi的增强版 viImproved 与vi编辑器完全兼容 而且实现了很多增强功能 8 1vi编辑器 2020 3 27 2 vi的三种工作模式 文本编辑模式 插入模式 命令模式和行编辑模式 底线命令行模式 及其切换方式 在文本编辑模式 工作在插入状态下 下vi将原样接受用户从键盘上输入的字符 ESC字符除外 命令模式下主要完成编辑文件上的光标定位 插入 删除 剪切 粘贴 移动 查找与修改文件内容等 行编辑模式下主要完成文件的存储 退出和执行shell命令等 8 1vi编辑器 2020 3 27 3 基本命令 定位光标k 向上 j 向下 h 向左 l 向右 10k 向上移动10行 5h 向左移动5个字符插入或添加i 光标前插入字符 a 光标后插入字符 o 当前行后添加新行 删除x 删光标后的字符 X 删光标前的字符 D 删除光标后的整行 8 1vi编辑器 2020 3 27 4 行编辑命令保存 退出保存 w 退出 q 强制退出 q 保存并退出 wq执行shell命令挂载U盘 mount dev sdb1 mnt usb从文件中读取rfile name将指定内容写入文件将第3行至10行内容写到另一个文件中 3 10wfile name 8 1vi编辑器 2020 3 27 5 实验8 A vi编辑器的使用 实验目的掌握编辑器vi的基本用法练习三种模式的切换练习光标定位 删除 插入练习行命令模式下读入 写入 执行shell实验方法 可将 etc a2ps cfg复制到 mnt进行编辑测试 实验原理实验步骤实验报告记录下每一步骤的过程 包括所有改的信息 遇到的问题和解决方法等 2020 3 27 6 概念Shell是系统的用户界面 提供了用户与内核进行交互操作的一种接口 它接收用户输入的命令并把它送入内核去执行 实际上Shell是一个命令解释器 它解释由用户输入的命令并且把它们送到内核 不仅如此 Shell有自己的编程语言用于对命令的编辑 它允许用户编写由shell命令组成的程序 Shell编程语言具有普通编程语言的很多特点 比如它也有循环结构和分支控制结构等 用这种编程语言编写的Shell程序与其他应用程序具有同样的效果 8 2shell概述 2020 3 27 7 shell有两种执行指令的方式 一种方法是用户事先编写一个sh脚本文件 内含shell脚本 而后使用shell程序执行该脚本 这种方式 我们习惯称为shell编程 第二种形式 则是用户直接在shell界面上执行shell命令 由于shell界面的关系 大家都习惯一行行的书写 很少写出成套的程序来一起执行 所以也称命令行 8 2shell概述 2020 3 27 8 1 命令行解释 过滤去除多余的空格 Tab 换行符2 保留字 shell编程中的关键字 do done for if then等3 通配符 ls 列出当前目录下的所有文件 目录及该目录中的文件 文件名以 开头的隐含文件除外 因为 不匹配这类字符串 lsz txt列出当前目录下以z字符开始 以txt字符串结束 中间为任意两个字符的所有文件 如z0 txt z1 txt等等 ls a c 列出当前目录下所有以a或c字符开头的文件 目录及该目录中的文件 该命令实际上与ls a c 命令等价 ls a t 列出当前目录下所有不以a到t字符开头的文件 目录及该目录中的文件 4 访问和处理程序及命令 8 3shell的功能 2020 3 27 9 5 文件处理 输入 出重定向和管道 1管道符 管道符 使你可以将一个命令的输出作为另一个命令的输入 参考示例 ls grepzxj执行该命令时 shell将首先执行ls命令 并将ls的输出传递给grep命令 由于grep命令的功能是查找内容包含指定表达式或字符串 zxj 的文件 因此 这个包含管道符的命令将显示出当前目录中所有文件名包含zxj字符串的文件 2输入重定向符 输入重定向符的功能是使命令从给定的文件中读取数据 参考示例 wc l temp txt该命令将文件temp txt作为wc命令的输入 统计文件中的行数 8 3shell的功能 2020 3 27 10 5 文件处理 输入 出重定向和管道 3输出重定向符 输出重定向符的功能是使命令的输出存入指定的文件 参考示例 who userlog把命令who的输出重定向到文件userlog中 4输出附加重定向符 输出附加重定向符的功能是将命令输出的内容附加到指定文件的末尾 参考示例 ls filelist把当前目录中的文件 目录名附 添 加到文件filelist的末尾 8 3shell的功能 2020 3 27 11 6 命令组合 表示按顺序执行命令 root localhostroot 该命令表由当前shell执行 先进入 root目录 然后执行ls l命令 命令表执行完毕后当前目录已经改变为root目录 8 3shell的功能 2020 3 27 12 7 命令替换命令的替换是将一个命令的输出作为另外一个命令的参数 而不是作为另外一个命令的输入 这是与重定向不同的地方 使用格式 command1 command2 arguments 参考示例 root localhostroot cp ls txt zxj先列出当前目录下所有 txt文件并将它们作为cp命令的参数之一 源文件 复制到当前目录下名为zxj的目标目录中 8 变量维护 9 环境设置 10 shell编程 8 3shell的功能 2020 3 27 13 实验8 B 熟悉shell常用功能 实验目的理解shell的概念练习通配符功能练习输入输出和重定向和管道功能练习命令组合功能练习命令替换功能实验方法 测试练习书中参考示例 实验原理实验步骤实验报告记录下每一步骤的过程 包括所有改的信息 遇到的问题和解决方法等 2020 3 27 14 Bash特色1 命令行自动补齐按键2 命令历史记录上下方向键3 为命令起别名4 系统提示符5 设置功能键 8 4常用shell 2020 3 27 15 8 5 1shell程序的基本结构1 命令语句 shell命令 赋值 输出等2 流程控制语句 if while for等3 注释语句 开头为使程序兼容性高 一般在开头加 bin sh 一般将程序存放在用户目录下的bin文件夹下 例如 root bin 8 5shell程序设计 2020 3 27 16 8 5 2shell程序的编辑与运行1 编辑常用vi编辑2 运行方式一 a 现将shell文件权限设置为可执行 chmod xfilenameb 在当前目录下输入 filename 按回车即可执行方式二 在当前目录下直接输入 shfilename 按回车即可执行 8 5shell程序设计 2020 3 27 17 8 5 3shell命令的构成在本小节开始部分 我们讲过shell程序的语句可以是Shell命令 而命令的构成又可以分为简单命令 命令和命令清单 它们既可以用在命令行方式下从键盘直接输入又可以用在shell程序中 1 简单命令这种命令实际上就是单个可执行文件的名称和参数 在这种命令中可以使用输入 输出的重定向功能 2 命令由简单命令和shell控制命令组合而成 命令实际上是将简单命令用某种方式将输入 输出连接起来 大多数情况是使用管道 Shell将分别创建进程去处理管道前后的命令 这种命令的返回码是管道中最后一个被执行的简单命令的返回码 参考示例 root localhostroot ls wc l 8 5shell程序设计 2020 3 27 18 8 5 3shell命令的构成3 命令清单这种特殊的清单是由分号 与号 and if 号 or if 号分隔的一个或多个命令列表 1 分号分隔的各个命令 shell将按先后顺序执行 这种有先后顺序的执行方式称为异步执行方式 2 shell将把与号 前面的那条命令在后台执行 3 号的语法格式为 命令1 命令2 命令n 前的命令执行成功后才执行 后面的命令 4 号的语法格式为 命令1 命令2 命令n 前的命令执行不成功后才执行 后面的命令 8 5shell程序设计 2020 3 27 19 8 5 4变量1 用户变量与赋值在shell程序中 你可以将任何一个无空格的字符串作为一个用户变量 而且不必预先声明就可以用等号对用户变量赋值 但是有两点需要注意 bash下 第一 在等号前后均不能有空格 第二 当需要将一个包含空格的字符串赋给用户变量时 应用单引号将该字符串括起来 参考示例 OS LinuxProgrammer zhangxiaojin Number 15 8 5shell程序设计 2020 3 27 20 8 5 4变量1 用户变量与赋值shell还提供了另外两种赋值方式 第一 从标准输入设备读入用户变量的值 这是由read命令来实现的 具体用法为 read用户变量名当shell程序执行到该行时 将等待用户从键盘输入 当用户按下回车键时shell把你输入的内容赋给用户变量 第二 将一个命令执行后输出的内容赋给指定的变量 具体用法为 用户变量 命令 8 5shell程序设计 2020 3 27 21 8 5 4变量2 引用变量与echo命令在shell语言中 对所有的变量 用户变量 环境变量 位置变量 内部变量 的引用方法都是一样的 只要在变量前加 符号就意味着是引用变量 如果要在屏幕上显示字符 字符串或变量的内容 则可以使用echo命令 8 5shell程序设计 2020 3 27 22 8 5 4变量3 环境变量与设置环境变量是用户环境变量的简称 前面我们讲到的HOME PATH HISTSIZE PS1和PS2等都是常常用到的环境变量 查看所有的环境变量可以用set命令 输入命令 echo PATH输出结果 PATH usr kerberos sbin usr kerberos bin zxj usr local sbin usr local bin sbin bin usr sbin usr bin usr X11R6 bin root bin下面两条命令的区别 输入 PATH root xj输入 PATH echo PATH root xj 8 5shell程序设计 2020 3 27 23 8 5 4变量4 位置变量与相关命令在shell中有一种特殊的变量 称为位置变量 位置变量用于存放那些传递给命令行上shell程序或shell脚本函数的参数 这些变量是数字0到9 shell将命令行中的参数依次赋给变量1 2 9 将命令 程序 名赋给变量0 这种位置变量的功能与MS DOS操作系统中的位置变量的功能是类似的 用户不能简单地用等号给它们赋值 但是可以用set命令来赋值 假设某个shell程序名为test 执行带3个参数 则shell解释执行时位置变量0的内容为test 位置变量1的内容为参数1 依此类推 shift命令shift命令的功能是使第一个命令行参数无效 并将位置变量2的值移给位置变量1 将位置变量3的值移给位置变量2 将位置变量10的值移给位置变量9 该命令不会改变位置变量0的值 8 4shell程序设计 编写的程序名为testshift 程序内容为 echo 1 2 3shiftecho 1 2 3shiftecho 1 2 3 root localhostroot testshiftXYZ显示结果为 XYZYZZ 2020 3 27 24 8 5 4变量4 位置变量与相关命令2 set命令set命令的功能可以是显示变量及其值 设置或还原shell的属性 设置位置变量的值 设编写的程序名为testset 程序内容为 echo 1 2 3setXYZecho 1 2 3将该程序存放在用户主目录下的bin目录中并设置可执行的权限后 键入 root localhostroot testsetxyz显示结果为 xyzXYZ 8 4shell程序设计 2020 3 27 25 8 5 4变量5其他shell变量在shell程序设计中经常使用的其他shell变量还有 1 变量该变量存放传递给shell程序命令行参数的个数 2 变量该变量存放shell程序中最后一条命令的返回码 在Linux系统中 每条命令执行完后都会返回一个值 这个值称为返回码 一般 执行成功时返回0 执行不成功返回非0的值 Shell程序的最终返回码也就是最后一条被执行命令的返回码 3 或 变量该变量存放所有输入的命令行参数 并且每个参数之间用空格分隔 在Linux系统中使用 或 变量是等价的 8 5shell程序设计 2020 3 27 26 编写一个名为test的shell程序 其内容如下 bin sh TestfileforvariablesinShell OS RedHatLinux9 0 programmer zhangxiaojin clearecho OSSystem Programmedby programmerechoHomeDirectory HOMEechoThecommandlineis echo 0 echoBeforeshiftoperationechoNumberofarguments echoAllthearguments echo 0 0 1 1 2 2shiftechoAfteroneshiftoperationechoNumberofarguments echoAllthearguments echo 0 0 1 1 2 2 8 5shell程序设计 执行test56789后显示显示结果为 RedHatLinux9 0System ProgrammedbyzhangxiaojinHomeDirectory rootThecommandlineis root bin test56789BeforeshiftoperationNumberofarguments 5Allthearguments 56789 0 root bin test 1 5 2 6AfteroneshiftoperationNumberofarguments 4Allthearguments 6789 0 root bin test 1 6 2 7 2020 3 27 27 8 5 5shell特殊字符屏蔽Shell中有些特殊字符具有特殊的含义 当这些字符要作为一般字符使用时 要让shell知道以便不再解释成特殊字符使用 这就是屏蔽的基本含义 常用屏蔽形式有 和 在一般情况下用双引号来实现的 也可以用单引号实现 但是 也有特殊的情况 当给变量的值中含有其他变量时 就只能使用双引号 反斜杠 也是屏蔽特殊字符的常用形式 前面讲过它是转义字符 常用于屏蔽单个特殊的字符 如 等字符 8 5shell程序设计 2020 3 27 28 8 5 5shell特殊字符屏蔽参考示例1 设有三个变量A B和C 分别对A B变量赋值后再做乘法运算 结果保存在变量C中并显示 实现的程序语句为 A 4B 5C expr A B echo C由于 在Linux系统中是通配符 因此 它作为乘法符号使用时需要将其转义系统才能识别 另外 在shell程序设计中算术运算必须以关键字expr开始 变量的值中含有其他变量时 就只能使用双引号 8 5shell程序设计 2020 3 27 29 8 5 6流程控制语句1 test语句与逻辑表达式test语句是shell程序设计中测试表达式或逻辑表达式最常用的语句 命令用法 testexpression或 expression 其中 expression是被测试的表达式或逻辑表达式 第一种用法必须显式指定test语句关键字 第二种用法采用一对方括号代替test语句 但表达式前后与方括号之间必须要有空格 表达式或逻辑表达式被test语句测试 如果测试结果为真 则test语句的返回码为0 否则返回码为非0 test语句可用于对各种运算符组成的表达式或逻辑表达式进行测试 也常常用于程序调试过程中检查程序运行的结果 8 5shell程序设计 2020 3 27 30 8 5 6流程控制语句2 运算符组成的表达式及说明 a 字符串比较 8 5shell程序设计 2020 3 27 31 8 5 6流程控制语句2 运算符组成的表达式及说明 b 整数比较 8 5shell程序设计 2020 3 27 32 8 5 6流程控制语句2 运算符组成的表达式及说明 c 文件属性判定运算符 8 5shell程序设计 2020 3 27 33 8 5 6流程控制语句2 运算符组成的表达式及说明 d 逻辑运算符用于表达式的与 或 非 取反 操作 组成逻辑表达式 8 5shell程序设计 2020 3 27 34 8 5 6流程控制语句3 运算符用法的注意点 1 任何运算符的前后都必须要有一个空格 2 如果使用shell变量值作为字符串String的值 当变量的值中包含有空格字符时 需要给 变量加上双引号 因为shell在处理变量时 遇有双引号将保留其内容 而省略双引号时将过滤掉空格 一般使用shell变量值时建议对 变量都加上双引号 8 5shell程序设计 2020 3 27 35 8 5 6流程控制语句if分支语句if分支语句执行时 先用test语句测试表达式或逻辑表达式的值并根据测试的结果决定下一步要执行的命令 1 语法格式if分支语句有三种格式 每种格式又有多种等价的写法 第一种是简单格式 if testexpression thencommandsfi或写为 if expression thencommandsfi或写为 if expression thencommandsfiexpression一般是表达式或逻辑表达式 如果是命令或命令组合的返回码不必用test语句 圆括号可以省略 但在expression后要加上分号 如果then不换行 则方括号后的分号 不能省略也不能用空格代替 否则then必须换行 commands是要执行的命令列表 if语句的结束一定要有结束标志fi 它是if的倒写 8 5shell程序设计 2020 3 27 36 8 5 6流程控制语句第三种是连用 嵌套 格式 if testexpression1 thencommands1elif testexpression2 thencommands2elsecommands3fi或写为 8 5shell程序设计 2020 3 27 37 8 5 6流程控制语句参考示例1 编写一个名为iffile程序 它执行时判断 bin目录下date文件是否存在 程序代码 bin sh fname bin dateif test f fname thenecho exist fi 8 5shell程序设计 2020 3 27 38 8 5 6流程控制语句参考示例2 编写一个名为greet的问候程序 它执行时能根据系统当前的时间向用户输出问候信息 设从半夜到中午为早晨 中午到下午六点为下午 下午六点到半夜为晚上 程序代码 bin sh hour date cut c10 11 iftest hour ge0 a hour le11 thenecho Goodmorning eliftest hour ge12 a hour le17 thenecho Goodafternoon elseecho Goodevening fi 8 5shell程序设计 2020 3 27 39 8 5 6流程控制语句参考示例3 编写一个名为ifuser的程序 它执行时带用户名作为命令行参数 判断该用户是否已经在系统中登录 并给出相关信息 程序代码 bin sh iftest ne1thenecho Incorrectnumberofarguments echo Usage ifuserusername elseuser 1ifwho grep q user thenecho 1 userisloggedon exit0elseecho 1 userisnotloggedon exit1fifi 8 5shell程序设计 2020 3 27 40 8 5 6流程控制语句3 case语句语法格式casestringinpattern 1 commands1 pattern 2 commands2 pattern N commandsN commands esac 8 5shell程序设计 8 5 6流程控制语句4 for循环语句语法格式 forloop indexinarg listsdocommandsdone或forloop indexinarg lists docommandsdone 2020 3 27 41 8 5 6流程控制语句5 while循环

温馨提示

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

评论

0/150

提交评论