Linux课程介绍第四章.ppt

上传人:sccc 文档编号:5339952 上传时间:2023-06-27 格式:PPT 页数:83 大小:673.51KB
返回 下载 相关 举报
Linux课程介绍第四章.ppt_第1页
第1页 / 共83页
Linux课程介绍第四章.ppt_第2页
第2页 / 共83页
Linux课程介绍第四章.ppt_第3页
第3页 / 共83页
Linux课程介绍第四章.ppt_第4页
第4页 / 共83页
Linux课程介绍第四章.ppt_第5页
第5页 / 共83页
点击查看更多>>
资源描述

《Linux课程介绍第四章.ppt》由会员分享,可在线阅读,更多相关《Linux课程介绍第四章.ppt(83页珍藏版)》请在三一办公上搜索。

1、2010年秋季,北京理工大学珠海学院计算机学院,Linux系统管理与应用,计算机科学教研室主讲:胡敬朋,本章教学安排,一、教学目的、要求:本章要求掌握Linux下shell的使用方法。主要介绍Linux shell的语法结构、变量定义以及赋值引用、标点符号、控制语句等。二、教学内容 第1节 shell概述第9节 控制结构 第2节 命令历史第10节 函数 第3节 名称补全第11节 作业控制 第4节 别名第12节 shell内置命令 第5节 shell特殊字符第13节 shell脚本调试 第6节 shell变量 第7节 参数置换变量 第8节 算术运算,三、重点内容shell的主要特点、类型、建立和

2、执行的方式bash变量的分类、定义形式及引用规则各种控制语句的格式、功能及流程bash中算术运算的使用bash函数的构成及使用规则bash中的内置命令采用图表和板书重点讲解,第四章 Linux Shell程序设计,第1节 shell概述第9节 控制结构第2节 命令历史第10节 函数第3节 名称补全第11节 作业控制第4节 别名第12节 shell内置命令第5节 shell特殊字符第13节 shell脚本调试第6节 shell变量第7节 参数置换变量第8节 算术运算,4.1 shell 概述,4.1.1 shell的特点和主要版本4.1.2 shell程序示例4.1.3 shell脚本的建立和执

3、行,4.1.1 shell的特点和主要版本,作为命令解释程序一种高级程序设计语言,它有变量,关键字,有各种控制语句,如if、case、while、for等语句,支持函数模块,有自己的语法结构1.shell的特点组合新命令 提供了文件名扩展字符 直接使用shell的内置命令 灵活地使用数据流 结构化的程序模块 在后台执行命令 可配置的环境 高级的命令语言,2shell的种类(1)Bourne shell(简称sh)(2)C shell(简称csh)(3)Korn shell(简称ksh)(4)Bourne Again shell(即bash),4.1.2 shell程序示例,【例4.1】由三条简

4、单命令组成的shell程序(文件名为ex1)。$cat ex1datepwdcd.,【例4.2】带有控制结构的shell程序(文件名为ex2)。$cat ex2#!/bin/bash#If no arguments,then listing the current directory.#Otherwise,listing each subdirectory.if test$#=0then ls.else for i do ls-l$i|grep d donefi,4.1.3 shell脚本的建立和执行,1、shell脚本的建立2、执行shell脚本的方式 执行shell脚本的方式基本上有三种:

5、(1)输入定向到shell脚本$bash 脚本名(2)以脚本名作为参数 其一般形式是:$bash 脚本名 参数如果以目前shell(以表示)执行一个shell脚本,则可以使用如下简便形式:$脚本名 参数(3)将shell脚本的权限设置为可执行,然后在提示符下直接执行它。$chmod a+x ex2$PATH=$PATH:.$ex2注意,此时该脚本所在的目录应被包含在命令搜索路径(PATH)中,4.2 命令历史,4.2.1显示历史命令4.2.2执行历史命令4.2.3配置历史命令环境,4.2.1 显示历史命令,语法格式是:history option arg 如果不带任何参数,则history命令

