第7章-Shell编程PPT课件_第1页
第7章-Shell编程PPT课件_第2页
第7章-Shell编程PPT课件_第3页
第7章-Shell编程PPT课件_第4页
第7章-Shell编程PPT课件_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

1、XX大学XX系 XXXFriday, September 10, 20212021/7/242本章提要vShell基本概念基本概念vShell语法语法vShell编程实例编程实例vShell是是Linux的外壳,是的外壳,是Linux的用户界面,的用户界面,Shell为用户提供了输入命令和参数并可得到命令为用户提供了输入命令和参数并可得到命令执行结果的环境。用户对执行结果的环境。用户对Shell理解越深刻,理解越深刻,Shell对用户工作的支持就越有力。可以说,熟练对用户工作的支持就越有力。可以说,熟练掌握掌握Shell编程,能大大提高系统管理的效率。编程,能大大提高系统管理的效率。Fedor

2、a使用的使用的Shell 版本是版本是Bash。本章首先介绍。本章首先介绍vi编辑器的使用,然后介绍编辑器的使用,然后介绍Shell的基础,的基础,Shell语法,正则表达式等内容,通过本章的学习使用语法,正则表达式等内容,通过本章的学习使用户能够使用户能够使用Shell编程进行系统管理。编程进行系统管理。2021/7/243vi编辑器v 虽然虽然Linux 系统提供了两种工作界面:文本界面和图形界系统提供了两种工作界面:文本界面和图形界面,但对于面,但对于Linux 系统管理员来说,在文本界面操作方式系统管理员来说,在文本界面操作方式下可以高效地完成所有的任务。下可以高效地完成所有的任务。v

3、 在在Linux 系统中的参数文件几乎都是系统中的参数文件几乎都是 ASCII 码格式的纯文码格式的纯文本文件,要管理好本文件,要管理好 Linux 系统,纯文本文件的手工编辑系统,纯文本文件的手工编辑仍然是需要的,因为使用文本模式来处理仍然是需要的,因为使用文本模式来处理 Linux 的系统的系统设置问题,不但可以比较容易地了解到设置问题,不但可以比较容易地了解到Linux 的工作状况,的工作状况,也比较容易了解整个配置的基本精神,更能保证修改可以也比较容易了解整个配置的基本精神,更能保证修改可以顺利地被系统执行。顺利地被系统执行。v 对于要求做服务器的主机,使用字符界面而不用启动图形对于要

4、求做服务器的主机,使用字符界面而不用启动图形工作环境,大大地节省了系统资源开销。工作环境,大大地节省了系统资源开销。v 系统管理任务通常在远程进行(如使用系统管理任务通常在远程进行(如使用SSH等),而远程等),而远程登录后进入的主要是字符工作方式。登录后进入的主要是字符工作方式。2021/7/244编辑器及特点vLinux 系统中提供行编辑器(如系统中提供行编辑器(如ed、ex和和edit等)等)和屏幕编辑器(如和屏幕编辑器(如vi、emacs等),等),vi汇集了行汇集了行编辑器和屏幕编辑器的特点,是编辑器和屏幕编辑器的特点,是Linux系统中一系统中一种功能强大、界面友好的编辑器,熟练掌

5、握种功能强大、界面友好的编辑器,熟练掌握vi命命令及其使用技巧往往能起到事半功倍的作用,大令及其使用技巧往往能起到事半功倍的作用,大大提高系统管理和编程工作的效率,因此需要学大提高系统管理和编程工作的效率,因此需要学习它的使用方法。初步使用习它的使用方法。初步使用vi,用户可能会觉得,用户可能会觉得vi的界面不够友好,不容易使用,但是一旦掌握的界面不够友好,不容易使用,但是一旦掌握了了vi的命令,就可以感受到它强大的功能与高效。的命令,就可以感受到它强大的功能与高效。而且大部分的而且大部分的UNIX和和Linux系统,都自带了系统,都自带了vi。因此下面介绍因此下面介绍vi的使用。的使用。20

6、21/7/245vi的工作模式v通常,通常,vi共分为共分为3种模式,分别是种模式,分别是“命令模式命令模式”、“编辑模式编辑模式”与与“末行模式末行模式”。这。这3种模式的作种模式的作用如下。用如下。图图7-1 vi工作模式切换工作模式切换2021/7/246vi的简单使用v1. 启动启动viv要进入要进入vi,可以直接在系统提示符下输入,可以直接在系统提示符下输入vi及空及空格键,然后再输入需要编辑的文件名,例如:格键,然后再输入需要编辑的文件名,例如: rootCandy #vi test.txt rootCandy #vi test.txt图图7-2 vi启动画面启动画面2021/7/

