第7章 Shell编程.ppt
《第7章 Shell编程.ppt》由会员分享,可在线阅读,更多相关《第7章 Shell编程.ppt(64页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Linux实用教程第第7章章 Shell编程编程熟悉熟悉ShellShell程序的创建程序的创建7.1ShellShell变量变量7.2变量表达式变量表达式7.3ShellShell程序的执行和跟踪程序的执行和跟踪7.4ShellShell流程控制语句流程控制语句7.5 通常情况下,从命令行每输入一次命令就通常情况下,从命令行每输入一次命令就能够得到系统响应,如果需要一个接着一个地能够得到系统响应,如果需要一个接着一个地输入命令才得到结果的时候,这样的做法效率输入命令才得到结果的时候,这样的做法效率很低。使用很低。使用ShellShell程序或者程序或者ShellShell脚本可以很好脚本可以
2、很好地解决这个问题。地解决这个问题。7.17.1熟悉熟悉ShellShell程序的创建程序的创建 作为命令语言互动式地解释和执行用户输作为命令语言互动式地解释和执行用户输入的命令是入的命令是ShellShell的功能之一,的功能之一,ShellShell还可以用还可以用来进行程序设计,它提供了定义变量和参数的来进行程序设计,它提供了定义变量和参数的手段以及丰富的过程控制结构。使用手段以及丰富的过程控制结构。使用ShellShell编编程类似于使用程类似于使用DOSDOS中的批处理文件,称为中的批处理文件,称为ShellShell脚本,又叫做脚本,又叫做ShellShell程序或程序或Shell
3、Shell命令文件。命令文件。7.1.1语法基本介绍语法基本介绍 Shell Shell程序基本语法较为简单,主要由开程序基本语法较为简单,主要由开头部分、注释部分以及语句执行部分组成。头部分、注释部分以及语句执行部分组成。Shell Shell程序必须以下面的行开始(必须放程序必须以下面的行开始(必须放在文件的第一行)。在文件的第一行)。#!/bin/bash#!/bin/bash 符号符号“#!#!”用来告诉系统它后面的参数是用来告诉系统它后面的参数是用来执行该文件的程序,在这个例子中使用用来执行该文件的程序,在这个例子中使用/bin/bash/bin/bash来执行程序。当编辑好脚本时,
4、如来执行程序。当编辑好脚本时,如果要执行该脚本,还必须使其可执行。果要执行该脚本,还必须使其可执行。1 1开头开头 要使脚本可执行,需赋予该文件可执行的要使脚本可执行,需赋予该文件可执行的权限,使用如下命令文件才能运行。权限,使用如下命令文件才能运行。chmodchmod u+xu+x 文件名文件名 在进行在进行ShellShell编程时,以编程时,以“#”开头的句子开头的句子表示注释,直到这一行的结束,建议在程序中表示注释,直到这一行的结束,建议在程序中使用注释。如果使用注释,那么即使相当长的使用注释。如果使用注释,那么即使相当长的时间内没有使用该脚本,也能在很短的时间内时间内没有使用该脚本
5、,也能在很短的时间内明白该脚本的作用及工作原理。明白该脚本的作用及工作原理。2 2注释注释7.1.2一个简单一个简单Shell程序的创建过程程序的创建过程 Shell Shell程序就是放在一个文件中的一系列程序就是放在一个文件中的一系列LinuxLinux命令和实用程序,在执行的时候,通过命令和实用程序,在执行的时候,通过LinuxLinux系统一个接着一个地解释和执行每个命系统一个接着一个地解释和执行每个命令,这和令,这和WindowsWindows系统下的批处理程序非常相系统下的批处理程序非常相似。似。1 1创建文件创建文件2 2设置可执行权限设置可执行权限3 3执行执行ShellShe
6、ll程序程序4 4使用使用bashbash命令执行程序命令执行程序7.1.3显示欢迎界面的显示欢迎界面的Shell程序程序通过上一节的实例可以掌握整个通过上一节的实例可以掌握整个ShellShell程序编程序编写和执行的方法,接下来再来学习一个实例。写和执行的方法,接下来再来学习一个实例。7.27.2ShellShell变量变量 像高级程序设计语言一样,像高级程序设计语言一样,ShellShell也提供也提供说明和使用变量的功能。对说明和使用变量的功能。对ShellShell来讲,所有来讲,所有变量的取值都是一个字符,变量的取值都是一个字符,ShellShell程序采用程序采用“$varvar
7、”的形式来引用名为的形式来引用名为varvar的变量的值。的变量的值。7.2.1Shell定义的环境变量定义的环境变量 Shell Shell在开始执行时就已经定义了一些与系在开始执行时就已经定义了一些与系统的工作环境有关的变量,用户还可以重新定统的工作环境有关的变量,用户还可以重新定义这些变量,常用的义这些变量,常用的ShellShell环境变量如下。环境变量如下。HOME HOME PATH PATH TERM TERM UID UID PWD PWD PS1 PS1 PS2 PS2 【例例7.17.1】查看当前用户查看当前用户ShellShell定义的环定义的环境变量的值。境变量的值。7
8、.2.2用户定义的变量用户定义的变量 用户可以按照下面的语法规则定义自己的用户可以按照下面的语法规则定义自己的变量:变量:变量名变量名=变量值变量值 在定义变量时,变量名前不应加符号在定义变量时,变量名前不应加符号“$”;在引用变量的内容时,则应在变量名;在引用变量的内容时,则应在变量名前加符号前加符号“$”。在给变量赋值时,等号两边一定不能留空在给变量赋值时,等号两边一定不能留空格,若变量中本身就包含了空格,则整个字符格,若变量中本身就包含了空格,则整个字符串都要用双引号括起来。在编写串都要用双引号括起来。在编写ShellShell程序时,程序时,为了使变量名和命令名相区别,建议所有的变为了
9、使变量名和命令名相区别,建议所有的变量名都用大写字母来表示。量名都用大写字母来表示。【例例7.27.2】用户定义变量的使用。用户定义变量的使用。有时需要在说明一个变量并对它设置为一有时需要在说明一个变量并对它设置为一个特定值后就不再改变它的值时,可以用下面个特定值后就不再改变它的值时,可以用下面的命令来保证一个变量的只读性。的命令来保证一个变量的只读性。readonlyreadonly 变量名变量名 在任何时候创建的变量都只是当前在任何时候创建的变量都只是当前ShellShell的局部变量,所以不能被的局部变量,所以不能被ShellShell运行的其他命运行的其他命令或令或ShellShell
10、程序所利用,而程序所利用,而exportexport命令可以将命令可以将一个局部变量提供给一个局部变量提供给ShellShell命令使用,其格式命令使用,其格式是:是:export export 变量名变量名 也可以在给变量赋值的同时使用也可以在给变量赋值的同时使用exportexport命命令:令:export export 变量名变量名=变量值变量值 使用使用exportexport说明的变量在说明的变量在ShellShell以后运行以后运行的所有命令或程序中都可以访问到。的所有命令或程序中都可以访问到。7.2.3位置参数位置参数 位置参数是一种在调用位置参数是一种在调用ShellShel
11、l程序的命令行程序的命令行中按照各自的位置决定的变量,是在程序名之中按照各自的位置决定的变量,是在程序名之后输入的参数。位置参数之间用空格分隔,后输入的参数。位置参数之间用空格分隔,ShellShell取第一个位置参数替换程序文件中的取第一个位置参数替换程序文件中的$1$1,第二个替换,第二个替换$2$2,依次类推。,依次类推。$0$0是一个特殊的是一个特殊的变量,它的内容是当前这个变量,它的内容是当前这个ShellShell程序的文件程序的文件名,所以,名,所以,$0$0不是一个位置参数,在显示当前不是一个位置参数,在显示当前所有的位置参数时是不包括所有的位置参数时是不包括$0$0的。的。7
12、.2.4预定义变量预定义变量 预定义变量和环境变量相类似,也是在预定义变量和环境变量相类似,也是在ShellShell一开始时就定义了的变量。所不同的是,一开始时就定义了的变量。所不同的是,用户只能根据用户只能根据ShellShell的定义来使用这些变量,的定义来使用这些变量,所有预定义变量都是由符号所有预定义变量都是由符号“$”和另一个符和另一个符号组成的。号组成的。常用的常用的ShellShell预定义变量如下。预定义变量如下。$#$#:位置参数的数量。:位置参数的数量。$*$*:所有位置参数的内容。:所有位置参数的内容。$?$?:命令执行后返回的状态。:命令执行后返回的状态。$:当前进程
13、的进程号。:当前进程的进程号。$!$!:后台运行的最后一个进程号。:后台运行的最后一个进程号。$0$0:当前执行的进程名。:当前执行的进程名。7.2.5参数置换的变量参数置换的变量 Shell Shell提供了参数置换功能以便用户可以根提供了参数置换功能以便用户可以根据不同的条件来给变量赋不同的值。参数置换据不同的条件来给变量赋不同的值。参数置换的变量有的变量有4 4种,这些变量通常与某一个位置参种,这些变量通常与某一个位置参数相联系,根据指定的位置参数是否已经设置数相联系,根据指定的位置参数是否已经设置决定变量的取值,它们的语法和功能分别如下。决定变量的取值,它们的语法和功能分别如下。1 1
14、变量变量=$=$参数参数-word-word2 2变量变量=$=$参数参数=word=word3 3变量变量=$=$参数?参数?wordword4 4变量变量=$=$参数参数+word+word7.37.3变量表达式变量表达式 test test是是ShellShell程序中的一个表达式,通过程序中的一个表达式,通过和和ShellShell提供的提供的ifif等条件语句相结合可以方便等条件语句相结合可以方便地测试字符串、文件状态和数字。其语法如下:地测试字符串、文件状态和数字。其语法如下:test test 表达式表达式 表达式所代表的操作符有字符串操作符、表达式所代表的操作符有字符串操作符、
15、数字操作符、逻辑操作符以及文件操作符。数字操作符、逻辑操作符以及文件操作符。7.3.1字符串比较字符串比较 作用:测试字符串是否相等,长度是否为作用:测试字符串是否相等,长度是否为零,字符串是否为零,字符串是否为NULLNULL。常用的字符串比较符号如下。常用的字符串比较符号如下。=:比较两个字符串是否相同,相同则为:比较两个字符串是否相同,相同则为“是是”。!=!=:比较两个字符串是否相同,不同则为:比较两个字符串是否相同,不同则为“是是”。-n -n:比较字符串的长度是否大于:比较字符串的长度是否大于0 0,如果,如果大于大于0 0则为则为“是是”。-z -z:比较字符串的长度是否等于:比
16、较字符串的长度是否等于0 0,如果,如果等于等于0 0则为则为“是是”。【例例7.37.3】字符串比较的使用。字符串比较的使用。【例例7.47.4】含有空格的字符串的比较。含有空格的字符串的比较。7.3.2数字比较数字比较 test test语句不使用语句不使用“?”类似的符号来表达类似的符号来表达大小的比较,而是用整数来表示,常用的数字大小的比较,而是用整数来表示,常用的数字比较符号如下。比较符号如下。-eqeq:相等。:相等。-gege:大于等于。:大于等于。-le -le:小于等于。:小于等于。-nene:不等于。:不等于。-gtgt:大于。:大于。-ltlt:小于。:小于。【例例7.5
17、7.5】数字相等比较。数字相等比较。【例例7.67.6】数字大于比较。数字大于比较。7.3.3逻辑测试逻辑测试 常用的逻辑测试符号如下。常用的逻辑测试符号如下。!:与一个逻辑值相反的逻辑值。:与一个逻辑值相反的逻辑值。-a -a与(与(andand):两个逻辑值都为):两个逻辑值都为“是是”返返回值才为回值才为“是是”,反之为,反之为“否否”。-o -o或(或(oror):两个逻辑值有一个为):两个逻辑值有一个为“是是”,返回值就为,返回值就为“是是”。【例例7.77.7】逻辑测试。逻辑测试。7.3.4文件操作文件操作 文件测试表达式通常是为了测试文件的文文件测试表达式通常是为了测试文件的文件
18、操作逻辑,测试符号如下。件操作逻辑,测试符号如下。-d -d:对象存在且为目录,则返回值为:对象存在且为目录,则返回值为“是是”。-f -f:对象存在且为文件,则返回值为:对象存在且为文件,则返回值为“是是”。-L -L:对象存在且为符号连接,则返回值为:对象存在且为符号连接,则返回值为“是是”。-r -r:对象存在且可读,则返回值为:对象存在且可读,则返回值为“是是”。-s -s:对象存在且长度非:对象存在且长度非0 0,则返回值为,则返回值为“是是”。-w -w:对象存在且可写,则返回值为:对象存在且可写,则返回值为“是是”。-x -x:对象存在且可执行,则返回值为:对象存在且可执行,则返
19、回值为“是是”。!:测试条件的否定。:测试条件的否定。【例例7.87.8】文件操作测试。文件操作测试。7.47.4ShellShell程序的执行和跟踪程序的执行和跟踪 用户可以用任何编辑程序来编写用户可以用任何编辑程序来编写ShellShell程程序。因为序。因为ShellShell程序是解释执行的,所以不需程序是解释执行的,所以不需要编译成目的程序。要编译成目的程序。7.4.1Shell程序的执行和调试程序的执行和调试 按照按照ShellShell编程的惯例,以编程的惯例,以bashbash为例,程序为例,程序的第一行一般为的第一行一般为“#!/bin/bash/bin/bash”,其中,其
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7章 Shell编程 Shell 编程
限制150内