6、会显示历史命令的清单 如果history 后给出一个正整数(如50),就只显示历史表中的最后50行命令 如果history后给出一个文件名,就把它作为历史文件名 常用的选项有:-a 在历史文件中添加“新”历史命令行。-n 从历史文件中读取尚未读入的历史命令行,添加到当前历史清单中。-r 读取历史文件的内容,并把它作为当前的历史命令。-w 把当前的历史写到历史文件中,覆盖原有内容。-c 删除历史清单中所有的项。,4.2.2 执行历史命令,执行历史命令是命令替换之一,它以字符“!”开头、后随1个或多个字符来定义用户所需的某种类型的历史命令 基本的事件指定字格式,4.2.3 配置历史命令环境,在默认

7、方式下,bash使用用户主目录下面的文件“.bash_history”来保存命令历史 改变存放历史命令的文件$HISTFILE=/home/mengqc/.myhistory重新设定能够保留的命令个数$HISTSIZE=600,4.3 名称补全,可以输入目录名或文件名的开头部分,然后按Tab键,Linux根据输入的字母查找以这些字母开头的目录或文件,并自动补全剩余的部分。,4.4 别 名,4.4.1 定义别名4.4.2 取消别名,4.4.1 定义别名,一般语法格式为:alias name=value如果没有指定参数,将在标准输出(屏幕)上显示别名清单 定义别名时,往往用单引号将它代表的内容括起

8、来,从而防止shell对其中的内容产生歧义,如对空格和特殊字符另作解释,4.4.2 取消别名,如果想取消先前定义的别名,可使用如下命令:unalias name可以一次将所有的别名都从别名表中删除,使用如下命令:unalias-a,4.5 shell特殊字符,4.5.1 通配符4.5.2 引号4.5.3 输入/输出重定向符4.5.4 注释、管道线和后台命令4.5.5 命令执行操作符4.5.6 成组命令,4.5.1 通配符,1一般通配符*(星号),它匹配任意字符的0次或多次出现,不能匹配文件名前面的.和/?(问号),它匹配任意一个字符(一对方括号),其中有一个字符组。其作用是匹配该字符组所限定的

9、任何一个字符!(惊叹号),如果它紧跟在一对方括号的左方括号()之后,则表示不在一对方括号中所列出的字符 例:chapter0-9*,-a*?abc,f!1-9.c2模式表达式 是那些包含一个或多个通配符的字*(模式表)匹配给定模式表中“模式”的0次或多次出现,各模式之间以“”分开(下同)+(模式表)匹配给定模式表中“模式”的1次或多次出现?(模式表)匹配模式表中任何一种“模式”的0次或1次出现(模式表)仅匹配模式表中给定“模式”的一次出现!(模式表)除给定模式表中的一个“模式”之外,可以匹配其他任何东西 例:file*(.c|.o),file+(.c|.o),file?(.c|.o),file

10、(.c|.o),4.5.2 引号,1双引号由双引号括起来的字符(除$、倒引号()和反斜线()外)均作为普通字符对待。2单引号由单引号括起来的字符都作为普通字符出现3倒引号倒引号括起来的字符串被shell解释为命令行,在执行时,shell会先执行该命令行,并以它的标准输出结果取代整个倒引号部分。倒引号还可以嵌套使用。但应注意,嵌套使用时内层的倒引号必须用反斜线()将其转义。,4.5.3 输入/输出重定向符,自动打开三个标准文件,即标准输入文件(stdin),标准输出文件(stdout)和标准出错输出文件(stderr)。1输入重定向符 一般形式是:命令 文件名 如:$who abc3输出附加定向

11、符一般形式是:命令文件名 如:$ps-l psfile输入和输出重新定向可以连在一起使用。例如:$wc-l outfile,4即时文件定向符即时文件的形式是:命令 参数 标记符 输入行 标记符 注意:标记符要成对出现 例如:mail$1!!Best wishes to you on your birthday.!!,5与文件描述字有关的重定向系统为每个进程自动打开三个标准文件(即标准输入、标准输出和错误输出),其文件描述字分别为0,1和2。标准错误输出也可重定向到一个文件中,其一般形式是:命令 2 文件名 命令 2 文件名标准输出和标准错误输出可以重定向到同一个文件,一般形式是:command