7、247vi的简单使用(续)v 2. 编辑文本编辑文本v 在命令模式下,只要输入在命令模式下,只要输入i、I、O、o、a或或A等字符,就可以进入编辑模式了。等字符,就可以进入编辑模式了。在编辑模式中,可以发现在左下角会出现在编辑模式中,可以发现在左下角会出现 -INSERT- ,意味着可以输入任意,意味着可以输入任意字符,如图字符,如图7-3所示。此时,键盘上除了所示。此时,键盘上除了“ESC”这个按键之外,其他按键一这个按键之外,其他按键一般都当作输入文本看待,可以进行任何编辑。需要注意的是:在般都当作输入文本看待,可以进行任何编辑。需要注意的是:在vi里,里,“Tab”键所得到的结果与空格符

8、所得到的不一样。键所得到的结果与空格符所得到的不一样。v 3. 回到命令模式回到命令模式v 假设已经对文本编辑完毕,那么,应该如何退出?就是按下假设已经对文本编辑完毕,那么,应该如何退出?就是按下“ESC”键。马上键。马上就会发现画面左下角的就会发现画面左下角的 -INSERT- 不见了。不见了。v 4. 保存并退出保存并退出viv 如果要保存文件并离开如果要保存文件并离开vi,命令很简单,输入,命令很简单,输入“:wq”即可保存文件并离开即可保存文件并离开(注意,按下(注意,按下“:”键后键后 ,该光标就会移到最下面的一行)。,该光标就会移到最下面的一行)。图图7-3 vi的编辑模式的编辑模

9、式2021/7/248vi中的命令vvi的命令分非常多,有些命令是进入、退的命令分非常多,有些命令是进入、退出出vi时使用;有些命令用于在各种模式之间时使用;有些命令用于在各种模式之间切换;有些命令是在末行模式下使用,有切换;有些命令是在末行模式下使用,有些命令是在命令模式下使用。以下使用表些命令是在命令模式下使用。以下使用表格的方式介绍这些命令,表中标有格的方式介绍这些命令,表中标有“常用常用”的命令需要读者特别留意。的命令需要读者特别留意。2021/7/249vi范例v以下为一些常用的以下为一些常用的vi使用范例,测试一下,看是否已经熟悉了使用范例,测试一下,看是否已经熟悉了vi命令。命令

10、。v将文件将文件/etc/inittab中的中的510行的内容行的内容,另存到,另存到/root/myfile.txt中。命令及执行情况如中。命令及执行情况如下下: rootCandy #vi /etc/inittabrootCandy #vi /etc/inittab# inittab This file describes how the INIT process should set up# the system in a certain run-level.# Author: Miquel van Smoorenburg, # Modified for RHS Linux by Mar

11、c Ewing and Donnie Barnes# Default runlevel. The runlevels used by RHS are:# 0 - halt (Do NOT set initdefault to this)# 1 - Single user mode# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)# 3 - Full multiuser mode# 4 - unused# 5 - X112021/7/2410vi范例(续):5,10 w /root/myfile.

12、txtv rootCandy root #cat myfile.txtrootCandy root #cat myfile.txt# Author: Miquel van Smoorenburg, # Modified for RHS Linux by Marc Ewing and Donnie Barnes# Default runlevel. The runlevels used by RHS are:# 0 - halt (Do NOT set initdefault to this)为文件为文件/root/myfile.txt设置行号设置行号v rootCandy root #vi m

13、yfile.txtrootCandy root #vi myfile.txt# Author: Miquel van Smoorenburg, # Modified for RHS Linux by Marc Ewing and Donnie Barnes# Default runlevel. The runlevels used by RHS are:# 0 - halt (Do NOT set initdefault to this)v :set nu1 # Author: Miquel van Smoorenburg, 2 # Modified for RHS Linux by Marc

14、 Ewing and Donnie Barnes3 #4 5 # Default runlevel. The runlevels used by RHS are:6 # 0 - halt (Do NOT set initdefault to this)2021/7/2411vi范例(续)v将将/root/myfile.txt文件中的所有文件中的所有“runlevel”替换成替换成“RUNLEVEL”,命令如下所示:,命令如下所示:v rootCandy root #vi myfile.txtrootCandy root #vi myfile.txt# Author: Miquel van Sm

