收藏 分享(赏)

项目四 Linux Shell程序设计.ppt

上传人:dzzj200808 文档编号:3358391 上传时间:2018-10-18 格式:PPT 页数:42 大小:184KB
下载 相关 举报
项目四 Linux Shell程序设计.ppt_第1页
第1页 / 共42页
项目四 Linux Shell程序设计.ppt_第2页
第2页 / 共42页
项目四 Linux Shell程序设计.ppt_第3页
第3页 / 共42页
项目四 Linux Shell程序设计.ppt_第4页
第4页 / 共42页
项目四 Linux Shell程序设计.ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

1、Linux系统管理与维护,项目四 Linux Shell程序设计,Linux系统管理与维护,【学习要点】,掌握Shell的基本语法结构。 学会编写并执行Shell脚本程序。 学会在Linux下进行进程调度和作业调度。,Linux系统管理与维护,任务一 学习变量与表达式,Shell是操作系统最外面的一层,负责管理用户与操作系统之间的交互,例如等待用户输入,向操作系统解释用户的输入,以及处理操作系统的各种输出结果。 除了作为命令解释器之外,Shell本身还是一个解释型的程序设计语言。Shell程序设计语言支持变量、表达式、函数和流程控制结构等,任何在终端能够执行的命令也放到Shell程序。 4.1

2、.1 变量 在Shell中有三种变量:系统变量,环境变量,用户变量。其中系统变量在对参数判断和命令返回值判断会使用,环境变量主要是在程序运行的时候需要设置,用户变量在编程过程中使用最多。 这几种变量的赋值方法各不相同,主要有:直接设置变量值、变量之间的置换、从命令行参数获取、从环境变量获取和用户输入等几种方式。 引用变量一般采用“$variable”的形式引用变量variable的值。,Linux系统管理与维护,1系统变量 Shell常用的系统变量用于提供系统信息。系统变量一般采用命令行参数获取。 2环境变量 Shell在开始执行前就已经定义了一些与系统工作环境有关的变量。 显示环境变量用ec

3、ho命令。 在bash中,设置环境变量用set命令 。用unset命令可将环境变量重新设置为系统默认值,。 用户并不需要每次登录后都对各种环境变量进行手工设置,通过环境设置文件,用户的工作环境的设置可以在登录的时候由系统自动来完成。环境设置文件有两种:系统环境设置文件和用户环境设置文件。,Linux系统管理与维护,Linux系统管理与维护,Linux系统管理与维护,3用户变量 不管系统变量和环境变量有多少,对于需求来说,总是不够的。用户常常需要自定义一些变量,这些变量就称为用户变量。 定义用户变量的语法为: name=string 局部变量与全局变量 Shell变量也有其规定的作用范围。局部变

4、量的作用范围仅仅在其命令行所在的Shell或Shell脚本文件中。全局变量的作用范围则包括本Shell进程及其所有子进程,即相当于环境变量, 贯穿于整个当前用户环境。可以使用export命令将局部变量设置为全局变量。 export name=string,Linux系统管理与维护,【操作实例4.1】 用文本编辑器gedit编写一个Shell脚本test1.sh,显示执行脚本时输入的参数及参数总数目,并定义一个局部变量和一个全局变量。,Linux系统管理与维护,4.1.2 表达式 Shell中的表达式分为算术运算表达式、关系与逻辑表达式和正则表达式等几种。 1.expr命令 expr命令的功能是

5、求表达式的值。 2. 算术表达式 算术表达式可以是由运算符+、-、*、/、=组成的表达式。 3. 关系与逻辑表达式 命令test与方括号 都用于进行条件测试,测试的结果返回逻辑值,即真true(0)和假false(1)。test和 可以相互替换。,Linux系统管理与维护,Linux系统管理与维护,Linux系统管理与维护,Linux系统管理与维护,Linux系统管理与维护,【操作实例4.2】 先练习使用表达式,然后用文本编辑器gedit编写一个计算1-5的平方的Shell脚本test2.sh,进一步熟悉表达式的作用。,Linux系统管理与维护,任务二 学习流程控制结构,4.2.1 分支结构

