Linux基础教程(清华课件)-第9章 shell编程.ppt

上传人:qwe****56 文档编号:70010742 上传时间:2023-01-14 格式:PPT 页数:116 大小:588.50KB
返回 下载 相关 举报
Linux基础教程(清华课件)-第9章 shell编程.ppt_第1页
第1页 / 共116页
Linux基础教程(清华课件)-第9章 shell编程.ppt_第2页
第2页 / 共116页
点击查看更多>>
资源描述

《Linux基础教程(清华课件)-第9章 shell编程.ppt》由会员分享,可在线阅读,更多相关《Linux基础教程(清华课件)-第9章 shell编程.ppt(116页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、LinuxLinux基础教程(基础教程(1 1)操作系统基础操作系统基础清华大学计算机基础教育课程系列教材清华大学计算机基础教育课程系列教材 汤荷美汤荷美 董渊董渊 李莉李莉 程志锐程志锐 编著编著总总 目目 录录第第1部分部分 Linux操作系统操作系统第第1章章 操作系统概述操作系统概述第第2章章 处理机管理处理机管理第第3章章 存储管理存储管理第第4章章 调度调度第第5章章 设备设备第第6章章 文件系统文件系统第第2部分部分 操作系统命令及操作系统命令及shell编程编程第第7章章 Linux基本命令基本命令第第8章章 使用使用vi编辑文件编辑文件第第9章章 shell编程编程第第3部分

2、部分 系系 统统 管管 理理第第10章章 Linux系统软件的获取和安装系统软件的获取和安装第第11章章 账号管理账号管理第第12章章 文件系统管理文件系统管理第第13章章 TCP/IP网络管理网络管理第第14章章 备份与恢复备份与恢复第第15章章 XWindow及及Genie应用程序应用程序第第9章章 shell编程编程9.1 shell概述概述9.2 shell的基本功能的基本功能9.3 shell启动及其命令启动及其命令9.4 shell命令的集成命令的集成9.5 shell变量变量9.6 shell的控制结构的控制结构9.7 shell的运行环境的运行环境9.8 shell应用实例应用

3、实例9.9 小结小结 习题习题shell是一种命令语言,同时又是一种程序设计语言。是一种命令语言,同时又是一种程序设计语言。shell的语言处理能力,使得用户能够方便地定义各的语言处理能力,使得用户能够方便地定义各种变量、参数,并使用各种控制语句编写复杂的命种变量、参数,并使用各种控制语句编写复杂的命令程序完成多种工作。本章介绍令程序完成多种工作。本章介绍shell、shell程序设程序设计语言、计语言、shell的运行环境及的运行环境及shell程序的调试。程序的调试。9.1 shell概述概述9.1.1 什么是什么是shellshell是一种命令解释程序是一种命令解释程序(命令解释器命令解

4、释器),shell解释用解释用户输入的命令行,提交系统内核处理,并将结果返户输入的命令行,提交系统内核处理,并将结果返回给用户。与回给用户。与Linux命令一样都是实用程序,但两命令一样都是实用程序,但两者又有区别。一旦用户注册到系统后,者又有区别。一旦用户注册到系统后,shell就被系就被系统装入内存,并一直运行到用户退出系统之止;而统装入内存,并一直运行到用户退出系统之止;而一般命令仅当被调用时,才由系统装入内存执行。一般命令仅当被调用时,才由系统装入内存执行。shell本身也是一种可编程的程序设计语言。用本身也是一种可编程的程序设计语言。用shell写写的程序的程序(shell脚本脚本)

5、相当于相当于dos/windows下的批处理文下的批处理文件,它可以简单到只有一条命令,也可以复杂到包件,它可以简单到只有一条命令,也可以复杂到包括大量循环、条件语句、数学运算、控制结构,也括大量循环、条件语句、数学运算、控制结构,也可以是介于两者之间的程序。可以是介于两者之间的程序。9.1.2 shell程序语言的特点程序语言的特点shell允许通过编程来完成复杂的功能处理,但其作为允许通过编程来完成复杂的功能处理,但其作为语言与高级语言相比较具有不同的特点:语言与高级语言相比较具有不同的特点:(1)shell是解释性的,多数高级语言是编译性的;是解释性的,多数高级语言是编译性的;(2)sh

6、ell语言与高级语言处理的对象不同;语言与高级语言处理的对象不同;(3)shell与系统有密切的关系;与系统有密切的关系;(4)shell易编写、调试、灵活性较强,但速度低;易编写、调试、灵活性较强,但速度低;(5)shell作为命令级语言,命令组合功能很强。作为命令级语言,命令组合功能很强。9.1.3 shell的版本的版本shell有两种主要语法类型:有两种主要语法类型:Bourne shell和和C shell,彼此不兼容。彼此不兼容。Bourne shell家族:家族:sh ksh bash psh zsh;C shell家族:家族:csh tcsh。其中其中bash和和 zsh在不同

7、程度上支持在不同程度上支持 csh 的语法。的语法。这里,我们再着重介绍一下这里,我们再着重介绍一下bash的特点:的特点:(1)自动补全功能自动补全功能假设要输入的命令很长,或者命令后面要给的文件名假设要输入的命令很长,或者命令后面要给的文件名很长。这个时候只要按一个很长。这个时候只要按一个Tab键,键,bash就会在可就会在可能的命令或文件名里面找寻匹配的命令,找到的话能的命令或文件名里面找寻匹配的命令,找到的话就会自动帮你补齐。就会自动帮你补齐。(2)命令行编辑程序命令行编辑程序bash的命令行编辑是在提示符下,可对未执行的命令的命令行编辑是在提示符下,可对未执行的命令字符任意地修改。字

8、符任意地修改。(3)命令历史命令历史(command history)所谓的命令历史就是把曾经输入过的命令记录起来,所谓的命令历史就是把曾经输入过的命令记录起来,方便日后的查询与使用。只要按向上键就可以调出方便日后的查询与使用。只要按向上键就可以调出前一个命令,再按一次向上键就可以调出更前一个前一个命令,再按一次向上键就可以调出更前一个命令,依此类推,用向下键可以回到下个命令,所命令,依此类推,用向下键可以回到下个命令,所以用上、下键就可以选择以前输入过的命令。以用上、下键就可以选择以前输入过的命令。9.2 shell的基本功能的基本功能9.2.1 程序的运行程序的运行当用户输入一行命令后,当

9、用户输入一行命令后,shell负责解释、分析输入的负责解释、分析输入的内容,并且决定做什么,同时替系统内核删除命令内容,并且决定做什么,同时替系统内核删除命令行中不必要的信息。命令是一个可执行的行中不必要的信息。命令是一个可执行的Linux命命令、程序、工具或令、程序、工具或shell脚本。脚本。例例1:ls-l file1 file2 file3例例2:echo Welcome to Tsinghua University.例例3:echo Welcome to Tsinghua University.注意注意:例例2和例和例3的结果是完全一样的。的结果是完全一样的。9.2.2 使用保留字和

10、元字符使用保留字和元字符shell有一些具有特殊意义的字有一些具有特殊意义的字(保留字保留字),如在,如在shell脚脚本中,像本中,像do、done、for、while等保留字控制循环等保留字控制循环操作,操作,if、then、else等保留字进行条件控制。保留等保留字进行条件控制。保留字随字随shell的不同而不同。的不同而不同。在在Linux系统里,有一组特殊意义字符,这就是所谓系统里,有一组特殊意义字符,这就是所谓的元字符的元字符(通配符通配符)。现在列出一些常用的通配符的意义,供参考。现在列出一些常用的通配符的意义,供参考。.上一层目录,与上一层目录,与cd命令配合用得比较多命令配合

11、用得比较多.目前工作的目录目前工作的目录*任意长度的字符任意长度的字符?长度为一个的任意字符长度为一个的任意字符.括号内的一个字符括号内的一个字符m 等于某个通配符,如等于某个通配符,如*、?等、?等a-z*小写字母开头的所有字符串小写字母开头的所有字符串 转义符号,用以解除特殊字符的特殊意义转义符号,用以解除特殊字符的特殊意义 用户目录用户目录;分隔符,当命令行有多个命令时,做分隔用分隔符,当命令行有多个命令时,做分隔用 BourneShell的提示符,同时也作为的提示符,同时也作为shell语言语言的位置变量参数的位置变量参数#做注释用做注释用|建立一个管道,使一命令的输出作为另一个命建立

12、一个管道,使一命令的输出作为另一个命令的输入令的输入&将命令以后台方式执行将命令以后台方式执行 将命令的输出重导入文件中将命令的输出重导入文件中相反相反 将命令的输出加在一个已经存在的文件后面将命令的输出加在一个已经存在的文件后面.括号内的一个字符串括号内的一个字符串例:例:ls-x t*显示当前目录下以显示当前目录下以t打头的所有文件。打头的所有文件。9.2.3 变量、文件名的替换变量、文件名的替换1.变量的替换变量的替换shell允许对变量赋值。允许对变量赋值。shell一旦在命令行中发现变一旦在命令行中发现变量名时,将在变量名的位置上用以前赋给该变量量名时,将在变量名的位置上用以前赋给该

13、变量的值替代变量名。的值替代变量名。例:例:myhome=/usr/app1echo myhome/usr/app1ls-x myhomefile1 file2 file3 file42.文件名的替换文件名的替换shell在命令行中将文件名进行替换。事实上,在命令行中将文件名进行替换。事实上,shell在在确定要执行的程序名和它的自变量之前,要对命令确定要执行的程序名和它的自变量之前,要对命令行扫描,找出元字符进行相应的文件名的替换。行扫描,找出元字符进行相应的文件名的替换。例:例:ls-xfile1 file2 file3 file4echo*file1 file2 file3 file49

14、.2.4 输入输出重定向输入输出重定向(改向改向)shell处理命令行的输入输出重定向,它扫描命令行中处理命令行的输入输出重定向,它扫描命令行中特殊改向字符特殊改向字符“”、“”、“msgcat msgPlease call me:62781849注意:注意:就程序或命令本身而言,它并不知道其标准就程序或命令本身而言,它并不知道其标准输出已被改向,只是简单地按照自身的方式向标准输出已被改向,只是简单地按照自身的方式向标准输出输送信息。输出输送信息。正如正如shell扫描命令行查找重定向字符一样,它也查找扫描命令行查找重定向字符一样,它也查找管道字符管道字符“|”。对于所发现的每个管道字符,它。

15、对于所发现的每个管道字符,它将管道字符前面的命令的标准输出连接到管道字符将管道字符前面的命令的标准输出连接到管道字符后面的命令的标准输入中,然后启动两个程序的执后面的命令的标准输入中,然后启动两个程序的执行。行。例:例:w|wc-l(假设有假设有8个用户上机个用户上机)89.2.5 运行环境的控制运行环境的控制当用户登录到当用户登录到Linux系统中,系统启动一个交互式的系统中,系统启动一个交互式的shell命令解释器命令解释器(称为注册称为注册shell)。该。该shell为此用户为此用户创建工作环境。创建工作环境。shell提供了一定的命令,允许用户提供了一定的命令,允许用户对自己运行的环

16、境进行控制,即对运行环境实现客对自己运行的环境进行控制,即对运行环境实现客户化。用户的运行环境包括:主目录、终端类型、户化。用户的运行环境包括:主目录、终端类型、输入命令提示符、查找命令的路径名、以及其他全输入命令提示符、查找命令的路径名、以及其他全局变量等。例如,局变量等。例如,Bourne again Shell、Bourne Shell、Korn Shell和和C Shell的环境文件分别为的环境文件分别为.bash-profile、.profile、.kshrc和和.cshrc。9.2.6 支持支持shell的编程的编程shell除了具有命令解释器的功能外,它本身就是一种除了具有命令解

17、释器的功能外,它本身就是一种程序设计语言,这种语言也由程序设计语言,这种语言也由shell解释执行的。用解释执行的。用户可以在文件中编写一组户可以在文件中编写一组shell命令,该文件称为命令,该文件称为shell脚本或脚本或shell程序。通过把命令、变量赋值及条程序。通过把命令、变量赋值及条件控制语句结合起来,用户就获得了一个强大的编件控制语句结合起来,用户就获得了一个强大的编程工具。需要说明的是,在程工具。需要说明的是,在Linux系统本身就存在系统本身就存在大量的大量的shell程序,用于各种管理和应用。程序,用于各种管理和应用。9.3 shell启动及其命令启动及其命令9.3.1 s

18、hell的启动的启动1.系统在用户登录时启动系统在用户登录时启动shell在在Linux系统引导过程中系统引导过程中,首先启动首先启动init进程以查询终进程以查询终端的各个端口及其特性,当发现活动的终端时,调端的各个端口及其特性,当发现活动的终端时,调用用getty进程。接着进程。接着getty进程在接受用户名和口令后,进程在接受用户名和口令后,调用调用login进程。进程。login进程负责验证用户身份,验证进程负责验证用户身份,验证后把控制权交给后把控制权交给shell程序。程序。shell根据环境文件建立根据环境文件建立系统范围内的工作环境和该用户自己的工作环境,系统范围内的工作环境和

19、该用户自己的工作环境,最后显示命令提示符最后显示命令提示符(#、%)。在在/etc/passwd文件中指定要启动的文件中指定要启动的shell,如下所示:,如下所示:root:x:0:0:root:/root:/bin/bashjohn:x:201:Certerstarf:/home:/bin/sh2.命令行状态下的交互命令行状态下的交互shell启动启动在系统中可能有多种版本的在系统中可能有多种版本的shell存在,可通过相应的存在,可通过相应的命令来启动,如:命令来启动,如:bshkshsh3.执行用户命令时启动执行用户命令时启动shell(子子shell)由系统生成新的子由系统生成新的子

20、shell来执行该命令。来执行该命令。9.3.2 命令的查询命令的查询环境变量环境变量PATH的构成决定了寻找的构成决定了寻找shell命令和其他程命令和其他程序的途径,是影响序的途径,是影响shell程序效率的主要因素之一。程序效率的主要因素之一。PATH变量设置要考虑以下几点:在变量设置要考虑以下几点:在PATH变量中,变量中,命令使用得多的程序目录应放在前面,极少用目录命令使用得多的程序目录应放在前面,极少用目录不设在不设在PATH变量中。在变量中。在shell程序内用得较多的程程序内用得较多的程序目录应加在变量序目录应加在变量PATH中。并且中。并且PATH应尽可能地应尽可能地短,不要

21、出现重复的目录。还要尽量避免查询大目短,不要出现重复的目录。还要尽量避免查询大目录,如需设置,将其路径放在录,如需设置,将其路径放在PATH路径的最后位路径的最后位置。置。例:例:PATH=/bin:/usr/bin:/etc:.9.3.3 shell常用的命令常用的命令Linux系统通常提供了许多命令以方便用户与系统的系统通常提供了许多命令以方便用户与系统的交互对话。这些命令的选项较多,并且可利用命令交互对话。这些命令的选项较多,并且可利用命令的集成的集成(如输入输出改道、管道机制如输入输出改道、管道机制)及程序设计功及程序设计功能组合成许多命令。能组合成许多命令。Linux有丰富的有丰富的

22、shell命令,大致划分为以下几类:目命令,大致划分为以下几类:目录操作与管理、文件操作与管理命令、系统管理与录操作与管理、文件操作与管理命令、系统管理与维护、用户管理与维护、系统状态、进程管理、通维护、用户管理与维护、系统状态、进程管理、通讯命令、其他命令。例如,讯命令、其他命令。例如,awk cat chmod chown cp cron date df diff du echo expr file find grep init kill ln login ls mail make man mkdir mv nohup pg ps pwd read rm wc通常情况下,在用户输入一个命令

23、通常情况下,在用户输入一个命令(非内部命令非内部命令)时,时,注册注册shell首先通过查询路径查找该命令,然后生成首先通过查询路径查找该命令,然后生成出一个副本出一个副本(称为该称为该shell的子的子shell),由子,由子shell来负来负责解释执行这个命令。在命令执行过程中,注册责解释执行这个命令。在命令执行过程中,注册shell(父父shell)等待子等待子shell的执行而进入睡眠态,一的执行而进入睡眠态,一旦子旦子shell执行完毕,子执行完毕,子shell将唤醒注册将唤醒注册shell(父父shell),而自己的生命周期到此结束。,而自己的生命周期到此结束。9.3.4 shel

24、l的内部命令的内部命令内部命令构造在内部命令构造在shell的内部。内部命令比非内部命令的内部。内部命令比非内部命令的执行速度要快。因此,编写的执行速度要快。因此,编写shell程序时应尽量地程序时应尽量地使用使用shell的内部命令。的内部命令。shell常用的内部命令有:常用的内部命令有:#注释命令,注释命令,#后面的内容作为注释信息。后面的内容作为注释信息。:空命令,通常放在一行的最左边,实际不做空命令,通常放在一行的最左边,实际不做任何命令,只返回出口代码任何命令,只返回出口代码0。其他命令有:其他命令有:cd,eval,set,unset,exec,exit,if,else,for,

25、case,while,until,continue,break等。等。9.4 shell命令的集成命令的集成9.4.1 元字符和文件名生成元字符和文件名生成1.UNIX元字符元字符(通配符通配符)的定义的定义*匹配任何字符串,包括空字符串;匹配任何字符串,包括空字符串;?匹配任何单个字符;匹配任何单个字符;.,-,!按照范围、列表或不匹配等形式匹配指定按照范围、列表或不匹配等形式匹配指定的字符;的字符;转意符,使元字符失去其特殊的含义。转意符,使元字符失去其特殊的含义。例:例:a-d,x,y 匹配字符匹配字符a、b、c、d、x、y;z*匹配以字符匹配以字符z开始的任何字符串;开始的任何字符串;

26、x?y 匹配以匹配以x开始、以开始、以y结束、中间为任何单个字结束、中间为任何单个字符的字符串;符的字符串;!Z 匹配不为匹配不为Z的单个字符。的单个字符。2.元字符作为文件扩展名的使用元字符作为文件扩展名的使用例:例:a-f*匹配字符匹配字符a到字符到字符f开头的文件名,如开头的文件名,如abc,d2,e3.c,f.dat;*z 匹配以字符匹配以字符z结尾的任何字符串,如结尾的任何字符串,如win.z,core.zz,a-c-5z;rc?.d 匹配以匹配以rc开始、以开始、以.d结束、中间为任何单个结束、中间为任何单个字符的文件名,如字符的文件名,如rc0.d,rc2.d,rcS.d;*!o

27、 匹配不以匹配不以o结尾的文件名。结尾的文件名。9.4.2 管道和命令表管道和命令表在在shell中有两种结构类型:管道线和命令表。当中有两种结构类型:管道线和命令表。当shell检测到一个管道操作符时,就建立一个系统管道文检测到一个管道操作符时,就建立一个系统管道文件,这是一个先进先出的数据结构,它允许在同一件,这是一个先进先出的数据结构,它允许在同一时刻对管道线上的命令或程序进行读和写,即允许时刻对管道线上的命令或程序进行读和写,即允许两个无关的命令通过管道连接交换信息。两个无关的命令通过管道连接交换信息。1.管道的概念管道的概念管道:是一个命令的标准输出与另一个命令的标准输管道:是一个命

28、令的标准输出与另一个命令的标准输入之间的连接,不经过任何中间文件;入之间的连接,不经过任何中间文件;管道线:是由管道操作符分隔的一个命令序列,最简管道线:是由管道操作符分隔的一个命令序列,最简单的管道线是一个简单命令;单的管道线是一个简单命令;管道操作符:用符号管道操作符:用符号“|”表示。表示。例:例:w|wc-lps aux|grep ftp2.命令表的概念命令表的概念命令表:一串管道线构成了一个命令表,最简单的命命令表:一串管道线构成了一个命令表,最简单的命令表是一个管道线,一个命令表送回的值是该命令令表是一个管道线,一个命令表送回的值是该命令表中最后一个管道线的出口状态。表中最后一个管

29、道线的出口状态。管道线分隔符:分隔命令表元素,确定管道线执行的管道线分隔符:分隔命令表元素,确定管道线执行的条件。各分隔符含义如下:条件。各分隔符含义如下:;表示按顺序执行管道线;表示按顺序执行管道线;&表示根据条件表示根据条件(true),执行其后面的管道线;,执行其后面的管道线;表示根据条件表示根据条件(false),执行其后面的管道线;,执行其后面的管道线;&表示前面的管道线在后台表示前面的管道线在后台(异步异步)执行。执行。例例1:四个管道线构成一个命令表四个管道线构成一个命令表ls -l /tmp /rootw|wc-lps例例2:与例与例1等价等价ls-l/tmp /root;w|

30、wc-l;ps例例3:sys-account&9.4.3 命令组合命令组合命令组合有两种形式:命令组合有两种形式:命令表命令表和和(命令表命令表),前者只,前者只在本在本shell中执行,不产生新的子进程;后者要产生中执行,不产生新的子进程;后者要产生新的子进程来执行命令表。新的子进程来执行命令表。例例1:cd mydoc;rm junk;该命令表只能在当前该命令表只能在当前shell下执行,先进入目录下执行,先进入目录mydoc,然后执行,然后执行rm命令,执行完毕后,当前目录已改命令,执行完毕后,当前目录已改变为变为mydoc。例例2:(cd mydoc;rm junk;)当前当前shel

31、l要生成一个子要生成一个子shell进程,由该子进程,由该子shell来执行来执行命令表。子命令表。子shell完成操作后,自然消亡,而其父完成操作后,自然消亡,而其父shell进程的当前路径并没有变化。进程的当前路径并没有变化。9.4.4 命令替换命令替换当一个字符串被括在反撇号当一个字符串被括在反撇号“”中时,该字符串将中时,该字符串将作为命令被作为命令被shell解释执行,即用命令的执行结果替解释执行,即用命令的执行结果替换这个字符串本身。要注意反撇号与单引号的区别。换这个字符串本身。要注意反撇号与单引号的区别。例例1:now=date echo now date now=date ec

32、ho now 1998年年 10月月 28日日 星期三星期三 17时时 51分分 56秒秒 CST例例2:count=10 count=expr count+1 echo count 119.4.5 输入、输出重定向输入、输出重定向1.使用标准改向符进行重定向使用标准改向符进行重定向(改向改向)输入改向输入改向 输出改向输出改向 追加输出改向追加输出改向2.使用标准文件描述字进行重定向使用标准文件描述字进行重定向(改向改向)在在Linux系统中,定义了用于输入、输出的标准文件,系统中,定义了用于输入、输出的标准文件,其文件描述字其文件描述字0为进程的标准输入、文件描述字为进程的标准输入、文件描

33、述字1为为标准输出、文件描述字标准输出、文件描述字2为标准错误输出。为标准错误输出。3.标准错误输出的改向标准错误输出的改向(、)格式为:格式为:command 2 filecommand 2 file例例1:将将myfile1作为作为sort的输入。的输入。sort myfile2例例3:将将ls|l的输出追加到的输出追加到myfile3文件中。文件中。ls-lmyfile3例例4:将错误输出改向到:将错误输出改向到err-file文件。文件。myprog 2err-file例例5:将标准输出和错误输出改向:将标准输出和错误输出改向out文件。文件。myprog out 2outmyprog

34、 out 2&19.5 shell变量变量9.5.1 shell变量描述变量描述shell实际上是基于字符串的程序设计语言,但也有变实际上是基于字符串的程序设计语言,但也有变量。量。shell变量能够而且只能存储正文字符串,即它变量能够而且只能存储正文字符串,即它只有一种类型的变量即串变量。但从赋值的形式上只有一种类型的变量即串变量。但从赋值的形式上看,则可以分成四种类型的变量或变量形式。变量看,则可以分成四种类型的变量或变量形式。变量的名字必须以字母或下划线开头,可以包括字母、的名字必须以字母或下划线开头,可以包括字母、数字和下划线。数字和下划线。9.5.2 用户自定义变量用户自定义变量用户

35、自定义变量语法格式:用户自定义变量语法格式:name=string,赋值号,赋值号“=”两边不允许有空白符。两边不允许有空白符。例:例:nodehost=beijing.UUCPpath=/bin:/usr/bin:/etc/bincount=10允许多个赋值操作,按从右到左的顺序进行。允许多个赋值操作,按从右到左的顺序进行。例:例:A=BB=abcC=OK echo A B Cabc abc OK当引用一个未设置的变量时,其隐含值为空。当引用一个未设置的变量时,其隐含值为空。例:例:echo mail is path of mailboxis path of mailbox如果用双引号如果用

36、双引号“”将值括起来,则括起来的字符串允将值括起来,则括起来的字符串允许出现空格、制表符和换行符等特殊字符,而且允许出现空格、制表符和换行符等特殊字符,而且允许有变量替换。许有变量替换。例例1:MAIL=/var/mail/fk var=MAIL is path of mailbox echo var/var/mail/fk is path of mailbox例例2:str=This is n a book echo strThis isa book如果用单引号如果用单引号将值括起来,则括起来的字符串允将值括起来,则括起来的字符串允许出现空格、制表符和换行符的特殊字符,但不允许出现空格、制表

37、符和换行符的特殊字符,但不允许有变量替换。许有变量替换。例例3:BOOK=English book MSG=BOOK echo MSGBOOK例例4:msg=Today is Sunday echo msgToday is Sunday引用变量的值时,可以用花括号引用变量的值时,可以用花括号将变量名称括起来,将变量名称括起来,使变量名称与它的后续字符分隔开,如果紧跟在变使变量名称与它的后续字符分隔开,如果紧跟在变量名称后面的字符是字母、数字或下划线时,必须量名称后面的字符是字母、数字或下划线时,必须要使用花括号。要使用花括号。例例5:str=This is a string echo stre

38、nt test of variablesThis is a stringent test of variables echo strent test of variablestest of variables可将变量设置为只读形式,格式为,可将变量设置为只读形式,格式为,readonly 变量变量名名1 变量名变量名2例例6:ux=UNIX.SUN readonly ux ux=UNIX.SCOux:is read only查看只读形式的变量,格式为查看只读形式的变量,格式为readonly例例7:readonlyreadonly ux9.5.3 位置变量位置变量位置变量顾名思义是与变量所在位

39、置有关的变量,这位置变量顾名思义是与变量所在位置有关的变量,这是一种特殊的变量。当一个是一种特殊的变量。当一个shell过程被调用时,过程被调用时,shell隐含地为它建立一系列的位置变量。这种位置隐含地为它建立一系列的位置变量。这种位置变量是系统预定义好的变量是系统预定义好的,可以直接引用。如命令行的可以直接引用。如命令行的shell过程名本身被指定为位置变量过程名本身被指定为位置变量0,第一个命,第一个命令参数为令参数为1,第九个命令参数为,第九个命令参数为9。例:例:ls /bin /etc /usr/bin /dev0 1 2 3 4 51.内部命令内部命令shift 的作用的作用当位

40、置变量个数超出当位置变量个数超出9时,就不能直接引用位置大于时,就不能直接引用位置大于9的位置变量了,必须用的位置变量了,必须用shift命令存取。每执行一次命令存取。每执行一次shift命令,删除命令,删除1位置变量,并使其他的所有位置位置变量,并使其他的所有位置变量向左移动一个位置。变量向左移动一个位置。例:例:0 1 2 3 4 5 6 7 8 9myprog a b c d e f g h i j shift b c d e f g h i j shift c d e f g h i j shift d e f g h i j2.用用set命令进行强制性赋值命令进行强制性赋值位置变量可

41、以使用位置变量可以使用set命令进行强制性赋值。命令进行强制性赋值。例:例:set Sun Mon Tue Wed Thu Fri Sat 结果结果1 2 3 4 5 6 7注意注意:0是不能用这种方法赋值的。是不能用这种方法赋值的。9.5.4 环境变量环境变量shell执行环境由一系列环境变量组成,这些变量是由执行环境由一系列环境变量组成,这些变量是由shell维护和管理的。所有这些变量都可被用户重新维护和管理的。所有这些变量都可被用户重新设置,变量名由大写字母或数字组成。设置,变量名由大写字母或数字组成。CDPATH 执行执行cd命令时使用的搜索路径;命令时使用的搜索路径;HOME 用户的

42、用户的home目录;目录;PATH 寻找命令或可执行文件的搜索路径;寻找命令或可执行文件的搜索路径;PS1 主命令提示符,默认为主命令提示符,默认为“”;PS2 从命令提示符,默认为从命令提示符,默认为“”;TERM 使用的终端类型。使用的终端类型。9.5.5 预定义的特殊变量预定义的特殊变量在在shell中有一组特殊的变量,其变量名和变量值只有中有一组特殊的变量,其变量名和变量值只有shell本身才可以设置。本身才可以设置。“#”记录传递给记录传递给shell的自变量个数。的自变量个数。例例1:myprog a b c 则则#的值为的值为3例例2:if test#-lt 2thenecho

43、two or more args required exitfi“?”取最近一次命令执行后的退出状态:执行成功取最近一次命令执行后的退出状态:执行成功返回码为返回码为0,执行失败返回码为,执行失败返回码为1。例:例:test -r my-file(假设假设my-file文件不可读文件不可读)echo?1“”记录当前记录当前shell的进程号。的进程号。9.5.6 变量替换变量替换shell在遇到未设置的变量时,将其值作为空串处理。在遇到未设置的变量时,将其值作为空串处理。而在实际应用中,对于未设置的变量,用户可以根而在实际应用中,对于未设置的变量,用户可以根据需要采用不同的处理方式,这可通过变

44、量替换来据需要采用不同的处理方式,这可通过变量替换来实现。变量替换提供了三种功能:允许替换未设置实现。变量替换提供了三种功能:允许替换未设置变量的隐含值;允许对未设置变量赋值;在访问未变量的隐含值;允许对未设置变量赋值;在访问未设置变量时,提示出错信息。格式为,设置变量时,提示出错信息。格式为,var:-word例例1:假设假设PARM未设置未设置echo The value of PARM is PARM:-undefinedThe value of PARM is undefinedecho PARM-例例2:假设:假设PARM未设置未设置arg=PARM:-not defined (注意

45、注意:双引号双引号)echo arg:argarg:not defined例例3:对未设置变量赋值:对未设置变量赋值cat use.dsel=1:sel=main(注意注意:此处的此处的“:”为空命令为空命令)echo Your selection is sel use.d programmingYour selection is programming注意注意:变量替换的这种形式不允许使用位置变量,若变量替换的这种形式不允许使用位置变量,若要使用位置变量,则必须先将位置变量赋值给一中要使用位置变量,则必须先将位置变量赋值给一中间变量,然后再对中间变量进行这种形式的替换。间变量,然后再对中间变

46、量进行这种形式的替换。例例4:将例:将例3中的空命令用中间变量替换。中的空命令用中间变量替换。cat use.dsel=1my-sel=sel=mainecho Your selection is my-sel use.d programmingYour selection is programming例例5:测试环境变量测试环境变量TERM是否设置。是否设置。cat check.env:TERM:?the TERM varible should be set 注意注意:出错信息以一行长为限,且输出到标准错误输出错信息以一行长为限,且输出到标准错误输出上。出上。9.5.7 特殊字符的引用特殊字

47、符的引用在在shell中所使用的许多特殊符号也可为其他目的所使中所使用的许多特殊符号也可为其他目的所使用,因此当不需要引用这些字符的特殊含义时,就用,因此当不需要引用这些字符的特殊含义时,就必须进行删除。消除特殊字符的含义有必须进行删除。消除特殊字符的含义有3种常用的种常用的方法,分别是转义符、单引号和双引号。方法,分别是转义符、单引号和双引号。1.转义符转义符()的引用的引用使用转义符消除单个字符的特殊含义,即将紧跟在转使用转义符消除单个字符的特殊含义,即将紧跟在转义符后面的单个字符按字符本身的实际含义解释。义符后面的单个字符按字符本身的实际含义解释。例:转义符具有续行功能例:转义符具有续行

48、功能 cat back.shecho Enter your name:cread nameecho Hello name back.shEnter your name:johnHello john2.单引号单引号()的引用的引用使用单引号消除被括在单引号中的所有特殊字符的含使用单引号消除被括在单引号中的所有特殊字符的含义,即单引号表示内容照原样不动。义,即单引号表示内容照原样不动。例例1:echo type a *pleasetype a *please例例2:在指定的目录中,查找名字为在指定的目录中,查找名字为*.zh 或或.sh文文件。件。cat test.shgrep*.zh|.sh 1

49、3.双引号双引号(“”)的引用的引用使用双引号能消除被括在双引号中的大部分特殊字符使用双引号能消除被括在双引号中的大部分特殊字符的含义,不能消除的字符有:、的含义,不能消除的字符有:、。例例1:echo Type a*,please Type a *,please例例2:vdate=date is the system maintenance time!例例3:cat share-file mkdir/tmp/fk chmod 755/tmp/fk cp /tmp/fk chmod 777 /tmp/fk/*4.特殊字符串引用的例外特殊字符串引用的例外引用双引号、单引号和转意符都不能消除对引用

50、双引号、单引号和转意符都不能消除对echo命令命令有特殊功能的控制字串的特殊含义。这些控制字串有特殊功能的控制字串的特殊含义。这些控制字串是:是:b 退格退格c 显示后不换行显示后不换行f 在终端上屏幕的开始处显示在终端上屏幕的开始处显示n 换行换行r 回车回车t 制表符制表符v 垂直制表符垂直制表符 反斜杠反斜杠9.6 shell的控制结构的控制结构9.6.1 条件与条件与test命令命令在程序设计语言中,作出决策的结构称为条件。在高在程序设计语言中,作出决策的结构称为条件。在高级语言中决策的作出是依赖于基本运算的结果;在级语言中决策的作出是依赖于基本运算的结果;在shell语言中,作出决策

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