15、oorenburg, # Modified for RHS Linux by Marc Ewing and Donnie Barnes# Default runlevel. The runlevels used by RHS are:# 0 - halt (Do NOT set initdefault to this):%s /runlevel/RUNLEVEL /g1 # Author: Miquel van Smoorenburg, 2 # Modified for RHS Linux by Marc Ewing and Donnie Barnes3 #4 5 # Default RUNL

16、EVEL. The RUNLEVEL used by RHS are:6 # 0 - halt (Do NOT set initdefault to this)2021/7/2412vi范例(续)v 复制复制56行的内容到第行的内容到第6行后面。操作方法为:首先将光标移动到第行后面。操作方法为:首先将光标移动到第5行,在命令模式下输入行,在命令模式下输入2yy,再将光标移动到第,再将光标移动到第6行,然后按行,然后按p键粘键粘贴。可以看到,第贴。可以看到,第56行的内容已经复制到第行的内容已经复制到第6行后面了。行后面了。 rootCandy root #vi myfile.txtrootCa

17、ndy root #vi myfile.txt# Author: Miquel van Smoorenburg, # Modified for RHS Linux by Marc Ewing and Donnie Barnes# Default runlevel. The runlevels used by RHS are:# 0 - halt (Do NOT set initdefault to this)# Default runlevel. The runlevels used by RHS are:# 0 - halt (Do NOT set initdefault to this)2

18、021/7/2413vi范例(续)v将将Shell命令执行完成的结果插入到指定行。命令执行完成的结果插入到指定行。v rootCandy root #vi myfile.txtrootCandy root #vi myfile.txt# Author: Miquel van Smoorenburg, # Modified for RHS Linux by Marc Ewing and Donnie Barnes# Default runlevel. The runlevels used by RHS are:# 0 - halt (Do NOT set initdefault to this)

19、# Default runlevel. The runlevels used by RHS are:# 0 - halt (Do NOT set initdefault to this):5 !cat /etc/hosts# Author: Miquel van Smoorenburg, # Modified for RHS Linux by Marc Ewing and Donnie Barnes#127.0.0.1 Candy localhost.localdomain localhost /插入的内容:1 localhost6.localdomain6 localhost6 /插入的内容

20、# Default runlevel. The runlevels used by RHS are:# 0 - halt (Do NOT set initdefault to this)# Default runlevel. The runlevels used by RHS are:# 0 - halt (Do NOT set initdefault to this)v 对于对于vi的操作,不应该死记硬背,而应该多实践、多练习。掌握的操作,不应该死记硬背,而应该多实践、多练习。掌握vi的操作后,的操作后,必定会给系统管理工作及编程带来极大的便利。必定会给系统管理工作及编程带来极大的便利。20

21、21/7/2414Shell 介绍v ShellShell从字面上翻译是外壳,是从字面上翻译是外壳,是LinuxLinux的命令语言解释器的命令语言解释器,是是LinuxLinux与外部最主要的接口。与外部最主要的接口。ShellShell管理用户与操作系统管理用户与操作系统之间的交互之间的交互: :等待用户的输入,向操作系统解释用户的输入,等待用户的输入,向操作系统解释用户的输入,并且处理各种各样的操作系统的输出结果。并且处理各种各样的操作系统的输出结果。 v ShellShell提供了用户与操作系统之间通讯的方式。这种通讯可提供了用户与操作系统之间通讯的方式。这种通讯可以从键盘输入,并且可

22、以立即得到响应的方式(交互式),以从键盘输入,并且可以立即得到响应的方式(交互式),或者以或者以ShellShell脚本(非交互脚本(非交互) )方式执行。方式执行。ShellShell脚本是放在文脚本是放在文件中的一串件中的一串ShellShell和操作系统命令,它们可以被重复使用。和操作系统命令,它们可以被重复使用。v 本质上,本质上,ShellShell是一个解释型的程序设计语言是一个解释型的程序设计语言。ShellShell程序程序设计语言支持绝大多数在高级语言中能见到的程序元素,设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。如函数、变量、数组和程

23、序控制结构。ShellShell编程语言简单编程语言简单易学,任何在提示符中键入的命令都能放到一个执行的易学,任何在提示符中键入的命令都能放到一个执行的ShellShell程序中。程序中。ShellShell是有效提高系统管理效率的利器。是有效提高系统管理效率的利器。 2021/7/2415Shell 介绍(续)v 1 1Shell Shell 可称为命令解释器可称为命令解释器v ShellShell负责用户和操作系统之间的沟通,把用户下达的命令解释给系负责用户和操作系统之间的沟通,把用户下达的命令解释给系统去执行,并将系统传回的信息再次解释给用户,它拥有自己内建的统去执行,并将系统传回的信息

