《学习情境2项目2_shell编程.ppt》由会员分享,可在线阅读,更多相关《学习情境2项目2_shell编程.ppt(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Linux网络服务器配置管理项目实训教程杨云 等编著 中国水利水电出版社 1.项目课题引入 2.Shell的概念与原理 3.Shell环境变量的设置 4.Shell脚本的设计与运行 5.现场演示案例课题引入项目背景l在Linux系统中,如果计算机插入一个USB设备,需要用挂载命令才能实现这个设备的加载。可以把USB的挂载与文件的复制写成一个shell程序,这样可以通过程序的运算自动完成很多步骤的操作,程序的功能如下:l运算程序时,提示用户输入“y”或“n”,确定是不是挂载USB设备。l如果用户输入“y”,则挂载这个USB设备l提示用户输入“y”或“n”,确定是不是复制文本l如果用户输入“y”,
2、则显示文件列表,然后提示用户是否复制文件l程序根据用户输入的文件名复制相应的文件,然后提示是否将计算机中的文件复制到USB中l完成文件的复制以后,提示用户是否卸载USB设备 课题引入项目分析完成本项目需要解决的问题:1、Linux中shell是什么,有什么功能2、如何设定和使用Shell的环境变量3、如何利用shell进行脚本程序的设计课题引入教学目标学习本课需要实现的教学目标:掌握shell的基本命令掌握shell的基本概念和作用掌握shell环境变量概念和使用方法掌握shell程序的结构和设计方法能够完成本课程提出的项目内容课题引入应达到的职业能力学生学习本课后应该具有的职业能力:熟练掌握
3、Vi编辑器的使用深入理解shell的思想掌握shell变量和环境变量的设置能够进行基本的shell程序设计能够读懂Linux操作系统中的系统脚本项目问题一shell的概念和功能lShell的基本概念:Shell就是用户与操作系统内核之间的接口,起着协调用户与系统的一致性和在用户与系统之间进行交互的作用。Shell在Linux系统中具有极其重要的地位 Shell的功能lShell最重要的功能是命令解释,从这种意义上来说,Shell是一个命令解释器。Linux系统中的所有可执行文件都可以作为Shell命令来执行。将可执行文件作一个分类,如表所示。Shell对命令的解释过程l当用户提交了一个命令后,
4、Shell首先判断它是否为内置命令,如果是就通过Shell内部的解释器将其解释为系统功能调用并转交给内核执行l若是外部命令或实用程序就试图在硬盘中查找该命令并将其调入内存,再将其解释为系统功能调用并转交给内核执行。在查找该命令时分为两种情况:l用户给出了命令路径,Shell就沿着用户给出的路径查找,若找到则调入内存,若没有则输出提示信息;l用户没有给出命令的路径,Shell就在环境变量PATH所制定的路径中依次进行查找,若找到则调入内存,若没找到则输出提示信息。Shell的主要版本项目问题二Shell环境变量lShell支持具有字符串值的变量。lShell变量不需要专门的说明语句,通过赋值语句
5、完成变量说明并予以赋值。l在命令行或Shell脚本文件中使用$name的形式引用变量name的值。shell变量的定义和引用l在Shell中,变量的赋值有下列句法格式:name=string lname是变量名,它的值就是string,“=”是赋值符号。变量名是以字母或下划线开头的字母、数字和下划线字符序列。l通过在变量名(name)前加$字符(如$name)引用变量的值,引用的结果就是用字符串string代替$name。l在定义变量时,若string中包含空格、制表符和换行符,则string必须用string或者”sting”的形式,即用单(双)引号将其括起来。双引号内允许变量替换,而单引号
6、内则不可以。Shell变量的作用域l与程序设计语言中的变量一样,Shell变量有其规定的作用范围。lShell变量分为局部变量和全局变量:局部变量的作用范围仅仅限制在其命令行所在的Shell或Shell脚本文件中 全局变量的作用范围则包括本Shell进程及其所有子进程 可以使用export内置命令将局部变量设置为全局变量Shell变量作用域举例在当前Shell中定义变量var1在当前Shell中定义变量var2并将设为全局引用变量的值 显示当前Shell的PID Shell变量作用域举例调用子Shell,并显示子Shell的PID 由于var1没有被export,在子Shell中已无值由于va
7、r2被export,所以在子Shell中仍有值返回主Shell,并显示变量的值 Shell的环境变量 l环境变量是指由Shell定义和赋初值的Shell变量。lShell用环境变量来确定查找路径、注册目录、终端类型、终端名称、用户名等。l所有环境变量都是全局变量,并可以由用户重新设置。l在Bash中,设置环境变量用set命令,命令的格式是:set 环境变量=变量的值Shell的环境变量举例l设置用户的主目录为/home/john,可以用以下命令:l 不加任何参数地直接使用set命令可以显示出用户当前所有环境变量的设置,如:Shell的环境变量举例l在环境变量前面加上$符号,表示引用环境变量的值
8、,例如把目录切换到用户的主目录:l 当修改PATH变量时,如:将一个路径/tmp加到PATH变量后,应该这样设置:Shell中的正则表达式lgrep命令用来在文本文件中查找内容,指定给grep的文本模式叫做“正则表达式”。l正则表达式可以是普通的字母或者数字,也可以使用特殊字符来匹配不同的文本模式。l由于正则表达式使用了一些特殊字符,所以所有的正则表达式都必须用单引号括起来。l正则表达式字符可以包含某些特殊的模式匹配字符。句点匹配任意一个字符,相当于shell中的问号 紧接句号之后的星号匹配零个或多个任意字符,相当于Shell的星号 方括号的用法跟Shell的一样,只是用代替了!表示匹配不在指
9、定列表内的字符 正则表达式匹配字符、量词、控制字符 l正则表达式的模式匹配字符 l与模式匹配字符配合使用的量词 l正则表达式的控制字符 正则表达式举例lhelp 匹配包含help的行l.$匹配倒数第二个字符是句点的行l.$匹配只有3个字符的行l 0-930-9 匹配以3个数字开头跟着是一个非数字字符的行 l(A-ZA-Z)*$匹配只包含偶数个大写字母的行 输入输出重定向与管道 l所谓重定向,就是不使用系统的标准输入端口、标准输出端口或标准错误端口,而进行重新的指定,所以重定向分为输入重定向、输出重定向和错误重定向 l在Shell中,要实现重定向主要依靠重定向符实现,下表列出了常用的重定向符 输
10、入输出重定向举例管道 l许多Linux命令具有过滤特性,即一条命令通过标准输入端口接收一个文件中的数据,命令执行后产生的结果数据又通过标准输出端口送给后一条命令,作为该命令的输入数据。lShell提供管道命令“|”将这些命令前后衔接在一起,形成一个管道线。格式为:命令1|命令2|命令nl管道线中的每一条命令都作为一个单独的进程运行,每一条命令的输出作为下一条命令的输入。由于管道线中的命令总是从左到右顺序执行的,因此管道线是单向的。管道举例l以长格式递归的方式分屏显示/etc目录下的文件和目录列表。Shell脚本lShell最强大的功能在于它是一个功能强大的编程语言。l用户可以在文件中存放一系列
11、的命令,这被称为Shell脚本或Shell程序,将命令、变量和流程控制有机地结合起来将会得到一个功能强大的编程工具。lShell脚本语言非常擅长处理文本类型的数据,由于Linux系统中的所有配置文件都是纯文本的,所以Shell脚本语言在管理Linux系统中发挥了巨大作用。Shell脚本lShell脚本是以行为单位的,在执行脚本的时候会分解成一行一行依次执行。脚本中所包含的成分主要有注释、命令、Shell变量和结构控制语句。其中:l注释。用于对脚本进行解释和说明,在注释行的前面要加上符号“#”,这样在执行脚本的时候Shell就不会对该行进行解释。l命令。在Shell脚本中可以出现任何在交互方式下
12、可以使用的命令。l变量。Shell支持具有字符串值的变量。Shell变量不需要专门的说明语句,通过赋值语句完成变量说明并予以赋值。在命令行或Shell脚本文件中使用$name的形式引用变量name的值。l流程控制。主要为一些用于流程控制的内部命令。Shell脚本的流程控制脚本的建立与执行 l用户可以使用任何文本编辑器编辑Shell脚本文件,如Vi、gedit等。lShell对Shell脚本文件的调用可以采用3种方式:l一种是将文件名作为Shell命令的参数,其调用格式为:l另一种调用方法是先将脚本文件的访问权限改为可执行,以便该文件可以作为执行文件调用l当执行一个脚本文件时,Shell就产生一
13、个子Shell(即一个子进程)去执行文件中的命令。因此,脚本文件中的变量值不能传递到当前Shell(即父进程)。为了使的脚本文件中的变量值传递到当前Shell,必须在命令文件名前面加“.”命令。Shell设置变量实例Shell选择语句实例l本实例测试首先测试/bin/bash文件是否存在,如果存在,测试它是不是一个目录,并通过echo语句输出测试结果Shell循环语句实例l本实例首先利用for循环,分别给foo赋值为bar,fud和43,并通过echo语句输出foo变量的内容。然后利用while循环,使得foo不断加一本课项目总结通过前面的学习,我们已经可以完成本课程的项目了。具体实施方法如下:在Linux终端中输入Vi,打开vi编辑器在Vi中进行代码的编辑,部分主要代码如图所示将代码保存成usb.sh,并使用chmod+x usb.sh命令增加执行权限运行程序进行测试本项目示例代码作业l根据本课所学知识,完成下列任务:l现有我们自己写的C语言程序,通过设着系统变量的方法,使得我们不需要输入绝对路径就可以运行。请列举出至少2种方法。l将本课程USB项目的程序完成,并进行实际测试。写出测试环境和测试结果。
限制150内