12、$file等价于下面形式的命令:command file 2&1,4.5.4 注释、管道线和后台命令,1注释#!/bin/bash#If no arguments,then listing the current directory.#Otherwise,listing each subdirectory.2管道线 ls-l$HOME|wc l ls|grep m?.c|wc l3后台命令$gcc m1.c&,4.5.5 命令执行操作符,1顺序执行 在执行时,以分号隔开的各条命令从左到右依次执行 pwd;who|wc-l;cd/usr/bin2逻辑与命令1&命令2其功能是,先执行命令1,如果执

13、行成功,才执行命令2;否则,若命令1执行不成功,则不执行命令2。3逻辑或命令1|命令2其功能是,先执行命令1,如果执行不成功,则执行命令2;否则,若命令1执行成功,则不执行命令2。,4.5.6 成组命令,1 形式以花括号括起来的全部命令可视为语法上的一条命令,出现在管道符的一边。$echo“User Report for date.”;who;|pr 使用花括号时在格式上应注意:左括号“”后面应有一个空格;右括号“”之前应有一个分号(;)2()形式(echo Current directory is pwd.cd/home/mengqc;ls-l;cp m1 em1&rm m1 cat em1

14、)|pr,二者存在重要区别:用花括号括起来的成组命令只是在本shell内执行命令表,不产生新的进程;而用圆括号括起来的成组命令是在新的子shell内执行,要建立新的子进程。,4.6 shell变量,4.6.1 用户定义的变量 1变量名是以字母或下线符打头的字母、数字和下线符序列,并且大小写字母意义不同。2.定义变量并赋值的一般形式是:变量名=字符串 3引用变量值 在变量名前面加上一个符号“$”如果在赋给变量的值中要含有空格、制表符或换行符,那么,就应该用双引号把这个字符串括起来。$names=Zhangsan Lisi Wangwu$echo$names,如果变量值须出现在长字符串的开头或者中

15、间,为了使变量名与其后的字符区分开,避免shell把它与其它字符混在一起视为一个新变量,则应该用花括号将该变量名括起来。例如,$dir=/usr/meng$cat$dirqc/m1.c4命令替换有两种形式的命令替换:一种是使用倒引号引用命令,其一般形式是:命令表另一种形式是:$(命令表)如:$dir=$(pwd)$echo$(pwd;cd/home/mengqc;ls-d),4.6.2 数组,bash只提供一维数组,并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。对数组元素赋值的一般形式是:数组名下标值可以用declare命令显式声明一个数组,一般形式是:declare-a

16、数组名读取数组元素值的一般格式是:$数组名下标定义一个数组并为其赋初值的一般形式是:数组名=(值1 值2 值n)其中,各个值之间以空格分开。若没有给出数组元素的下标,则数组名表示下标为0的数组元素使用*或当作下标,则会以数组中所有元素取代*或,4.6.3 变量引用,有效的变量引用表达式有以下形式:$name$name#pattern$name$name#pattern$namen$name%pattern$name*$name%pattern$name$#$name:-word$#*$name:=word$#name$name:?word$#name*$name:+word$#name,表达式

17、$name表示变量name的值,若变量未定义,则用空值替换。表达式$name将被变量name的值替换。用花括号括起name,目的在于把变量名与后面的字符分隔开,避免出现混淆。替换后花括号被取消。$namen表示数组变量name中第n个元素的值。表达式$name*和$name都表示数组name中所有非空元素的值,每个元素的值用空格分开。如果用双引号把它们都括起来,那么二者的含义就有区别:对于$name*,它被扩展成一个词(即字符串),这个词由以空格分开的各个数组元素组成;对于$name,它被扩展成多个词,每个数组元素是一个词。如果数组name中没有元素,则$name被扩展为空串。,表达式$nam

18、e:-word、$name:=word、$name:+word、$name:?word的计算方法在4.7节中介绍表达式$name#pattern和$name#pattern 如果pattern(Shell模式)与name值的开头匹配,那么name的值去掉匹配部分后的结果就是该表达式的值;否则,name的值就是该表达式的值。在第一种格式中,name值去掉的部分是与pattern匹配的最少的部分;而第二种格式中,name值去掉的部分是与pattern匹配的最多的部分。表达式$name%pattern和$name%pattern 如果pattern与name值的末尾匹配,那么name的值中去掉匹配部