24、再次解释给用户,它拥有自己内建的Shell Shell 命令集,也能被系统中其他应用程序调用。命令集,也能被系统中其他应用程序调用。v 2 2Shell Shell 还是一种高级程序设计语言还是一种高级程序设计语言v ShellShell有变量、关键字,有各种控制语句,如有变量、关键字,有各种控制语句,如ifif、casecase、whilewhile、for for 等语句,有自己的语法结构。利用等语句,有自己的语法结构。利用ShellShell程序设计语言可以编写出功程序设计语言可以编写出功能强大的代码程序。它可以把相关的能强大的代码程序。它可以把相关的Linux Linux 命令有机的组

25、合在一起,命令有机的组合在一起,大大提高编程效率,利用大大提高编程效率,利用Linux Linux 系统的开放性能,就能设计出适合用系统的开放性能,就能设计出适合用户要求的程序。户要求的程序。v Shell接到用户输入的命令后首先检查命令是否是内部命令,若不是再接到用户输入的命令后首先检查命令是否是内部命令,若不是再检查是否是一个应用程序。然后,检查是否是一个应用程序。然后,Shell在搜索路径里寻找这些应用程在搜索路径里寻找这些应用程序序(搜索路径就是一个能找到可执行程序的目录列表搜索路径就是一个能找到可执行程序的目录列表)。如果输入的命。如果输入的命令不是一个内部命令并且在路径里没有找到这

26、个可执行文件,将会显令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。如果能够成功找到命令,该内部命令或应用程序将示一条错误信息。如果能够成功找到命令,该内部命令或应用程序将被系统传送给被系统传送给Linux 内核。内核。2021/7/2416Shell、用户及Linux 操作系统内核之间关系图图7-4 Shell、用户及、用户及Linux 操作系统内核之间关系操作系统内核之间关系2021/7/2417常用的Shellv Linux 中的中的Shell有多种类型,其中最常见的是有多种类型,其中最常见的是Bourne Shell(sh)、C Shell(csh)和和Ko

27、rn Shell(ksh)。三种。三种Shell各有优缺点:各有优缺点:Bourne Shell是是Unix最初始的最初始的Shell,并且,并且在每种在每种Unix上都可以使用;上都可以使用;Bourne Shell 在在Shell编程方编程方面相当优秀,但在处理与用户的交互方面做得不如其他几面相当优秀,但在处理与用户的交互方面做得不如其他几种种Shell;Bash(Bourne Again Shell)是是Bourne Shell 的的扩展,与扩展,与Bourne Shell 完全兼容,并且增加了许多特性,完全兼容,并且增加了许多特性,它还包含了很多它还包含了很多C Shell 和和Kor

28、n Shell中的优点,有灵活中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。和强大的编程接口,同时又有很友好的用户界面。v 用户如何查看自己使用的用户如何查看自己使用的Shell?最简单的方式是使用?最简单的方式是使用echo命令,查询系统环境变量的值。命令如下:命令,查询系统环境变量的值。命令如下: rootCandy #echo $SHELL /bin/bash2021/7/2418Bash的优点vBash Bash 是大多数是大多数LinuxLinux(包括(包括Fedora 8Fedora 8)系统的默)系统的默认认ShellShell。BashBash有以下优点:有以下

29、优点: 补全命令补全命令 通配符通配符 历史命令历史命令 支持命令别名支持命令别名 输入输入/ /输出重定向输出重定向 管道功能管道功能 提示符提示符 作业控制作业控制2021/7/2419Shell脚本的建立v ShellShell程序可以以交互式方式运行,更多的是以程序方式运行。程序可以以交互式方式运行,更多的是以程序方式运行。v 在命令行上直接输入在命令行上直接输入shellshell脚本是一种测试短小代码段的简单而快捷的方式。脚本是一种测试短小代码段的简单而快捷的方式。如果正在学习如果正在学习ShellShell脚本或仅仅是为了进行测试,使用交互式方式是非常有用脚本或仅仅是为了进行测试

30、,使用交互式方式是非常有用的。例如:的。例如:v 假设想要从大量假设想要从大量C C语言源文件中查找包含字符串语言源文件中查找包含字符串“POSIX”POSIX”的文件。与其使用的文件。与其使用grepgrep命令在每个文件中搜索字符串,然后再依次列出包含该字符串的文件,命令在每个文件中搜索字符串,然后再依次列出包含该字符串的文件,不如用下面的交互式脚本来执行整个操作:不如用下面的交互式脚本来执行整个操作:rootCandy #for file in rootCandy #for file in * * do do if grep l POSIX $file if grep l POSIX $

