☆掌握Shell的基本语法结构。
☆学会编写并执行Shell脚本程序。
☆学会在Linux下进行进程调度和作业调度任务一学习变量与表达式Shell是操作系统最外面的一层,负责管理用户与操作系统之间的交互,例如等待用户输入,向操作系统解释用户的输入,以及处理操作系统的各种输出结果。
除了作为命令解释器之外,Shell本身还是一个解释型的程序设计语言。
Shell程序设计语言支持变量、表达式、函数和流程控制结构等,任何在终端能够执行的命令也放到Shell程序。
● 4.1.1 变量●在Shell中有三种变量:系统变量、环境变量和用户变量。
其中系统变量在对参数判断和命令返回值判断会使用,环境变量主要是在程序运行的时候需要设置,用户变量在编程过程中使用最多。
●这几种变量的赋值方法各不相同,主要有:直接设置变量值、变量之间的置换、从命令行参数获取、从环境变量获取和用户输入等几种方式。
●引用变量一般采用“$variable”的形式引用变量variable的值。
1.系统变量●Shell常用的系统变量用于提供系统信息。
系统变量一般采用命令行参数获取。
2.环境变量●Shell在开始执行前就已经定义了一些与系统工作环境有关的变量。
●显示环境变量用echo命令。
●在bash中,设置环境变量用set命令。
用unset命令可将环境变量重新设置为系统默认值,。
●用户并不需要每次登录后都对各种环境变量进行手工设置,通过环境设置文件,用户的工作环境的设置可以在登录的时候由系统自动来完成。
环境设置文件有两种:系统环境设置文件和用户环境设置文件。
●3.用户变量●不管系统变量和环境变量有多少,对于需求来说,总是不够的。
用户常常需要自定义一些变量,这些变量就称为用户变量。
●定义用户变量的语法为:●name=string●局部变量与全局变量Shell变量也有其规定的作用范围。
局部变量的作用范围仅仅在其命令行所在的Shell 或Shell脚本文件中。
全局变量的作用范围则包括本Shell进程及其所有子进程,即相当于环境变量,贯穿于整个当前用户环境。
可以使用export命令将局部变量设置为全局变量。
export name=string●【操作实例4.1】用文本编辑器gedit编写一个Shell脚本test1.sh,显示执行脚本时输入的参数及参数总数目,并定义一个局部变量和一个全局变量。
4.1.2 表达式Shell中的表达式分为算术运算表达式、关系与逻辑表达式和正则表达式等几种。
1.expr命令●expr命令的功能是求表达式的值。
2. 算术表达式●算术表达式可以是由运算符+、-、*、/、=组成的表达式。
3. 关系与逻辑表达式●命令test与方括号[ ]都用于进行条件测试,测试的结果返回逻辑值,即真true(0)和假false(1)。
test和[ ]可以相互替换。
●●●●【操作实例4.2】●先练习使用表达式,然后用文本编辑器gedit编写一个计算1-5的平方的Shell脚本test2.sh,进一步熟悉表达式的作用。
任务二学习流程控制结构4.2.1 分支结构●Shell程序中的条件语句主要有if语句、case语句。
1.if语句●if语句根据表达式的值来决定要执行的程序段落。
其语法格式如下:●if表达式1 then●语句块1elif表达式2 then●语句块2elif表达式3 then●语句块3…else●语句块nfi【操作实例4.3】●编写一个Shell脚本test3.sh,接收用户输入的文件名,然后在当前目录下检查该文件是否存在。
● 2.case语句●case语句为用户提供了根据字符串或变量的值从多个选项中选择一项执行的方法。
case语句的语法格式如下:●case 字符串in值1|值2)●语句块1;;值3|值4)●语句块2;;值5|值6)●语句块3;;…esac【操作实例4.4】●编写一个Shell脚本test4.sh,用case语句建立一个菜单,当用户选择菜单时,执行相应的操作。
4.2.2 循环结构●Shell常见的循环语句有for循环、while循环、until循环。
1.for循环●for循环对一个变量所有可能的值都执行一个命令序列。
赋给变量的几个数值既可以在程序内以数值列表的形式提供,也可以在程序以外以参数的形式提供。
●for循环的一般格式如下:●for循环变量[in列表]do●语句块done●for语句对[in列表]中的每一项都执行一次。
列表可以是包括几个单词并且有空格分隔开的变量,也可以是直接输入的几个值。
每执行一次循环,循环变量都被赋予列表中的当前值,直到最后一个为止。
[in列表]子句也可以使用通配符。
●[in列表]子句可以省略,此时,假定循环变量包含执行Shell程序时命令行的所有位置参数,即相当于[in“$@”]。
【操作实例4.5】●编写一个Shell脚本test5.sh,显示当前目录下的所有.sh文件的名称和内容。
2.while循环和until循环●while语句与until语句具有类似的语法格式和功能。
while语句会在测试条件为真时循环才执行,语法如下:●while 测试表达式do●语句块done●until语句中当表达式的值为假时,循环才会继续执行命令:●until 测试表达式do●语句块done【操作实例4.6】●编写一个Shell脚本test6.sh,脚本在执行时,接收用户输入的文件名,然后显示该文件的内容。
3.break和continue●break和continue无条件转移命令。
break用于立即终止当前循环的执行,continue用于不执行循环中后面的语句而立即开始下一次循环的执行。
这两个命令只有放在do和done之间才有效。
【操作实例4.7】●对【操作实例4.4】中的Shell脚本进行改进,用循环语句建立菜单,当用户选择了一次操作后,再次显示菜单供用户进行下一次选择,当用户按“q”键后,退出循环。
Shell脚本的文件名为test7.sh。
任务三编辑与运行Shell脚本4.3.1 vim的使用●vi/vim是Linux系统中使用最为普遍的全屏幕交互式文本编辑程序。
它没有菜单,只有命令,但功能非常强大。
vim可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制。
●Vim有3种基本工作模式:命令模式、插入模式和末行模式。
●运行Vim编辑器的命令格式是:●vim [选项] [文件名]●执行vim命令后,首先进入的是命令模式。
用户输入进入插入模式的命令后,即可进入插入模式。
图4-1 vim的运行模式及转换4.3.2 Shell编程●在Linux系统中,用Shell编写的批处理文件称为Shell脚本,它包含若干条命令和语句,可以解释执行。
●Shell脚本的作用主要包括:自动执行命令;实现系统管理和维护;创建简单的应用;操作文本或文件。
1.编写Shell脚本●Shell脚本包含如下成分:●注释部分:注释部分以#开头的行。
●命令:在Shell脚本中可以出现任何在交互方式下可以使用的命令。
●变量:在Shell脚本中既可以使用用户自定义的变量,也可以使用系统环境变量。
Shell变量分为局部变量和全局变量。
局部变量的作用范围仅仅限制在其命令行所在的Shell或Shell脚本文件中。
全局变量的作用范围则包括本Shell进程及其所有子进程。
可以使用export内置命令将局部变量设置为全局变量。
●流程控制:流程控制语句对命令的执行流程进行控制(分支、循环、子Shell调用)。
●用vim等编辑程序就可以创建Shell脚本。
Shell脚本的文件扩展名一般为“.sh”。
2.执行Shell脚本●Shell脚本有三种执行方式:●(1)方式1bash 脚本文件名●(2)方式2source脚本文件名(3)方式3chmod u+x 脚本文件./脚本文件名●用第一种和第二种方式,用户即使没有可执行权限,也可执行脚本文件。
【操作实例4.8】●利用循环计算10的阶乘。
Shell脚本的文件名为test8.sh。
任务四管理Linux中的进程与作业4.4.1 Linux中的进程1.Linux进程的基本概念●Linux是一个多用户多任务的操作系统。
多用户是指多个用户可以在同一时间使用计算机系统;多任务是指Linux可以同时执行几个任务,它可以在还未执行完一个任务时又执行另一项任务。
●程序是为了完成某种任务而编写的指令集合。
但程序是静态的,只是存储在计算机上的一段代码。
为了描述多任务这样一个动态的概念,引入了进程。
进程就是程序在某个数据集合上的一次运行活动。
●为了区分进程,Linux中每个进程都有一个标识号,叫做PID(Process ID)。
系统启动后的第一个进程是init,它的PID是1。
2.Linux中进程的分类●Linux中的进程一般分为交互式进程、批处理进程和守护进程三类。
●交互式进程:由一个Shell启动的进程。
交互进程既可以在前台运行,也可以在后台运行。
典型的应用比如编辑器vim。
此类进程对系统响应时间要求比较高,否则用户会感觉系统反应迟缓。
●批处理进程:不与特定的终端相关联,提交到等待队列种顺序执行的进程。
比如编译器。
●守护进程:一般是由系统在开机时通过脚本自动激活启动或超级管理用户root来启动,总是活跃的,一般运行于后台。
这些后台守护进程时刻监听着前台客户的服务请求,一旦客户发出了服务请求,守护进程便为它们提供服务。
3.Linux进程的启动方式●启动一个进程有两种途径:手工启动和调度启动。
(1)手工启动由用户输入命令,直接启动一个进程便是手工启动进程。
手工启动进程又可分为前台启动和后台启动。
①台启动:这是启动进程最常用的方式。
一般地,用户键入一个命令就是启动了一个进程,而且是一个前台的进程。
②后台启动:假设用户要启动一个需要长时间运行的格式化文本文件的进程,为了不使整个Shell在耗时进程的运行过程中都处于“瘫痪”状态,从后台启动这个进程是明智的选择。
从后台启动进程其实就是在命令结尾加上一个&号。
键入命令以后,出现一个数字,这个数字就是该进程的PID。
(2)调度启动这种启动方式是事先进行调度安排,指定任务运行的时间或者场合,到时候系统会自动启动进程这一切工作。
常用的调度启动命令有cron、at等。
4.Linux进程管理命令(1) 查看进程在Linux中,使用ps命令对进程进行查看。
(2)进程通信Linux进程间通信的方式很多,信号是一种最基本通信方式。
Linux信号简介信号可以直接发送给进程,无需用户接口。
进程在收到信号后,会做出相应处理。
发送信号时要给出信号的名字或数字。
可以用命令“kill -l”,显示当前系统支持的所有信号。
用命令“man 7 signal”查看所有信号的解释。