6、Shell程序中的条件语句主要有if语句、case语句。 1.if语句 if语句根据表达式的值来决定要执行的程序段落。其语法格式如下: if表达式1 then 语句块1 elif表达式2 then 语句块2 elif表达式3 then 语句块3 else 语句块n fi,Linux系统管理与维护,【操作实例4.3】 编写一个Shell脚本test3.sh,接收用户输入的文件名,然后在当前目录下检查该文件是否存在。,Linux系统管理与维护,2.case语句 case语句为用户提供了根据字符串或变量的值从多个选项中选择一项执行的方法。case语句的语法格式如下: case 字符串 in 值1|值

7、2) 语句块1; 值3|值4) 语句块2; 值5|值6) 语句块3; esac,Linux系统管理与维护,【操作实例4.4】 编写一个Shell脚本test4.sh,用case语句建立一个菜单,当用户选择菜单时,执行相应的操作。,Linux系统管理与维护,4.2.2 循环结构 Shell常见的循环语句有for循环、while循环、until循环。 1.for循环 for循环对一个变量所有可能的值都执行一个命令序列。赋给变量的几个数值既可以在程序内以数值列表的形式提供,也可以在程序以外以参数的形式提供。 for循环的一般格式如下: for循环变量 in列表 do 语句块 done for语句对i

8、n列表中的每一项都执行一次。列表可以是包括几个单词并且有空格分隔开的变量,也可以是直接输入的几个值。每执行一次循环,循环变量都被赋予列表中的当前值,直到最后一个为止。in列表子句也可以使用通配符。 in列表子句可以省略,此时,假定循环变量包含执行Shell程序时命令行的所有位置参数,即相当于in“$”。,Linux系统管理与维护,【操作实例4.5】 编写一个Shell脚本test5.sh,显示当前目录下的所有.sh文件的名称和内容。,Linux系统管理与维护,2.while循环和until循环 while语句与until语句具有类似的语法格式和功能。while语句会在测试条件为真时循环才执行,

9、语法如下: while 测试表达式 do 语句块 done until语句中当表达式的值为假时,循环才会继续执行命令: until 测试表达式 do 语句块 done,Linux系统管理与维护,【操作实例4.6】 编写一个Shell脚本test6.sh,脚本在执行时,接收用户输入的文件名,然后显示该文件的内容。,Linux系统管理与维护,3.break和continue break和continue无条件转移命令。break用于立即终止当前循环的执行,continue用于不执行循环中后面的语句而立即开始下一次循环的执行。这两个命令只有放在do和done之间才有效。,Linux系统管理与维护,【

10、操作实例4.7】 对【操作实例4.4】中的Shell脚本进行改进,用循环语句建立菜单,当用户选择了一次操作后,再次显示菜单供用户进行下一次选择,当用户按“q”键后,退出循环。Shell脚本的文件名为test7.sh。,Linux系统管理与维护,任务三 编辑与运行Shell脚本,4.3.1 vim的使用 vi/vim是Linux系统中使用最为普遍的全屏幕交互式文本编辑程序。它没有菜单,只有命令,但功能非常强大。vim可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制。 Vim有3种基本工作模式:命令模式、插入模式和末行模式。 运行Vim编辑器的命令格式是

11、: vim 选项 文件名 执行vim命令后,首先进入的是命令模式。用户输入进入插入模式的命令后,即可进入插入模式。,Linux系统管理与维护,图4-1 vim的运行模式及转换,Linux系统管理与维护,4.3.2 Shell编程 在Linux系统中,用Shell编写的批处理文件称为Shell脚本,它包含若干条命令和语句,可以解释执行。 Shell脚本的作用主要包括:自动执行命令;实现系统管理和维护;创建简单的应用;操作文本或文件。 1编写Shell脚本 Shell脚本包含如下成分: 注释部分:注释部分以#开头的行。 命令:在Shell脚本中可以出现任何在交互方式下可以使用的命令。 变量:在Sh