31、file then then more $file more $file fi fi done donePOSIXPOSIXThis is a file with POSIX in it treat it wellThis is a file with POSIX in it treat it wellrootCandy #rootCandy #2021/7/2420shell脚本的建立(续)v更多的是在程序编辑器中建立更多的是在程序编辑器中建立ShellShell脚本。例如,在文本编辑器中输入下列内容,并保脚本。例如,在文本编辑器中输入下列内容,并保存为存为mydemo1mydemo1:#!

32、/bin/bash#!/bin/bash clear clear echo This is information provided by mysystem.sh. Program starts now. echo This is information provided by mysystem.sh. Program starts now. echo Hello, $USER echo Hello, $USER echo echo echo Todays date is date, this is week date +%V. echo Todays date is date, this i

33、s week date +%V. echo echo echo -n These users are currently connected: echo -n These users are currently connected: w | cut -d -f 1 - | grep -v USER | sort -uw | cut -d -f 1 - | grep -v USER | sort -u echo echo echo This is uname -s running on a uname -m processor. echo This is uname -s running on

34、a uname -m processor. echo echo echo This is the uptime information: echo This is the uptime information: uptime uptime echo echo echo Thats all folks! echo Thats all folks! #end #end2021/7/2421shell脚本的建立(续)v 说明:说明: 文件中以文件中以“”开头的行是注释行,在执行的时候会开头的行是注释行,在执行的时候会被忽略;被忽略; 文件中的第一行文件中的第一行“#!/bin/bash”#!/bin

35、/bash”用来指定脚本以用来指定脚本以bashbash执行,并指定执行,并指定bashbash的路径为的路径为“/bin”/bin”; echo echo命令用来显示提示信息,参数命令用来显示提示信息,参数“- n”- n”表示在显表示在显示信息时不自动换行(默认会自动换行);示信息时不自动换行(默认会自动换行);uname -suname -s字符串左右的反引号(字符串左右的反引号( )用于命令置换,)用于命令置换,也就是将它所括起来的字符串视为命令执行,并将其也就是将它所括起来的字符串视为命令执行,并将其输出字符串原地展开。倒数第输出字符串原地展开。倒数第5 5行也可以改为:行也可以改为

36、:echo echo “This is the uptime information:uptime“This is the uptime information:uptime;程序末行程序末行“#end”#end”可加可不加,仅表注释。可加可不加,仅表注释。2021/7/2422Shell脚本的执行v 脚本创建之后如何执行?执行脚本创建之后如何执行?执行ShellShell脚本的方式基本上有脚本的方式基本上有下述三种。下述三种。v (1) (1) 使用使用“.”.”命令。在命令。在BashBash下使用下使用“.”.”命令可执行命令可执行ShellShell脚本。脚本。v 例如:执行例如:执行

37、mydemo1mydemo1。 rootCandy #. mydemo1rootCandy #. mydemo1v (2) (2) 以脚本名作为参数。其一般形式为:以脚本名作为参数。其一般形式为:bash bash 脚本名脚本名v 例如:执行例如:执行test1.sh test1.sh 。 rootCandy #bash test1.sh /root /home/studentrootCandy #bash test1.sh /root /home/studentv 执行执行test1.sh test1.sh 时带了两个参数时带了两个参数/root /root 、 /home/student/

38、home/student,如果要带参数执行,建议采用下面的方法设置文件为可执如果要带参数执行,建议采用下面的方法设置文件为可执行。行。2021/7/2423Shell脚本的执行(续)v (3) (3) 将将Shell Shell 脚本的权限设置为可执行,然后在提示符下直接执行。脚本的权限设置为可执行,然后在提示符下直接执行。v 通常,用户是不能直接执行由正文编辑器通常,用户是不能直接执行由正文编辑器( (如如vi)vi)建立的建立的Shell Shell 脚本的,脚本的,因为直接编辑生成的脚本文件没有因为直接编辑生成的脚本文件没有“执行执行”权限。如果要把权限。如果要把Shell Shell

39、脚脚本直接当作命令执行,就需要利用命令本直接当作命令执行,就需要利用命令chmod chmod 将它设置为有将它设置为有“执行执行”权限。权限。v 例如:将脚本例如:将脚本“test2.sh”test2.sh”设置为对所有用户都有设置为对所有用户都有“执行执行”权限并执权限并执行。行。 rootCandy #chmod a+x test2.shrootCandy #chmod a+x test2.shv 在提示符后输入脚本名在提示符后输入脚本名“test2.sh”test2.sh”就可直接执行该文件。就可直接执行该文件。 rootCandy #./test2.shrootCandy #./te