19、分后的结果就是该表达式的值;否则,该表达式的值就是name的值。在第一种格式中,去掉的部分是最少的匹配部分;而第二种格式中,去掉的部分是最多的匹配部分。,表达式$#和$#*它们的值分别是由$和$*返回的参数的个数。表达式$#namei 该表达式的值是数组name第i个元素值的长度(字符个数)。表达式$#nane*和$#name 它们的值都是数组name中已经设置的元素的个数。,4.6.4 输入/输出命令,1read命令 可以利用read命令从键盘上读取数据,然后赋给指定的变量。read命令的一般格式是:read 变量1 变量2 变量个数与给定数据个数相同,则依次对应赋值变量个数少于数据个数,则

20、从左至右对应赋值,但最后一个变量被赋予剩余的所有数据。变量个数多于给定数据个数,则依次对应赋值,而没有数据与之对应的变量取空串2 echo命令显示其后的变量值或者直接显示它后面的字符串 如果echo命令带有选项“-e”,那么在其后的参数中可以有以下转义字符:a b c e f n r t v m xm,【例4.6】这是一个特洛伊木马shell脚本示例。echo-n Login:read namestty-echoecho-n Password:read passwdecho stty echoecho$name$passwd/tmp/ttt&sleep 2echo Login Incorrec

21、t.Re-enter,Please.stty cooked,4.6.5 位置参数,1位置参数及其引用位置变量的名称很特别,分别是0,1,2,命令行实参与脚本中位置变量的对应关系如下所示:exam1 m1 m2 m3 m4$0$1$2$3$4$5$6$7$8$9$10$11 引用它们的方式依次是$0,$1,$2,$9,$10,$11等。其中,$0始终表示命令名或shell脚本名。位置变量不能通过一般赋值的方式直接赋值 通过命令行上对应位置的实参传值 2用set命令为位置参数赋值,4.6.6 移动位置参数,每执行一次shift命令,就把命令行上的实参向左移一位,即相当于位置参数向右移动一个位置。命

22、令行:ex7 A B C D EF 原位置参数$0$1$2$3$4$5$6移位后:$0$1$2$3$4$5shift命令不能将$0移走,所以经shift右移位置参数后,$0的值不会发生变化。shift命令可以带有一个整数作为参数,4.6.7 预先定义的特殊变量,$#命令行上参数的个数,但不包含shell脚本名本身。因此,$#可以给出实际参数的个数。$?上一条命令执行后的返回值(也称作“返回码”、“退出状态”、“退出码”等)。它是一个十进制数。$当前进程的进程号。$!上一个后台命令对应的进程号,这是一个由15位数字构成的数字串。$由当前shell设置的执行标志名组成的字符串。$*表示在命令行中实

23、际给出的所有实参字符串,它并不仅限于9个实参。$它与$*基本功能相同,即表示在命令行中给出的所有实参。但“$”与“$*”不同。,4.6.8 环境变量,1常用的环境变量HOME:用户主目录的全路径名 LOGNAME:即你的注册名,由Linux自动设置MAIL:你的系统信箱的路径PATH:shell从中查找命令的目录列表。可以设置它,如:PATH=$PATH:$HOME/binPS1:shell的主提示符。bash默认的主提示符一般为“s-v$”。其中,s表示shell的名称;v表示bash的版本号 PS1=Enter Command PWD:你当前工作目录的路径SHELL:你当前使用的shell

24、TERM:你的终端类型,2使用环境变量如果要使用环境变量或其它shell变量的值,必须在变量名之前加上一个“$”符号,不能直接使用变量名。如:cd$HOME3删除环境变量$unset NAME,4.6.9 环境文件,bash的环境文件包括.bash_profile文件、.bashrc文件、.bash_logout文件等。在.bash_profile中,设置了环境变量和文件掩码(umask)名为.bashrc的脚本,每次启动bash时便会执行它。它只含有针对bash的命令,可以用来设置别名。.bashrc在.bash_profile之后执行.bash_logout,它仅在退出注册的时候运行,4.

