第7章-Shell编程.ppt
《第7章-Shell编程.ppt》由会员分享,可在线阅读,更多相关《第7章-Shell编程.ppt(60页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Linux操作系统基础教程操作系统基础教程 人民邮电出版社人民邮电出版社安俊秀安俊秀安俊秀安俊秀 编著编著编著编著 成都信息工程大学成都信息工程大学 并行计算实验室并行计算实验室 2023/3/13目目 录录 CONTENTSCONTENTSp第第1 1章章 LinuxLinux概述概述p第第2 2章章 LinuxLinux的基本操作的基本操作p第第3 3章章 LinuxLinux文件系统与磁盘管理文件系统与磁盘管理p第第4 4章章 LinuxLinux用户及权限机制用户及权限机制p第第5 5章章 LinuxLinux文本处理文本处理p第第6 6章章 LinuxLinux多命令协作多命令协作p
2、第第7 7章章 ShellShell编程编程 p第第8 8章章 进程与设备管理进程与设备管理第7章Shell编程LinuxLinux操作系统基础教程操作系统基础教程 成都信息工程大学成都信息工程大学 并行计算实验室并行计算实验室 2023/3/13第第7 7章章 ShellShell编程编程pp7.17.1LinuxLinux编程基础编程基础7.1.17.1.1使用使用gccgcc编译C C程序程序7.1.27.1.2 使用使用makemake编译C C程序程序7.1.3 7.1.3 通通过编译源代源代码安装程序安装程序pp7.27.2ShellShell脚本脚本7.2.17.2.1什么是什么
3、是ShellShell脚本脚本7.2.27.2.2开始开始编写写ShellShell脚本脚本pp7 7.3.3变量及其使用方法变量及其使用方法7.3.17.3.1ShellShell变量和量和环境境变量量7.3.27.3.2变量的操作量的操作成都信息工程大学成都信息工程大学 并行计算实验室并行计算实验室 2023/3/13第第7 7章章 ShellShell编程编程pp7.47.4输入、输出和引用输入、输出和引用7.4.17.4.1输入与入与输出出7.4.27.4.2引用引用pp7.57.5分支控制语句分支控制语句7.5.17.5.1if if语句句7.5.27.5.2casecase语句句p
4、p7.67.6循环控制语句循环控制语句7.6.17.6.1whilewhile和和untiluntil循循环7.6.27.6.2forfor循循环7.6.3 7.6.3 跳出循跳出循环成都信息工程大学成都信息工程大学 并行计算实验室并行计算实验室 2023/3/13第第7 7章章 ShellShell编程编程pp7.77.7位置参数位置参数7.7.17.7.1获取位置参数取位置参数7.7.27.7.2位置参数使用案例位置参数使用案例pp7.87.8数组数组7.8.17.8.1为什么使用数什么使用数组7.8.27.8.2数数组的的创建、建、赋值和和删除除7.8.3 7.8.3 遍遍历访问数数组元
5、素元素成都信息工程大学成都信息工程大学 并行计算实验室并行计算实验室 2023/3/13第第7 7章章 ShellShell编程编程pp7.97.9函数函数7.9.17.9.1函数的定函数的定义与与调用用7.9.27.9.2在函数中使用位置参数在函数中使用位置参数7.9.3 7.9.3 使用函数返回使用函数返回值7.9.4 7.9.4 将函数保存到文件将函数保存到文件成都信息工程大学成都信息工程大学 并行计算实验室并行计算实验室 2023/3/137.1.1 7.1.1 使用使用gccgcc编译编译C C程序程序 我们使用的计算机在与低层硬件交互时使用一种称为机器语言的程序。机器语言是由一系列
6、二进制指令组成的,这些指令描述了一些非常基本的操作,如“指向内存中某个位置”“写入一字节”“删除一字节”等。如果程序员以这样的方式操作计算机将极其低效并难以理解,因此 Linux 提供了编译器将高级语言或汇编语言转化为机器语言。gcc 便是 Linux 环境中最常用的编译器。gcc(GNU Compiler Collection)是 GNU 推出的多平台编译器,支持编译 C、C+、Java、Objective C、Fortran 等多种语言。CentOS 默认已经安装了 gcc 编译器,读者也可以使用以下命令自行安装。yum install gcc 下面以编译 C 程序为例,介绍 gcc 的用
7、法。在学习 C 语言时,我们都知道使用编译器编译 C 语言源代码经历了两个步骤:先将源代码编译成后缀名为.o 的目标文件,也就是机器语言;然后链接.o 文件,生成可执行文件。在 Linux 下使用 gcc 命令可以一次性完成这些工作。gcc 的命令格式为:gcc options file 假设待编译的程序为当前目录下的 hello.c 文件,代码内容如下。成都信息工程大学成都信息工程大学 并行计算实验室并行计算实验室 2023/3/137.1.1 7.1.1 使用使用gccgcc编译编译C C程序程序#include main()printf(Hello World!n)使用 gcc 命令编译
8、此文件:userlocalhost$gcc-o hello hello.c userlocalhost$./hello Hello World!userlocalhost$可以发现 hello.c 已被编译成可执行文件,位置由-o 选项设置,如果未设置-o 选项,编译结果为当前目录下的 a.out 文件。当程序依赖一个以上的文件时,可以先将每个文件编译成目标文件,再把所有目标文件链接成可执行文件。例如,hello.c 的 main 函数调用 greeting.c 中的 func 函数,代码如下。成都信息工程大学成都信息工程大学 并行计算实验室并行计算实验室 2023/3/137.1.1 7.1
9、.1 使用使用gccgcc编译编译C C程序程序 hello.c 文件内容:#include#includegreeting.h main()func(Tom);greeting.c 文件内容:void func(char*str)printf(Hello%s!n,str);greeting.h 头文件内容如下。#ifndef _H_GREETING#define _H_GREETING void greeting(char*str);#endif成都信息工程大学成都信息工程大学 并行计算实验室并行计算实验室 2023/3/137.1.1 7.1.1 使用使用gccgcc编译编译C C程序程序
10、 使用 gcc 命令的-c 选项,将.c 文件编译成.o 文件,然后将所有.o 文件链接成可执行文件。userlocalhost$gcc-c greeting.c userlocalhost$gcc-c hello.c userlocalhost$gcc-o hello hello.o greeting.o userlocalhost$./hello Hello Tom!userlocalhost$这样就完成了多文件依赖程序的编译。成都信息工程大学成都信息工程大学 并行计算实验室并行计算实验室 2023/3/137.1.2 7.1.2 使用使用makemake编译编译C C程序程序 make
11、可以获知所管理项目中源文件的修改情况,根据程序员设定的规则,自动编译被修改过的部分,而那些没有修改的部分将不会重新编译。这样既保证了程序的正确性,又大大提高了项目开发的效率。那么 make 是如何知晓哪些文件被修改了?需要执行什么指令才能保证程序的正确?这涉及一个重要的文件makefile,make 通过 makefile 文件描述的内容自动维护编译工作。makefile 文件需要程序员按照某种格式编写,并说明项目中各个源文件之间的依赖情况。在 Linux 系统中,makefile 文件通常以 MakeFile 为文件名。为了说明 make 和 makefile 的工作原理,下面用一个简单的例
12、子加以说明。假设程序 prog 由 3 个源文件 file1.c、file2.c 和 file3.c 编译生成,这 3 个源文件有各自的头文件 file1.h、file2.h 和 file3.h。通常情况下,编译器会生成 3 个目标文件 file1.o、file2.o 和 file3.o,然后用这 3 个目标文件链接成 prog 程序,其过程如下图所示。成都信息工程大学成都信息工程大学 并行计算实验室并行计算实验室 2023/3/137.1.2 7.1.2 使用使用makemake编译编译C C程序程序 要使用 make 对 prog 程序进行管理,则 makefile 文件应按如下内容编写。
13、prog:file1.o file2.o file3.o cc-o prog file1.o file2.o file3.o file1.o:file1.c file1.h cc-c file1.c file2.o:file2.c file2.h cc-c file2.c file3.o:file3.c file3.h cc-c file3.c 在该 makefile 文件中,第一行说明了程序 prog 由 3 个目标文件 file1.o、file2.o 和 file3.o 链接生成,第 3、第 5、第 7 行又说明了这三个目标文件依赖的.c 文件及.h文件。而第 2、第 4、第 6、第 8
14、行则是根据这些依赖关系,编译目标文件或可执行文件。成都信息工程大学成都信息工程大学 并行计算实验室并行计算实验室 2023/3/137.1.2 7.1.2 使用使用makemake编译编译C C程序程序 make 的命令格式为:make flags macro definitions targets其中,flags 为标志位,常用的标志位选项如下表所示;macro definition 为宏命令,在这里指定的宏命令将覆盖 makefile 文件中的宏命令;targets 为要编译的文件,允许定义多个目标文件,按从左到右的顺序依次编译,如果此项缺省,则默认指向 makefile 文件中第一个目标
15、文件。成都信息工程大学成都信息工程大学 并行计算实验室并行计算实验室 2023/3/137.1.3 7.1.3 通过编译源代码安装程序通过编译源代码安装程序 许多发行商将自己开发的软件预编译成二进制库,用户下载解压后就能马上使用。尽管这样十分方便,但很多时候也需要通过编译源代码安装软件,这是由于:(1)软件开发商在更新版本时,会开发一些全新的功能,但为了程序的稳定性并不会将其加入当前的发现版本。因此想要获取最新的功能,必须通过编译源代码。(2)有时候软件并不能满足用户的全部需求,用户希望在程序中加入自定义的部分。这种情况也需要编译源代码。在 Linux 系统中,许多程序都是直接提供源代码的,这
16、样就可以利用 7.1.2 节介绍的 make 和 makefile 文件编译源代码并完成程序的安装。pcre(Perl Compatible Regular Expressions)是一个 Perl 库,用于代替庞大的 Boost 来解决 C 语言中使用正则表达式的问题。下面以安装 pcre 为例,介绍通过编译源代码安装程序的步骤。成都信息工程大学成都信息工程大学 并行计算实验室并行计算实验室 2023/3/137.1.3 7.1.3 通过编译源代码安装程序通过编译源代码安装程序 (1)登录 pcre 官方网站 http:/www.pcre.org/下载最新版本的 pcre 源代码,这里以 p
17、cre2-10.23 为例。其中 wget 命令用来从指定的 URL 下载文件。(2)解压 tar 文件。(3)在目录中可以发现一个名为 configure 的脚本程序,它随着源代码一起发布。configure 脚本的作用是分析当前系统的环境,并且检查系统是否已经安装了必要的外部工具和组件,然后生成合适的 makefile 文件以便下一步编译。目前许多软件都是设计成可移植的,程序的源代码可以在各种 UNIX 系统上编译,在编译时,各系统之间会有细微的不同,因此需要 configure 进行调整。另外,configure 还可以使用选项“-prefix”指定程序的安装路径,默认路径为/usr/l
18、ocal。(4)运行 configure。(5)如果在检查过程中,发现了某些导致安装无法进行的问题,如缺少开发用的某些软件或开发库,configure 会以失败告终。若没有发现此类问题,则可以使用 make 命令编译程序。(6)若编译顺利完成,则可以使用命令 make install 进行安装。该命令会在安装目录下生成可执行程序。成都信息工程大学成都信息工程大学 并行计算实验室并行计算实验室 2023/3/137.2.1 7.2.1 什么是什么是ShellShell脚本脚本 到目前为止,我们都是以用户交互接口的方式使用 Shell 的,即人工通过输入设备在 CLI 命令行中输入命令,等待系统执
19、行并将结果打印在屏幕上。设想一下,如果需要重复完成一个需要输入多条命令的任务,采用人工在命令行中一条一条输入的方法十分繁琐且容易出错,如果让 Shell 记住这些命令并自动完成输入将会大大提升效率(可以联想到上一节提到的 make)。因此将命令通过设计与组合后,记录到一个特定的文件中,Shell 就作为命令解析器执行文件中的一系列命令,这里的文件就是 Shell 脚本。简单来说,Shell 脚本是一个包含一系列命令的文件。Shell 读取这个文件,然后执行这些命令,就好像这些命令是直接输入命令行中一样。从这个角度看,作为用户交互接口的 Shell 和作为命令解析器的 Shell 所做的工作是完
20、全一样的,大多数能在命令行中完成的工作都可以在 Shell 脚本中完成,反之亦然。而使用 Shell 脚本的原因除了刚才提到的效率问题外,还基于以下 3 点考虑。成都信息工程大学成都信息工程大学 并行计算实验室并行计算实验室 2023/3/137.2.1 7.2.1 什么是什么是ShellShell脚本脚本 (1)简单性:Shell 是一个高级语言;通过它,可以简洁地表达复杂的操作。(2)可移植性:使用 POSIX 定义的功能,可以做到脚本无须修改就可在不同的系统上执行。(3)开发容易:可以在短时间内完成一个功能强大又好用的脚本。作为用户交互接口的 Shell 称为交互式 Shell,而作为命
21、令解析器的 Shell 称为非交互式 Shell。因为它只需要通过 Shell 脚本就可以完成工作,不需要人为干预。需要特别注意的是,交互式 Shell 和非交互式 Shell 指的都是同一个 Shell。换句话说,Shell 既是交互式的又是非交互式的,这取决于用户如何使用它。成都信息工程大学成都信息工程大学 并行计算实验室并行计算实验室 2023/3/137.2.2 7.2.2 开始编写开始编写ShellShell脚本脚本 Shell 脚本本质上是 Linux 系统下的文本文件,通过第 5 章的学习我们已经掌握文本进行处理的方法。运用 vim 文本编辑器提供的“语法高亮”功能,可以很方便地
22、编写 Shell 脚本。仍然以经典的 HelloWorld 程序为例,启动 vim 文本编辑器并输入以下内容。#!/bin/bash#My first shell script.echo Hello World!脚本第一行开头的“#!”是一个约定的标记,称为 shebang,用来告知操作系统需要用什么解析器来执行此脚本,这里表示使用 bash 来执行 Shell 脚本;第二行为注释,Shell 的注释以“#”开头,与所有编程语言一样注释的内容不会执行,在命令行中也是如此。例如:userlocalhost$echo Hello World!#This is a annotation Hello
23、World!成都信息工程大学成都信息工程大学 并行计算实验室并行计算实验室 2023/3/137.2.2 7.2.2 开始编写开始编写ShellShell脚本脚本 编写完后将脚本保存为 HelloWorld.sh,这里的以 sh 为脚本扩展名并没有什么特殊含义,仅为了表明这是一个 Shell 脚本,达到见名知义的目的,类似于 python 脚本的.py 或 php 脚本的.php。然后给文件增加可执行权限,并运行。userlocalhost$chmod+x HelloWorld.sh userlocalhost$./HelloWorld.sh Hello World!userlocalhost
24、$可以看到,Shell 脚本的执行结果和直接在命令行中输入命令的结果完全相同。在上面的例子中,使用三行内容的 Shell 脚本完成了命令行中一行命令的工作,这是为了向读者介绍编写 Shell 脚本最基本的方法,在本章后面的内容中将展示 Shell 编程强大的功能。成都信息工程大学成都信息工程大学 并行计算实验室并行计算实验室 2023/3/137.3.1 Shell7.3.1 Shell变量和环境变量变量和环境变量 1Shell 变量 首先回顾一下在学习各种编程语言时对变量的定义。变量是一个用来存储数据的实体。每个变量都有一个变量名和一个值,其中变量名是引用变量的标识符,值是存储在变量中的数据
25、。与许多编程语言的变量一样,Shell 变量在命名时需要遵守一些规则:变量名必须由大写字母(AZ)、小写字母(az)、数字(09)或下画线(_)构成;变量名的第一个字符不能是数字。对于变量的值,大多数编程语言都可以包含多种不同类型的数据,而 Shell 变量只有字符串一种类型,即无论给 Shell 变量赋予什么值,在存储时都会转换为字符串。Shell 变量只能在创建它的 Shell 中使用,对于其他 Shell 是不可见的,并且 Shell 变量也不会从父进程传递给子进程,这一点与局部变量非常相似。因此在编写 Shell 程序过程中,当需要临时存储时,可以使用 Shell 变量。成都信息工程大
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Shell 编程
限制150内