40、st2.shv 以上以上“./”./”表示当前目录。若不加表示当前目录。若不加“./” ./” ,则可能会看到一条错误,则可能会看到一条错误信息告诉用户未找到命令。这种情况很可能发生,因为信息告诉用户未找到命令。这种情况很可能发生,因为ShellShell环境变环境变量量PATHPATH没有被设置为在当前目录下查找要执行的命令。要解决这个问没有被设置为在当前目录下查找要执行的命令。要解决这个问题,一种办法是在命令行上直接输入命令题,一种办法是在命令行上直接输入命令“PATH=$PATHPATH=$PATH:”,或编辑,或编辑用户的用户的“.bash_profile”.bash_profile”

41、文件,将刚才这条命令添加到文件的末尾,文件,将刚才这条命令添加到文件的末尾,然后退出登录然后退出登录后再重新登录进来。使用后再重新登录进来。使用“./”./”来指定路径还有另一个来指定路径还有另一个好处,就是它能够保证不会意外执行系统中与用户脚本文件同名的其好处,就是它能够保证不会意外执行系统中与用户脚本文件同名的其它路径中的另一个命令。它路径中的另一个命令。2021/7/2424Shell环境变量v在在WindowsWindows系统中,用户一般都有自己的个性化桌系统中,用户一般都有自己的个性化桌面和随系统启动时的程序等,例如,随系统启动面和随系统启动时的程序等,例如,随系统启动的杀毒软件,

42、以及有些用户开机时就喜欢启动的的杀毒软件,以及有些用户开机时就喜欢启动的QQQQ软件。同样,在软件。同样,在LinuxLinux系统文本登录模式中,用系统文本登录模式中,用户在登录过程中系统要做的一件事就是建立用户户在登录过程中系统要做的一件事就是建立用户环境,就是环境,就是ShellShell下的控制及设置,包括文件搜索下的控制及设置,包括文件搜索路径、用户目录和系统提示符等这些对用户工作路径、用户目录和系统提示符等这些对用户工作环境的设置,在环境的设置,在LinuxLinux中一般通过环境变量来完成,中一般通过环境变量来完成,通过设置这些环境变量来控制用户环境。通过设置这些环境变量来控制用

43、户环境。Linux Linux 系统的环境变量通常以大写字母来表示。环境变系统的环境变量通常以大写字母来表示。环境变量是很重要的,那么在量是很重要的,那么在LinuxLinux系统中到底有多少环系统中到底有多少环境变量呢?可以简单的使用境变量呢?可以简单的使用env(environment env(environment 的的缩写缩写) )或者或者setset查询系统的环境变量。查询系统的环境变量。2021/7/2425Shell环境变量(续)rootCandy #envrootCandy #envHOSTNAME=CandyHOSTNAME=CandyTERM=linuxTERM=linux

44、SHELL=/bin/bashSHELL=/bin/bashHISTSIZE=1000HISTSIZE=1000XDG_SESSION_COOKIE=2fe8d4174bf3c5783964640047f6aa00-1208971785.81815-761023854XDG_SESSION_COOKIE=2fe8d4174bf3c5783964640047f6aa00-1208971785.81815-761023854OLDPWD=/OLDPWD=/USER=rootUSER=rootCCACHE_DIR=/var/cache/ccacheCCACHE_DIR=/var/cache/ccac

45、heMAIL=/var/spool/mail/rootMAIL=/var/spool/mail/rootPATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache:/usr/local/sbin:/usr/local/bin:/sbin:/bin:PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/sbin:/usr/bin:

46、/root/bin:INPUTRC=/etc/inputrcINPUTRC=/etc/inputrcPWD=/rootPWD=/rootCCACHE_UMASK=002CCACHE_UMASK=002LANG=en_US.UTF-8LANG=en_US.UTF-8KDE_IS_PRELINKED=1KDE_IS_PRELINKED=1KDEDIRS=/usrKDEDIRS=/usrSSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpassSSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpassSHLVL=1S

47、HLVL=1HOME=/rootHOME=/rootLOGNAME=rootLOGNAME=rootCVS_RSH=sshCVS_RSH=sshLESSOPEN=|/usr/bin/lesspipe.sh %sLESSOPEN=|/usr/bin/lesspipe.sh %sG_BROKEN_FILENAMES=1G_BROKEN_FILENAMES=1_=/bin/env_=/bin/env2021/7/2426Shell环境变量特殊变量变量变量 功能功能$#$#表示命令行参数的个数表示命令行参数的个数$?$?表示上一条命令执行后表示上一条命令执行后的返回值的返回值$当前进程的进程号当前进程