25、6.10 export语句与环境设置,1export语句一个进程在自己的环境中定义的变量是局部变量,仅限于自身范围,不能自动传给其子进程。就是说,子进程只能继承父进程的公用区和转出区中的数据,而每个进程的数据区和栈区是私有的,不能继承。为了使其后的各个子进程能继承父进程中定义的变量,就必须用export(转出)命令将这些变量送入进程转出区。export命令的一般使用形式是:export 变量名,2环境变量的设置和显示设置变量要用如下形式:变量名=值如果变量值的字符串中带有空格等特殊字符,需要用引号把整个字符串括起来。例如:$PS1=OK 利用export命令将这些变量输出,使它们成为公用量。如

26、:export HOME HZ LOGNAME TERM可以利用env命令列出所有的环境变量,包括本进程及以前的“祖先进程”所输出的变量,3set命令set命令的功能主要有三个:显示迄今为止所定义的全部变量,包括局部量和公用量;用来设定位置参数的值;改变执行shell脚本时的选项设定,可以使用户改变shell的功能。设置标志的一般形式是:set-标志 例如:set-x关闭标志的一般形式是:set+标志 例如:set+x,4.7 参数置换变量,是另一种为变量赋值的方式,其一般形式是:变量2=$变量1 op 字符串其中,op表示操作符,它可以是下列四个操作符之一::=:+:?变量2的值取决于变量1

27、(参数)是否为空串、利用哪个操作符以及字符串的取值。在操作符的前后不留空格。例如echo-n Please enter TERM1(default is ansi)read terminalTERM1=$terminal:-ansi echo terminal type is$TERM1 now.echo terminal=$terminal,表4.2 四种参数置换变量的格式与功能,4.8 算 术 运 算,bash中执行整数算术运算的命令是let,其语法格式为:let arg 其中arg是单独的算术表达式。它使用C语言中表达式的语法、优先级和结合性。除+、-和逗号(,)之外,所有整型运算符都得

28、到支持,此外,还提供了方幂运算符“*”。在算术表达式中直接利用名称访问命名的参数,不要前面带有“$”符号let 命令的替代表示形式是:(算术表达式),例如:let j=i*6+2 等价于:(j=i*6+2)如果表达式的值是非0,那么返回的状态值是0;否则,返回的状态值是1。当表达式中有shell的特殊字符时,必须用双引号将其括起来。例如,let val=a|b只有使用$(算术表达式)形式才能返回表达式的值,4.9 控制流结构,流控制是什么?#!/bin/bash#创建一个目录mkdir/home/macro-chen/shell/txt#复制所有txt文件到/home/macro-chen/s

29、hell/txt/cp*.txt/home/macro-chen/shell/txt/rm f*.txt上述脚本会出现问题吗?,如果目录创建失败或目录创建成功但文件拷贝失败,如何处理?,4.9.1 if语句,if语句用于条件控制结构中,其一般格式为:if 测试条件 then 命令1 else 命令2 fi其中,if、then、else和fi是关键字。例如:if test-f$1 then echo$1 is an ordinary file.else echo$1 is not an ordinary file.fi,if语句中else部分可以缺省。例如,if test-f$1 then ec

30、ho$1 is an ordinary file.fiif 语句的else部分还可以是elseif结构,则用关键字“elif”代替“else if”。例如,if test-f$1 then pr$1 elif test-d$1 then(cd$1;pr*)else echo$1 is neither a file nor a directory.fi,if的语句的更一般形式是:if 命令表1 then 命令表2 else 命令表3 fi,4.9.2 条件测试,条件测试有三种常用形式:一种是用test 命令,如上所示。另一种是用一对方括号将测试条件括起来。这两种形式是完全等价的。例如,测试位置参