12、ell脚本中既可以使用用户自定义的变量,也可以使用系统环境变量。Shell变量分为局部变量和全局变量。局部变量的作用范围仅仅限制在其命令行所在的Shell或Shell脚本文件中。全局变量的作用范围则包括本Shell进程及其所有子进程。可以使用export内置命令将局部变量设置为全局变量。 流程控制:流程控制语句对命令的执行流程进行控制 (分支、循环、子Shell调用)。 用vim等编辑程序就可以创建Shell脚本。Shell脚本的文件扩展名一般为“.sh”。,Linux系统管理与维护,2执行Shell脚本 Shell脚本有三种执行方式: (1)方式1 bash 脚本文件名 (2)方式2 sou

13、rce脚本文件名 (3)方式3 chmod u+x 脚本文件 ./脚本文件名 用第一种和第二种方式,用户即使没有可执行权限,也可执行脚本文件。,Linux系统管理与维护,【操作实例4.8】 利用循环计算10的阶乘。Shell脚本的文件名为test8.sh。,Linux系统管理与维护,任务四 管理Linux中的进程与作业,4.4.1 Linux中的进程 1Linux进程的基本概念 Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用计算机系统;多任务是指Linux可以同时执行几个任务,它可以在还未执行完一个任务时又执行另一项任务。 程序是为了完成某种任务而编写的指令集合。

14、但程序是静态的,只是存储在计算机上的一段代码。为了描述多任务这样一个动态的概念,引入了进程。进程就是程序在某个数据集合上的一次运行活动。 为了区分进程,Linux中每个进程都有一个标识号,叫做PID(Process ID)。系统启动后的第一个进程是init,它的PID是1。,Linux系统管理与维护,2Linux中进程的分类 Linux中的进程一般分为交互式进程、批处理进程和守护进程三类。 交互式进程:由一个Shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。典型的应用比如编辑器 vim。此类进程对系统响应时间要求比较高,否则用户会感觉系统反应迟缓。 批处理进程:不与特定的终端相

15、关联,提交到等待队列种顺序执行的进程。比如编译器。 守护进程:一般是由系统在开机时通过脚本自动激活启动或超级管理用户root来启动,总是活跃的,一般运行于后台。这些后台守护进程时刻监听着前台客户的服务请求,一旦客户发出了服务请求,守护进程便为它们提供服务。,Linux系统管理与维护,3Linux进程的启动方式 启动一个进程有两种途径:手工启动和调度启动。 (1)手工启动 由用户输入命令,直接启动一个进程便是手工启动进程。手工启动进程又可分为前台启动和后台启动。 前台启动:这是启动进程最常用的方式。一般地,用户键入一个命令就是启动了一个进程,而且是一个前台的进程。 后台启动:假设用户要启动一个需

16、要长时间运行的格式化文本文件的进程,为了不使整个Shell在耗时进程的运行过程中都处于“瘫痪”状态,从后台启动这个进程是明智的选择。从后台启动进程其实就是在命令结尾加上一个&号。键入命令以后,出现一个数字,这个数字就是该进程的PID。 (2)调度启动 这种启动方式是事先进行调度安排,指定任务运行的时间或者场合,到时候系统会自动启动进程这一切工作。常用的调度启动命令有cron、at等。,Linux系统管理与维护,4.Linux进程管理命令 (1) 查看进程 在Linux中,使用ps命令对进程进行查看。 (2)进程通信 Linux进程间通信的方式很多,信号是一种最基本通信方式。 Linux信号简介

17、 信号可以直接发送给进程,无需用户接口。进程在收到信号后,会做出相应处理。发送信号时要给出信号的名字或数字。可以用命令“kill -l”,显示当前系统支持的所有信号。用命令“man 7 signal”查看所有信号的解释。 kill命令是通过向进程发送指定的信号来结束进程的。,Linux系统管理与维护,Linux系统管理与维护,Linux系统管理与维护,5.进程调度 (1)进程调度优先级 在Linux 操作系统中,进程之间是竞争资源关系。这个竞争优劣是通过谦让度来实现的。高谦让度表示进程优先级别最低。负值或0表示最高优先级,对其他进程不谦让,也就是拥有优先占用系统资源的权利。谦让度的值从 20到