48、的进程号$ $* *表示表示ShellShell程序的所有程序的所有参数串参数串$表示命令行中输入的所表示命令行中输入的所有参数串有参数串$0$0命令行中输入的命令行中输入的ShellShell程序名程序名$!表示上一个后台执行命表示上一个后台执行命令的令的PID2021/7/2427Shell环境变量(续)v使用环境变量使用环境变量v可以用可以用echoecho命令查看任何一个环境变量的命令查看任何一个环境变量的值,也可以在命令中将环境变量的值作为值,也可以在命令中将环境变量的值作为参数,使用环境变量时,要在其名称前面参数,使用环境变量时,要在其名称前面加上加上“$”$”符号。符号。v例如:

49、显示例如:显示ShellShell提示符的格式提示符的格式 rootCandy #echo $PS1rootCandy #echo $PS12021/7/2428Shell语法Shell变量v 所谓变量,就是可存放数据的识别符号,所谓变量,就是可存放数据的识别符号,Shell程序中采程序中采用变量来存放字符串。用变量来存放字符串。Shell变量比变量比C语言中的变量简单得语言中的变量简单得多,没有众多存储类及类型的限制,也不需要预先定义后多,没有众多存储类及类型的限制,也不需要预先定义后才能赋值,可以在使用时才能赋值,可以在使用时“现定义、现赋值现定义、现赋值”。v Shell有两类变量:环境

50、变量和临时变量。环境变量是永有两类变量:环境变量和临时变量。环境变量是永久性变量,其值不会随久性变量,其值不会随Shell脚本执行结束而消失。而临脚本执行结束而消失。而临时变量是在时变量是在Shell程序内部定义的,其使用范围仅限于定程序内部定义的,其使用范围仅限于定义它的程序,离开了该程序就不能再用,当程序执行完毕义它的程序,离开了该程序就不能再用,当程序执行完毕它的值也就不存在了。它的值也就不存在了。v 1变量名变量名v 用户定义的变量是最普通的用户定义的变量是最普通的Shell变量。变量名是以字母变量。变量名是以字母或下划线打头的字母、数字和下线线序列,并且大小写字或下划线打头的字母、数

51、字和下线线序列,并且大小写字母意义不同。例如,母意义不同。例如,Ls与与ls是不同的变量。这与是不同的变量。这与C语言中语言中标识符的定义相同。变量名的长度不受限制。标识符的定义相同。变量名的长度不受限制。2021/7/2429Shell变量(续)v 2 2变量赋值变量赋值v 定义变量并赋值的一般形式为:变量名定义变量并赋值的一般形式为:变量名= =字符串。变量赋值的注意事字符串。变量赋值的注意事项说明如下:项说明如下: 在赋值语句中,赋值号在赋值语句中,赋值号“=”=”的两边没有空格,否则在执行时会引起错的两边没有空格,否则在执行时会引起错误。误。 若有空格符可以使用双引号若有空格符可以使用

52、双引号“”或单引号或单引号 “”来将变量内容结合起来将变量内容结合起来,但需要特别留意,双引号内的特殊字符可以保有变量特性,但是单来,但需要特别留意,双引号内的特殊字符可以保有变量特性,但是单引号内的特殊字符则仅为一般字符。引号内的特殊字符则仅为一般字符。 必要时需要以跳脱字符必要时需要以跳脱字符“ ” ”来将特殊符号来将特殊符号( (如如$ $, ,空格符等,空格符等) )变成变成一般符号。一般符号。v 例如:变量赋值。例如:变量赋值。 rootCandy #myfile=/root/envidemorootCandy #myfile=/root/envidemov “myfile”“myf

53、ile”是变量名,是变量名,“=”=”是赋值号,字符串是赋值号,字符串“/root/envidemo”/root/envidemo”是赋予变量是赋予变量myfilemyfile的值。变量的值可以改变,只需利用赋值语句重新的值。变量的值可以改变,只需利用赋值语句重新给它赋值。例如:给它赋值。例如:myfile=/root/list.txtmyfile=/root/list.txt。此时,变量。此时,变量myfilemyfile的值的值就是就是/root/list.txt/root/list.txt。v 再如:特殊变量赋值。再如:特殊变量赋值。 rootCandy #computer =IBM X