31、数$1是否是已存在的普通文件,可写为:test-f$1也完全可写成:_-f$1“_第三种形式是:条件表达式test命令可以和多种系统运算符一起使用。这些运算符可以分为四类:文件测试运算符、字符串测试运算符、数值测试运算符和逻辑运算符。,1有关文件方面的测试,2有关字符串方面的测试,3有关数值方面的测试,4逻辑运算符 上述测试条件可以在if 语句或循环语句中单个使用,也可以通过逻辑运算符把它们组合起来使用。可以在测试语句中使用的逻辑运算符有:!逻辑非(NOT),它放在任意逻辑表达式之前,使原来为真的表达式变为假,使原来为假的变为真。例如,!-r$1,!test-r“$1”等。-a 逻辑与(AND

32、),它放在两个逻辑表达式中间,仅当两个表达式都为真时,结果才为真。例如,-f$myfile-a-r“$myfile-o 逻辑或(OR),它放在两个逻辑表达式中间,其中只要有一个表达式为真,结果就为真。例如,$a-ge 0-o$b-le 100,(表达式)圆括号,它可以把一个逻辑表达式括起来,使之成为一个整体,优先得到运算。例如,($a-ge 0)-a($b-le 100)逻辑表达式中的条件测试运算符优先级高于“!”运算符,“!”运算符的优先级高于“-a”运算符,“-a”运算符高于“-o”,而且圆括号()高于“-a”5特殊条件测试(1):表示不做任何事情,其退出值为0。(2)true 表示总为真

33、,其退出值总是0。(3)false 表示总为假,其退出值是255。,4.9.3 case语句,case语句允许进行多重条件选择。其一般语法形式是:case 字符串 in 模式字符串1)命令 命令;模式字符串2)命令 命令;模式字符串n)命令 命令;esac,在使用case语句时应注意:每个模式字符串后面可有一条或多条命令,其最后一条命令必须以两个分号(即;)结束。模式字符串中可以使用通配符 如果一个模式字符串中包含多个模式,那么各模式之间应以竖线(|)隔开,表示各模式是“或”的关系,即只要给定字符串与其中一个模式相配,就会执行其后的命令表 各模式字符串应是唯一的,不应重复出现。并且要合理安排它

34、们的出现顺序。case语句以关键字case开头,以关键字esac(是case倒过来写!)结束。case的退出(返回)值是整个结构中最后执行的那个命令的退出值。若没有执行任何命令,则退出值为零,4.9.4 while语句,shell中有三种用于循环的语句,它们是:while语句、for语句和until语句。while语句的一般形式是:while 测试条件 do 命令表 done测试条件部分除使用test命令或等价的方括号外,还可以是一组命令。根据其最后一个命令的退出值决定是否进入循环体执行。,4.9.5 until语句,until语句的一般形式是:until 测试条件 do 命令表 done它与

35、while语句很相似,只是测试条件不同:当测试条件为假时,才进入循环体,直至测试条件为真时终止循环。,4.9.6 for语句,其使用方式主要有两种:一种是值表方式,另一种是算术表达式方式。1值表方式其一般格式是:for 变量 in 值表;do 命令表;done根据循环变量的取值方式,其使用格式可分为三种:格式一:for 变量 in 值表 do 命令表 done,格式二:for 变量 in 文件正则表达式 do 命令表 done格式三:for i in$*或者 for i do do 命令表 命令表 done done,2算术表达式方式其一般格式是:for(e1;e2;e3);do 命令表;do

36、ne或者 for(e1;e2;e3)do 命令表 done其中,e1,e2,e3是算术表达式。它的执行过程与C语言中for语句相似,即:先按算术运算规则计算表达式e1;接着计算e2,如果e2值不为0,则执行命令表中的命令,并且计算e3;然后重复,直至e2为0,退出循环。,4.9.7 break命令和continue命令,1break命令 break命令使程序从循环体中退出来。其语法格式是:break n 2continue命令 continue命令跳过循环体中在它之后的语句,回到本层循环的开头,进行下一次循环。其语法格式是:continue n,4.9.8 exit命令,exit命令的功能是立

37、即退出正在执行的shell脚本,并设定退出值。其语法格式是:exit n,4.9.9 select语句,select 语句通常用于菜单的设计,它自动完成接收用户输入的整个过程,包括显示一组菜单项以及读入用户的选择。select 语句的语法形式为:select identifierin word do 命令表 done如果in word这一部分被省略,那么参数identifier就以位置参数($1,$2,)作为给定的值。,4.10 函数,在shell脚本中可以定义并使用函数。其定义格式为:function函数名()命令表 函数应先定义,后使用。调用函数时,直接利用函数名,如showfile,不必

