linux第4章.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第4章Linuxshell程序设计2主要内容shell的主要特点、类型、建立和执行的方式bash变量的分类、定义形式及引用规则各种控制语句的格式、功能及流程bash中算术运算的使用bash函数的构成及使用规则3主要内容4.1shell概述4.2命令历史4.3名称补全4.4别名4.5shell特殊字符4.6shell变量4.7参数置换变量4.8算术运算4.9控制结构4.10函数4.11作业控制4.12shell脚本调试44.1shell概述4.1.1shell的特点和主要版本作为命令解释程序一种高级程序设计语言,它有变量,关键字,有各种控制语句,如if、case、while、for等语句,支持函数模块,有自己的语法结构1.shell的特点组合新命令直接使用shell的内置命令结构化的程序模块可配置的环境提供了文件名扩展字符灵活地使用数据流在后台执行命令高级的命令语言52.shell的种类(1)Bourneshell(简称sh)(2)Cshell(简称csh)(3)Kornshell(简称ksh)(4)BourneAgainshell(即bash)4.1shell概述4.1.1shell的特点和主要版本64.1shell概述4.1.2shell程序示例【例4.1】由简单命令组成的shell程序(文件名为ex1)。$catex1datepwd7【例4.2】带有控制结构的shell程序(文件名为ex2)。$catex2#!/bin/bash#Ifnoarguments,thenlistingthecurrentdirectory.#Otherwise,listingeachsubdirectory.iftest$#=0thenls.elseforidols-l$i|grep'^d'donefi4.1shell概述4.1.2shell程序示例84.1shell概述4.1.3shell脚本的建立和执行1.shell脚本的建立建立shell脚本的步骤与建立普通文本文件的方式相同,可以利用编辑器(如vi)进行程序录入和编辑加工。2.执行shell脚本的方式执行shell脚本的方式基本上有三种:(1)输入定向到shell脚本$bash脚本名94.1shell概述4.1.3shell脚本的建立和执行2.执行shell脚本的方式(2)以脚本名作为参数其一般形式是:$bash脚本名[参数]如果以目前shell(以·表示)执行一个shell脚本,则可以使用如下简便形式:$·脚本名[参数](3)将shell脚本的权限设置为可执行,然后在提示符下直接执行它。$chmoda+xex1$PATH=$PATH:.$ex1注意:此时该脚本所在的目录应被包含在命令搜索路径(PATH)中104.2命令历史4.2.1显示历史命令语法格式是:history[option][arg…]如果不带任何参数,则history命令会显示历史命令的清单如果history后给出一个正整数(如50),就只显示历史表中的最后50行命令常用的选项有:-a在历史文件中添加“新”历史命令行。-n从历史文件中读取尚未读入的历史命令行,添加到当前历史清单中。-r读取历史文件的内容,并把它作为当前的历史命令。-w把当前的历史写到历史文件中,覆盖原有内容。-c删除历史清单中所有的项。114.2命令历史4.2.2执行历史命令执行历史命令是命令替换之一,它以字符“!”开头、后随1个或多个字符来定义用户所需的某种类型的历史命令基本的事件指定字格式格式意义!!重复上一条命令,也就是“!-1”!n重新执行第n条历史命令!-n重新执行倒数第n条历史命令。!-1就等于!!!string重新执行以字符串string开头的最近的历史命令行。!?string?重新执行最近的、包含字符串string的那条历史命令!#到现在为止所输入的整个命令行124.2命令历史4.2.3配置历史命令环境在默认方式下,bash使用用户主目录下面的文件“.bash_history”来保存命令历史改变存放历史命令的文件$HISTFILE=/home/mengqc/.myhistory重新设定能够保留的命令个数$HISTSIZE=600134.3名称补全可以输入目录名或文件名的开头部分,然后按Tab键,Linux根据输入的字母查找以这些字母开头的目录或文件,并自动补全剩余的部分。144.4别名4.4.1定义别名一般语法格式为:alias[name[=value]]…如果没有指定参数,将在标准输出(屏幕)上显示别名清单定义别名时,往往用单引号将它代表的内容括起来,从而防止shell对其中的内容产生歧义,如对空格和特殊字符另作解释154.4别名4.4.2取消别名如果想取消先前定义的别名,可使用如下命令:unaliasname…可以一次将所有的别名都从别名表中删除,使用如下命令:unalias-a164.5shell特殊字符4.5.1通配符1.一般通配符*(星号),它匹配任意字符的0次或多次出现,f*可以匹配f,fa,f1,fa2,ffa.s?(问号),它匹配任意一个字符,f?可以匹配f1,fa,fb,不能匹配fabc,f12[](一对方括号),其中有一个字符组。其作用是匹配该字符组所限定的任何一个字符.f[abcd]可以匹配fa,fb,fc,fd,不能匹配f1,fa1,fab等,也可写作f[a-d].!(惊叹号),如果它紧跟在一对方括号的左方括号([)之后,则表示不在一对方括号中所列出的字符f[!1-9].c表示以f开头,后面一个字符不是数字1-9的.c文件名。174.5shell特殊字符4.5.1通配符2.模式表达式——是那些包含一个或多个通配符的字*(模式表)——匹配给定模式表中“模式”的0次或多次出现,各模式之间以“|”分开(下同)file*(.c|.o)可匹配file,file.c,file.o,file.c.c,file.o.o,file.c.o,file.o.c等,但不能匹配file.h,file.s等。+(模式表)——匹配给定模式表中“模式”的1次或多次出现file+(.c|.o)可匹配file.c,file.o,file.c.c,file.o.o,file.c.o,file.o.c等,但不能匹配file等。184.5shell特殊字符4.5.1通配符2.模式表达式?(模式表)——匹配模式表中任何一种“模式”的0次或1次出现file?(.c|.o)可匹配file,file.c,file.o,但不能匹配file.c.c,file.o.o,file.c.o,file.o.c等@(模式表)——仅匹配模式表中给定“模式”的一次出现file@(.c|.o)可匹配file.c,file.o,但不能匹配file,file.c.c,file.o.o,file.c.o,file.o.c等!(模式表)——除给定模式表中的一个“模式”之外,可以匹配其他任何东西194.5shell特殊字符4.5.2引号1.双引号由双引号括起来的字符(除$、倒引号(`)和反斜线(\)外)均作为普通字符对待。2.单引号由单引号括起来的字符全都作为普通字符出现3.倒引号倒引号括起来的字符串被shell解释为命令行,在执行时,shell会先执行该命令行,并以它的标准输出结果取代整个倒引号部分。倒引号还可以嵌套使用。但应注意,嵌套使用时内层的倒引号必须用反斜线(\)将其转义。204.5shell特殊字符4.5.3输入/输出重定向符自动打开三个标准文件,即标准输入文件(stdin),标准输出文件(stdout)和标准错误输出文件(stderr)。1.输入重定向符一般形式是:命令文件名如:$scorefile12.输出重定向符一般形式是:命令文件名如:$whoabc3.输出附加定向符一般形式是:命令文件名如:$ps-lpsfile21输入和输出重新定向可以连在一起使用。例如:$wc-linfileoutfile4.即时文件定向符即时文件的形式是:命令[参数]标记符输入行…标记符注意:标记符要成对出现例如:mail$1!!Bestwishestoyouonyourbirthday.!!4.5shell特殊字符4.5.3输入/输出重定向符225.与文件描述字有关的重定向系统为每个进程自动打开三个标准文件(即标准输入、标准输出和错误输出),其文件描述字分别为0,1和2。标准错误输出也可重定向到一个文件中,其一般形式是:命令2文件名命令2文件名标准输出和标准错误输出可以重定向到同一个文件,一般形式是:command$file等价于下面形式的命令:commandfile2&14.5shell特殊字符4.5.3输入/输出重定向符234.5shell特殊字符4.5.4注释、管道线和后台命令1.注释#!/bin/bash#Ifnoarguments,thenlistingthecurrentdirectory.#Otherwise,listingeachsubdirectory.2.管道线ls-l$HOME|wc–lls|grepm?.c|wc–l3.后台命令$gccm1.c&244.5shell特殊字符4.5.5命令执行操作符1.顺序执行在执行时,以分号隔开的各条命令从左到右依次执行pwd;who|wc-l;cd/usr/bin2.逻辑与命令1&&命令2其功能是,先执行命令1,如果执行成功,才执行命令2;否则,若命令1执行不成功,则不执行命令2。3.逻辑或命令1||命令2其功能是,先执行命令1,如果执行不成功,则执行命令2;否则,若命令1执行成功,则不执行命令2。254.5shell特殊字符4.5.6成组命令1.{}形式以花括号括起来的全部命令可视为语法上的一条命令,出现在管道符的一边。${echo“UserReportfor`date`.”;who;}|pr使用花括号时在格式上应注意:左括号“{”后面应有一个空格;右括号“}”之前应有一个分号(;)2.()形式(echoCurrentdirectoryis`pwd`.cd/home/mengqc;ls-l;cpm1em1&&rmm1catem1)|pr26二者存在重要区别:用花括号括起来的成组命令只是在本shell内执行命令表,不产生新的进程;用圆括号括起来的成组命令是在新的子shell内执行,要建立新的子进程。4.5shell特殊字符4.5.6成组命令274.6shell变量4.6.1用户定义的变量1.变量名是以字母或下线符打头的字母、数字和下线符序列,并且大小写字母意义不同。2.定义变量并赋值的一般形式是:变量名=字符串,例:myfile=/home/helena/m13.引用变量值在变量名前面加上一个符号“$”如果在赋给变量的值中要含有空格、制表符或换行符,那么,就应该用双引号把这个字符串括起来。$names=ZhangsanLisiWangwu$echo$names28如果变量值须出现在长字符串的开头或者中间,为了使变量名与其后的字符区分开,避免shell把它与其它字符混在一起视为一个新变量,则应该用花括号将该变量名括起来。例如,$dir=/usr/meng$cat${dir}qc/m1.c4.命令替换有两种形式的命令替换:一种是使用倒引号引用命令,其一般形式是:`命令表`另一种形式是:$(命令表)如:$dir=$(pwd)$echo$(pwd;cd/home/mengqc;ls-d)4.6shell变量4.6.1用户定义的变量294.6shell变量4.6.2数组bash只提供一维数组,并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。对数组元素赋值的一般形式是:数组名[下标]=值可以用declare命令显式声明一个数组,一般形式是:declare-a数组名读取数组元素值的一般格式是:${数组名[下标]}304.6

1 / 88
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功