54、60rootCandy #computer =IBM X60v 等号右边有空格,因此要用双引号括起。等号右边有空格,因此要用双引号括起。2021/7/2430Shell变量(续)v3引用变量值引用变量值v在程序中使用变量的值时,要在变量名前面加上一在程序中使用变量的值时,要在变量名前面加上一个符号个符号“$”$”。这个符号告诉。这个符号告诉ShellShell,要取出其后变,要取出其后变量的值。量的值。v例如:显示变量。例如:显示变量。 rootCandy #echo myfile myfilerootCandy #echo myfile myfile rootCandy #echo $myf

55、ile /root/envidemo rootCandy #echo $myfile /root/envidemov可以看到变量名前面没有加符号可以看到变量名前面没有加符号“$”$”,说明,说明myfilemyfile不是变量,而是一般的字符串常量,而变量不是变量,而是一般的字符串常量,而变量名前面加符号名前面加符号“$”$”,则说明,则说明myfilemyfile是变量,才可是变量,才可以输出变量的值。以输出变量的值。2021/7/2431Shell变量(续)v 4命令替换命令替换v 有两种形式的命令替换。有两种形式的命令替换。v (1) 使用反引号使用反引号()引用命令,其一般形式为:引用

56、命令,其一般形式为:命令表命令表。v 在在“ ”之内的指令将会被先执行,而其执行出来的结果将作为外部的之内的指令将会被先执行,而其执行出来的结果将作为外部的输入信息替换原来内容。输入信息替换原来内容。v 例如:将路径存放到变量例如:将路径存放到变量dir中。中。 rootCandy #dir=/lib/modules/uname r /lib/modules/2.6.23.1-42.fc8v uname r会显示出目前的内核版本,因此用户可以先执行会显示出目前的内核版本,因此用户可以先执行uname r 找出内核版本,再替换找出内核版本,再替换uname r,最后把整个结果赋值给,最后把整个结

57、果赋值给dir变量。变量。v (2) 使用形式是使用形式是$(命令表命令表)。其中,命令表是用分号隔开的命令。其中,命令表是用分号隔开的命令。v 例如:把当前工作目录的全路路径名存放到变量例如:把当前工作目录的全路路径名存放到变量dir中。中。 rootCandy #dir=$(pwd)v 例如:命令组合替换。例如:命令组合替换。 rootCandy #echo $(pwd; cd /home; ls)v 执行上述命令后首先显示当前目录,然后跳到执行上述命令后首先显示当前目录,然后跳到/home 目录,显示其内目录,显示其内容。容。2021/7/2432算术运算v整数算术运算表达式与整数算术运

58、算表达式与C语言中表达式的语法类语言中表达式的语法类似。似。v1算术运算算术运算例如:加法运算。例如:加法运算。 rootCandy #let a=0 rootCandy #let a=a+1v其替代表示形式是其替代表示形式是let“a=a+1”或或(a=a+1),一般,一般来说,由于来说,由于Shell是一种弱编程语言,算术运算不是一种弱编程语言,算术运算不算强大,使用算强大,使用(a=a+1)格式执行效率较高。格式执行效率较高。2021/7/2433算术运算符及其优先级运算符运算符优先级优先级结合性结合性作用作用+;-1正;负正;负!;2非;按位求反非;按位求反*3幂幂*;/;%4乘;除;

59、取模乘;除;取模+;-5加;减加;减6左移;又移左移;又移;=;=7关系关系=;!=8相等;不相等相等;不相等&9与与2021/7/2434算术运算(续)v例例:用:用Shell编程计算编程计算8*(9+10)的值。的值。#!/bin/bash#!/bin/bashsum=expr 8 sum=expr 8 * * (9 + 10 ) (9 + 10 )echo “The sum is: $sum”echo “The sum is: $sum”#end#endv以上程序中,第二行等号两边没空格;第二行以上程序中,第二行等号两边没空格;第二行expr表达式表示数值计算,格式为表达式表示数值计算,

60、格式为“expr expression”,其中,其中expression是由字符串以及是由字符串以及运算符所组成的,每个字符串或运算符之间必须运算符所组成的,每个字符串或运算符之间必须用空格隔开;当表达式中含有用空格隔开;当表达式中含有“*”;“(”;“)”等非字母或数字符号时,必须在其前面加等非字母或数字符号时,必须在其前面加上上“”,以免被,以免被Shell解释成其它含义。解释成其它含义。2021/7/2435条件语句v 1 1条件测试条件测试testtestv 用用testtest命令进行条件测试。格式为:命令进行条件测试。格式为: test expression test expres

温馨提示

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

最新文档

评论

0/150

提交评论