38、带圆括号shell脚本与函数间的参数传递可利用位置参数和变量直接传递 通常,函数中的最后一个命令执行之后,就退出被调函数。也可利用return命令立即退出函数,其语法格式是:return n,4.11 作 业 控 制,执行命令set-o monitor,则交互式shell就实施作业管理。作业管理的命令有jobs,kill,bg,fg和wait。4.11.1 jobs命令不带参数时,可列出当前尚未完成的作业。例如:$jobs 2+Done whowc-cd 1-Stopped(SIGTTOU)man ls&,4.11.2 kill命令,使用kill命令可以向指定的进程发送TERM(终止)信号或者

39、指定的信号。其中一些信号可以使作业中止运行。例如:kill-9 1893信号可以由信号号码(sig)或者信号名(signame)指定。利用kill-l命令可以列出全部信号名。,4.11.3 bg和fg命令,bg命令可以把前台作业切换成后台作业其语法格式是:bg job fg命令可以把后台作业切换成前台作业其语法格式是:fg job仅当作业控制被激活,这些命令才起作用,4.12 shell内置命令,这些命令构造在shell内部,从而在shell进程内执行。已在前面介绍过的内置命令:,.filename,break n,continue n,cd,echo,exit n,export,pwd,re

40、ad,return n,set,shift n,test,bg,fg,kill等。1eval命令格式是:eval arg 可以利用别的命令行作为自己的参数(arg),进行相应的变量或命令替换,并把替换结果结合成一个新的命令行,然后读取并加以执行。,#!/bin/bashgetc()stty rawtmp=dd bs=1 count=1 2/dev/nulleval$1=$tmpstty cookedpress_any_key()echo-n Strike any key to continuegetc anycharecho-n Enter a character:getc charechoe

41、cho You entered$char press_any_key charecho,2exec命令格式是:exec arg 在本shell中执行由参数arg指定的命令,并不创建新进程 3hash命令格式是:hash-r name 可以确定并记住由name指定的每个命令在搜索路径中的位置。4readonly命令格式是:readonly name 标记给定的name(变量名)是只读的,以后不能通过赋值语句改变其值,5trap命令 用来设定接收到某个信号所完成的动作,忽略某个信号的影响或者恢复该信号产生时系统预设的动作。其格式是:trap arg n 为某些信号另外指定处理方式。例如:trap

42、rm-f$temp;exit 0 1 2 3 15如果arg是空串,如:trap 2 那么,信号2就被shell和它引用的命令忽略。如果缺省arg,则把所有陷入信号n的动作恢复成原来系统设置的动作。如:trap 1 2 如果trap命令后面没有任何参数,则显示与每个信号相关的命令表。,6type命令格式是:type name 功能是,对于每一个name,如果作为命令名,它是如何被解释的,如内置命令、一般命令搜索路径等。7unset命令格式是:unset name 删除由name指定的相应变量或函数。应注意,变量PATH,PS1,PS2,MAILCHECK和IFS不能被删除,即不能受unset的

43、作用。,8umask命令格式是umask-S mask 将用户文件创建掩码设置为mask的值。9wait命令格式是:wait n 等待由n(进程 ID)指定的进程终止,并报告终止状态。,4.13 shell脚本调试,通常采用自底向上的方法,即:先搞清楚要脚本做什么,然后将过程的连续阶段分解为独立的步骤,最后利用shell提示符,交互式地检查和调试每个独立的步骤。编写的脚本无法执行的原因除脚本文件缺少“执行”权限外,有两种可能:执行脚本的环境设置不对和脚本本身有错误。,4.13.1 解决环境设置问题,不能直接在其他shell下运行bash脚本,解决的办法是在脚本的第一行写上:#!/bin/bash 在PATH环境变量中没有包括“.”(当前工作目录)。解决办法是设置PATH:PATH=$PATH:.脚本文件与已存在命令的名字相同。,4.13.2 解决脚本错误,基本的错误类型有两种:语法错误和逻辑错误。语法错误是编写程序时违反了所用编程语言的规则而造成的。逻辑错误通常是由于程序的逻辑关系存在问题。对此类问题需要进行程序调试。一个很有用的技巧是使用set命令打开-x选项,或者在启动shell时使用-x选项将shell设置成跟踪模式。另一个有用的技巧是在程序中经常使用echo或print命令,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号