18、19。 nice命令可以在创建进程时为进程指定谦让度的值。 renice 是通过进程ID(PID)来改变谦让度,进而达到更改进程的优先级。 (2)交互式的进程管理工具 监视系统任务的工具top 系统监视器gnome-system-monitor gnome-system-monitor是一个图形化的系统监视器,Linux系统管理与维护,4.4.2 Linux中的作业控制 1作业的概念 作业(Job)是用户提交给操作系统计算的一个独立任务。 作业流是指在批处理系统中把一批作业安排在输入设备上,然后依次读入系统进行处理,从而形成了作业流。 操作系统中用来控制作业的进入、执行和撤消的一组程序称为作业

19、管理程序。作业管理程序的主要任务是作业调度和作业控制。 Linux中提供了专门的作业调度命令。,Linux系统管理与维护,2前台作业与后台作业用户可以直接控制的作业称为前台作业。用户放在内存中自动执行的作业称为后台作业。Linux中提供了一组用于前台、后台作业控制的命令。 在后台执行作业 将作业放到后台执行的方法是在命令后面加上“&”符号。 将前台作业暂停到后台 可以用“Ctrl+Z”键将当前在前台运行的作业放到后台,并暂停执行。 列出后台作业状态命令-jobs 将后台作业放到前台运行 使用fg命令可以将后台作业放到前台运行。 让后台暂停的命令在后台作业 使用bg命令可以将后台暂停的命令在后台

20、继续执行。,Linux系统管理与维护,3.作业调度命令 Linux提供了一些作业调度命令,用于在特定时间或周期性地执行程序。对于偶尔运行的作业采用at或batch调度。对于特定时间重复运行的作业采用cron调度和anacron 调度。 at调度 at用于设置某一特定时刻执行的命令。at所设置的命令只执行一次。 batch调度 batch的作用与at类似,但它要在系统平均负载量降到 0.8 以下时才执行某项一次性的任务。 cron调度 cron用于安排周期性的任务作业。 anacron调度 anacron 是和 cron 相似的任务调度器,只不过它并不要求系统持续运行,它可以用来运行通常由 cr

21、on 运行的每日、每周、和每月的作业。,Linux系统管理与维护,【操作实例4.9】 (1)查看系统当前进程,并观察各输出项和进程状态。 (2)以后台方式运行命令“man ls &”,然后根据该进程的PID杀死该进程。 (3)运行命令“man cat”,并用Ctrl+Z键将其放到后台,查看该进程作业号,然后将其调回到前台。 (4)配置一个at作业,让系统在当前时间5分钟后将/root目录下的install.log文件复制到/home目录下。 (5) 配置一个cron作业, 让系统在在每周2、4、6凌晨3点进入维护状态,重新启动系统。,Linux系统管理与维护,自主训练,1.将/etc/pass

22、wd的第一列取出,并每一列以字符串 the n account is $user,其中n表示行数,$user表示抽取的用户。 2在根目录下有四个文件m1.txt,m2.txt,m3.txt,m4.txt,用Shell编程,实现自动创建m1,m2,m3,m4四个目录,并将m1.txt,m2.txt,m3.txt,m4.txt四个文件分别拷贝到各自相应的目录下。 3. 请用Shell编程来实现:当输入不同的选择时,执行不同的操作,如:输入start 开始启动应用程序myfiles,输入stop时,关闭myfiles,输入status时,查看myfiles进程,否则执行*)显示“EXIT!”并退出程序。 4用Shell编程,判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下。,Linux系统管理与维护,5设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30。 6某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案: (1)在下午4 :50删除/abc目录下的全部子目录和全部文件; (2)从早8:00下午6:00每小时读取/xyz目录下x1文件中每行第一个域的全部数据加入到/backup目录下的bak01.txt文件内;,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报