第讲shell编程_第1页
第讲shell编程_第2页
第讲shell编程_第3页
第讲shell编程_第4页
第讲shell编程_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、联系方式:http:/北京源智天下科技有限公司第第4讲讲 shell编程编程演讲人:马玉军演讲人:马玉军 e-mail:1-2北京源智天下科技有限公司联系方式:http:/课程安排课程安排bash的使用的使用Shell程序的基本结构程序的基本结构局部变量局部变量环境变量环境变量shell的运算符的运算符输入和输出输入和输出引号的使用方法引号的使用方法测试语句测试语句流程控制结构流程控制结构综合练习综合练习1-3北京源智天下科技有限公司联系方式:http:/bash的使用的使用在在Linux操作系统中有多种操作系统中有多种Shell可供使用,在可供使用,在Red Hat Linux 9.0中默认

2、使用的中默认使用的shell是是bash。用户成功登录系统后,。用户成功登录系统后,shell将成为用户与系统内核进行交互的桥梁,直至用将成为用户与系统内核进行交互的桥梁,直至用户退出系统。户退出系统。Linux系统中所有用户都有一个缺省的系统中所有用户都有一个缺省的shell。用户的缺省。用户的缺省shell在系统的在系统的/etc/passwd文件中指定文件中指定bash的内部命令与外部命令:内部命令在的内部命令与外部命令:内部命令在shell启动时就调入内存,是常驻内存的。启动时就调入内存,是常驻内存的。外部命令在使用时才从硬盘中读入内存。外部命令的查找路径由环境变量外部命令在使用时才从

3、硬盘中读入内存。外部命令的查找路径由环境变量PATH定义。定义。命令补齐功能:命令补齐可以自动补齐没有输入完整的命令。命令补齐功能:命令补齐可以自动补齐没有输入完整的命令。“Tab”键激活命令补齐键激活命令补齐功能。支持命令和目录或文件的自动补齐。功能。支持命令和目录或文件的自动补齐。命令通配符:通配符命令通配符:通配符,是可以在命令中用一个字符来代替一系列字符或字符串是可以在命令中用一个字符来代替一系列字符或字符串 ?:匹配任意一个字符。例如,?abc,可以匹配任何以abc结束,并且以任意字符开头的含有四个字符的字符串。 .:匹配括号里列出的任何单字符。比如abcdef,可以匹配以abc开头

4、,以def中任意一个字符结尾的字符串。 *:匹配任何字符和字符串,包括空字符串。历史命令:上下箭头键及回车键的使用。历史命令:上下箭头键及回车键的使用。history命令和命令和fc命令的使用。命令的使用。命令的别名:指的是自定义一个命令代替其它命令,缩写命令,减少输入。命令的别名:指的是自定义一个命令代替其它命令,缩写命令,减少输入。alias和和unalias命令的使用。例如:命令的使用。例如: alias lsc=ls *.c unalias lsc1-4北京源智天下科技有限公司联系方式:http:/Shell程序的基本结构程序的基本结构Shell程序就是将一系列的程序就是将一系列的Li

5、nux程序通过流程控制写在一个文本文件中,程序通过流程控制写在一个文本文件中,由由shell读取此文本文件并且依次执行文件中的这些程序。读取此文本文件并且依次执行文件中的这些程序。下面是一个简单的下面是一个简单的shell程序程序test.sh:01#!/bin/bash02#hello #注意:注意:#后面的内容是后面的内容是shell程序的注释。程序的注释。03echo hello Linux#打印字符串到终端打印字符串到终端04echo this is a shell file.添加执行权限:添加执行权限:chmod +x a.sh执行执行shell程序:程序:./a.shshell程序

6、的基本特征:程序的基本特征:(1)所有的)所有的shell程序第一行都是以程序第一行都是以#!开头。后面跟上执行此开头。后面跟上执行此shell程程序的序的shell解释器完整路径。解释器完整路径。(2)习惯在程序的第)习惯在程序的第2行以注释的方式写出程序的名称。行以注释的方式写出程序的名称。(3)最简单的)最简单的shell程序就是一组程序就是一组shell命令的堆砌命令的堆砌(4)shell程序是普通文本文件,添加可执行权限后才可以执行。程序是普通文本文件,添加可执行权限后才可以执行。1-5北京源智天下科技有限公司联系方式:http:/局部变量局部变量Shell程序中需要用变量来存储程序

7、的数据。程序中需要用变量来存储程序的数据。Shell中的变量中的变量可分为局部变量、环境变量、位置变量三种。本节讲述可分为局部变量、环境变量、位置变量三种。本节讲述shell程序中变量的使用方法。程序中变量的使用方法。Shell语言是一种解释型语言,它与语言是一种解释型语言,它与C或或Java语言不同,语言不同,编程时无需事先声明变量。当对一个变量进行赋值时,也编程时无需事先声明变量。当对一个变量进行赋值时,也就定义了变量。局部变量指的是只在当前的进程和程序中就定义了变量。局部变量指的是只在当前的进程和程序中有效的变量。有效的变量。shell程序的变量是无数据类型的,可以使用同一个变量程序的变

8、量是无数据类型的,可以使用同一个变量存放不同数据类型的值。变量赋值之后,只需在变量前面存放不同数据类型的值。变量赋值之后,只需在变量前面加一个加一个$符号即可访问变量的值。可以用赋值符号符号即可访问变量的值。可以用赋值符号(=)为变为变量赋值。变量的值如果是不带空格的字符串,则可以不加量赋值。变量的值如果是不带空格的字符串,则可以不加引号。变量输出使用的命令是引号。变量输出使用的命令是echo。1-6北京源智天下科技有限公司联系方式:http:/局部变量局部变量【范例范例4-1】shell脚本中变量的定义与赋值。脚本中变量的定义与赋值。01 #!/bin/bash02 #bianliang 4

9、.1.sh03 a=123#直接为变量赋值直接为变量赋值04 b=1.2305 c=xyz06 d=efgh xyz07 e=efgh xyz08 echo $a#打印变量的值打印变量的值09 echo $b10 echo $c11 echo $d12 echo $e1-7北京源智天下科技有限公司联系方式:http:/环境变量环境变量环境变量是在一个用户的所有进程中都可以访问的变量。系统中常环境变量是在一个用户的所有进程中都可以访问的变量。系统中常常使用环境变量来存储常用的信息。常使用环境变量来存储常用的信息。使用使用export命令可以查看系统的环境变量列表。命令可以查看系统的环境变量列表。

10、环境变量的访问:需要在一个环境变量的前面加一个环境变量的访问:需要在一个环境变量的前面加一个$符号符号环境变量的定义:使用环境变量的定义:使用export命令定义环境变量。环境变的名称命令定义环境变量。环境变的名称一般都是大写的。一般都是大写的。export XX=1234echo $XX 在系统配置文件中定义环境变量在系统配置文件中定义环境变量 :上面定义的环境变量,只在当:上面定义的环境变量,只在当前前shell中运行的所有进程中有效。系统重启后失效。可以在系统中运行的所有进程中有效。系统重启后失效。可以在系统配置中加入这些环境变量的定义。在环境变量配置文件配置中加入这些环境变量的定义。在

11、环境变量配置文件/etc/profile中定义两个环境变量中定义两个环境变量:export A1=helloexport A2=123451-8北京源智天下科技有限公司联系方式:http:/环境变量环境变量位置变量:是位置变量:是shell程序在运行时传入的参数。程序中可以用变量的程序在运行时传入的参数。程序中可以用变量的形式来调用这些参数。这些参数被存放在形式来调用这些参数。这些参数被存放在1到到9的的9个特殊变量名中个特殊变量名中,被形象的称为位置变量。同普通变量一样,位置变量用,被形象的称为位置变量。同普通变量一样,位置变量用$前缀加前缀加数字来表示。例如,第数字来表示。例如,第5个参数

12、,表示为个参数,表示为$5。 【范例范例4-2】输出输出shell中的位置变量。中的位置变量。01 #!/bin/bash02 #4.2.sh;03 echo $1;04 echo $2;05 echo $3;06 echo $4;1-9北京源智天下科技有限公司联系方式:http:/shell的运算符Shell中的运算符可以实现变量的赋值、算术运算、测试、比较等功能,运算中的运算符可以实现变量的赋值、算术运算、测试、比较等功能,运算符是构成表达式的基础。符是构成表达式的基础。变量赋值:变量赋值:shell中使用中使用“=”进行变量赋值,也可以用等号来改变或初值化进行变量赋值,也可以用等号来改变

13、或初值化一个变量的值。在进行赋值时不用考虑变量的数据类型,这是一个变量的值。在进行赋值时不用考虑变量的数据类型,这是shell中变量中变量数据类型的特点决定的。数据类型的特点决定的。 例如:例如:STR=123echo $STR算术运算符:是可以在程序中实现加、减、乘、除等数学运算的运算符。算术运算符:是可以在程序中实现加、减、乘、除等数学运算的运算符。Shell中常用的数学运算符如下所示。中常用的数学运算符如下所示。+ +:对两个变量做加法。:对两个变量做加法。- -:对两个变量做减法。:对两个变量做减法。* *:对两个变量做乘法。:对两个变量做乘法。/ /:对两个变量做除法。:对两个变量做

14、除法。* * *:对两个变量做幂运算。:对两个变量做幂运算。% %:取模运算,第一个变量除以第二个变量求余数。:取模运算,第一个变量除以第二个变量求余数。+=+=:加等于,在自身基础上加第二个变量。:加等于,在自身基础上加第二个变量。-=-=:减等于,在第一个变量的基础上减去第二个变量。:减等于,在第一个变量的基础上减去第二个变量。* *= =:乘等于,在第一个变量的基础上乘以第二个变量。:乘等于,在第一个变量的基础上乘以第二个变量。/=/=:除等于,在第一个变量的基础上除以第二个变量。:除等于,在第一个变量的基础上除以第二个变量。%=%=:取模赋值,第一个变量对第二个变量取模运算,再赋值给第

15、一个变量:取模赋值,第一个变量对第二个变量取模运算,再赋值给第一个变量。1-10北京源智天下科技有限公司联系方式:http:/shell的运算符【范例范例4-3】用用shell脚本进行数学运算实例。脚本进行数学运算实例。01 #!/bin/bash02 #4.3.sh03 s=0#定义一个求和变量,初值为定义一个求和变量,初值为0。04 t=expr $1*$2#用用expr改变运算顺序,求改变运算顺序,求x的的y次方。次方。05 t=$t*3#t乘以乘以3。06 s=$s+t#结果相加。结果相加。07 t=$1*2#求求x的平方。的平方。08 t=$t*4#结果乘以结果乘以4。09 s=$s

16、+t#结果相加。结果相加。10 t=expr $2*5#求求5y的值。的值。11 s=$s+t#结果相加。结果相加。12 s=$s+6#结果加上结果加上6。13 echo $s#输出结果。输出结果。1-11北京源智天下科技有限公司联系方式:http:/输入和输出输入和输出输入指的是输入指的是shell程序读入数据。有从文件读取、从用户输程序读入数据。有从文件读取、从用户输入读取等方式读入数据。输出指的是入读取等方式读入数据。输出指的是shell程序的运行结程序的运行结果的处理,可以显示到屏幕或保存到文件。果的处理,可以显示到屏幕或保存到文件。 echo命令输出结果:命令输出结果:echo命令可

17、以输出文本或变量的值命令可以输出文本或变量的值,是,是shell中最常用的输出方式。结果可以输出到终端,中最常用的输出方式。结果可以输出到终端,也可以写入到文件。也可以写入到文件。 例如:例如:echo $str#将结果输出到终端。echo $str file#将结果保存到文件file中,如果没有文件会新建一个文件。如果已经有文件则会覆盖以前的文件。echo $str file#将结果追加到文件file中。echo输出的内容可以有下面的格式控制字符。输出的内容可以有下面的格式控制字符。c:末尾加上c表示这一行输出完毕以后不换行。t:输出一个跳格,相当于按下“Tab”键。n:输出一个换行。1-1

18、2北京源智天下科技有限公司联系方式:http:/输入和输出输入和输出read命令读取信息:可以从键盘或文件中读入信息,并赋给命令读取信息:可以从键盘或文件中读入信息,并赋给一个变量。读取信息的方法如下:一个变量。读取信息的方法如下:如果只读入一个变量,会把键盘上输入的作有信息赋如果只读入一个变量,会把键盘上输入的作有信息赋值给这个变量。按值给这个变量。按“Enter”键结束输入。键结束输入。如果输入多个变量,用空格键将输入的变量隔开。如如果输入多个变量,用空格键将输入的变量隔开。如果输入变量的个数多于需要读取变量的个数,将会把剩余果输入变量的个数多于需要读取变量的个数,将会把剩余的变量赋值给最

19、后一个变量。的变量赋值给最后一个变量。在读取语句后面添加在读取语句后面添加,表示从文件中读取数据,并且,表示从文件中读取数据,并且赋值给变量。赋值给变量。演示演示read命令的使用命令的使用1-13北京源智天下科技有限公司联系方式:http:/输入和输出输入和输出文件重定向:在执行命令时指定命令的输入、输出和错误的文件重定向:在执行命令时指定命令的输入、输出和错误的输出和输入方式。例如,可以命令的结果输出到一个文件输出和输入方式。例如,可以命令的结果输出到一个文件中。中。演示重定向演示重定向1-14北京源智天下科技有限公司联系方式:http:/引号的使用方法引号的使用方法Shell程序中的单引

20、号、双引号、反引号、反斜线在命令中有特殊含程序中的单引号、双引号、反引号、反斜线在命令中有特殊含义。义。 双引号表示引用一个字符串。字符串里不能直接使用双引号表示引用一个字符串。字符串里不能直接使用$、引号、双、引号、双引号、反斜线、反引号这些特殊符号。如果字符串里没有空格,引号、反斜线、反引号这些特殊符号。如果字符串里没有空格,使用双引号将赋值的字符串引起来,和不使用双引号效果是一样使用双引号将赋值的字符串引起来,和不使用双引号效果是一样的。当字符串中有空格时,用双引号表示引号中的内容为一个字的。当字符串中有空格时,用双引号表示引号中的内容为一个字符串。符串。 单引号表示引用一个字符串,用法

21、和双引号是相似的。如果双号单引号表示引用一个字符串,用法和双引号是相似的。如果双号号中再使用单引号,则输出时会输出这个单引号。号中再使用单引号,则输出时会输出这个单引号。反引号用于执行引号中的系统命令,然后将命令的结果返回。这反引号用于执行引号中的系统命令,然后将命令的结果返回。这个返回的结果可以赋值给一个变量。个返回的结果可以赋值给一个变量。反斜线用于对特殊字符进行转义。如果字符串中含有反斜线用于对特殊字符进行转义。如果字符串中含有&、*、+、$、|、?这些含有特殊符串,这些含有特殊符串,shell会认为这些符串代表着会认为这些符串代表着相应的运算。可以使用反斜线对这些符串进行转义。

22、相应的运算。可以使用反斜线对这些符串进行转义。 演示引号的使用方法演示引号的使用方法 1-15北京源智天下科技有限公司联系方式:http:/测试语句测试语句这里所说的测试是对变量的大小、字符串、文件属性等内容这里所说的测试是对变量的大小、字符串、文件属性等内容进行判断。进行判断。test命令可以用于字符串、数字、文件状态等内容的测试。命令可以用于字符串、数字、文件状态等内容的测试。文件状态测试:指的是对文件的权限、有无、属性、类型文件状态测试:指的是对文件的权限、有无、属性、类型等内容进行判断。与其他语言不同的是,等内容进行判断。与其他语言不同的是,test命令的测试命令的测试结果,返回结果,

23、返回0时表示测试成功。返回时表示测试成功。返回1时表示测试失败时表示测试失败1-16北京源智天下科技有限公司联系方式:http:/测试语句测试语句数值测试:指的是比较两个数值的大小或相等关系,相当数值测试:指的是比较两个数值的大小或相等关系,相当于于c语言中的比较运算符。语言中的比较运算符。shell程序中的数值测试有下面程序中的数值测试有下面两种形式。两种形式。1、test命令和相应的参数可以对两个数值的关系进行测试,使用方法如命令和相应的参数可以对两个数值的关系进行测试,使用方法如下所示。下所示。test 第一个操作数 数值比较符 第二个操作数 2、用中括号代替、用中括号代替test命令。

24、这种方法和命令。这种方法和test命令的原理相同,使用方法命令的原理相同,使用方法如下所示。如下所示。 第一个操作数 数值比较符 第二个操作数 1-17北京源智天下科技有限公司联系方式:http:/测试语句测试语句逻辑测试指的是将多个条件进行逻辑运算,常用作循环语句或判断逻辑测试指的是将多个条件进行逻辑运算,常用作循环语句或判断语句的条件。语句的条件。shell程序中有下面三种逻辑测试。程序中有下面三种逻辑测试。-a:逻辑与,操作符两边均为真时结果为真,否则为结果为假。-o:逻辑或,操作符两边至少一个为真时,结果为真,否则为假。! :逻辑否,只有条件为假时,返回结果为真。1-18北京源智天下科

25、技有限公司联系方式:http:/测试语句测试语句所谓字符串测试,指的是比较两个字符串是否相等,或者判断一个所谓字符串测试,指的是比较两个字符串是否相等,或者判断一个字符串是否为空。这种判断常用来测试用户输入是否符合程序的要字符串是否为空。这种判断常用来测试用户输入是否符合程序的要求。字符串测试有下面求。字符串测试有下面4中常用的方法。中常用的方法。test字符串比较符 字符串test 字符串1 字符串比较符 字符串2 字符串比较符 字符串 字符串1 字符串比较符 字符串2 字符串比较符有如下所示的字符串比较符有如下所示的4种。种。=:测试两个字符串是否相等。!=:测试两个字符串是否不相等。-z

26、:测试字符串是空字符串。-n:测试字符串是非空字符串。1-19北京源智天下科技有限公司联系方式:http:/流程控制结构流程控制结构所谓流程控制,指的是使用逻辑判断,针对判断的结果执行不同语句或所谓流程控制,指的是使用逻辑判断,针对判断的结果执行不同语句或不同的程序部分。这种结构是所有编程语言的重要组成部分。不同的程序部分。这种结构是所有编程语言的重要组成部分。shell中流程控制结构,实际上是使用中流程控制结构,实际上是使用shell的内部命令来实现的。使用的内部命令来实现的。使用方法与其它编程语言中流程控制语句类似。方法与其它编程语言中流程控制语句类似。 if语句语句:最常用的条件判断语句

27、,是通过一个条件的真假来决定后面:最常用的条件判断语句,是通过一个条件的真假来决定后面的语句是不是执行。的语句是不是执行。 1-20北京源智天下科技有限公司联系方式:http:/流程控制结构流程控制结构【范例范例4-4】shell脚本中使用脚本中使用if语句进行条件判断。语句进行条件判断。01 #!/bin/bash02 #4.4.sh03 i=$ $1 % 2 04 if test $i -eq 0 ; then05 echo oushu06 else07 echo jishu08 fi【范例范例4-5】if语句判断文件是否语句判断文件是否可写。可写。01 #!/bin/bash02 #4.

28、5.sh03 if test -w $1#判断文件是否可写。04 then echo writeable05 else06 echo unwriteable#不可写时的输出07 fi#fi结束if语句。08 if test -x $1#判断文件是否可以执行。09 then echo excuteable10 else11 echo unexcuteable#不可执行时输出12 fi 1-21北京源智天下科技有限公司联系方式:http:/流程控制结构流程控制结构【范例范例4-6】用用if语句判断输入的文件是否可写。语句判断输入的文件是否可写。01 #!/bin/bash02 #4.6.sh03

29、if test -z $1 #测试是否输入了文件名。04 then echo please input a #没有输出文件名则输出提示。05 else#有文件名的情况。06 if test -w $1#测试文件是否可写。07 then echo writeable08 else#不可写的输出。09 echo unwriteable10 fi11 if test -x $1#测试文件是否可以执行。12 then echo excuteable13 else14 echo unexcuteable#不能执行时的输出。15 if16 fi 1-22北京源智天下科技有限公司联系方式:http:/流程控

30、制结构流程控制结构for语句是一种常用的循环语句,实现在一个值列表中的语句是一种常用的循环语句,实现在一个值列表中的循环功能。下面是循环功能。下面是for语句的使用方法。语句的使用方法。 1-23北京源智天下科技有限公司联系方式:http:/流程控制结构流程控制结构【范例范例4-7】使用使用for循环语句输出字循环语句输出字符列表中的字符。符列表中的字符。01 #!/bin/bash02 #4.7.sh for03 for char in a s d f g #开始for循环。04 do#循环体。05 echo $char06 done#结束for循环【范例范例4-7】使用使用for循环语句输

31、出所循环语句输出所有的命令行参数。有的命令行参数。01 #!/bin/bash02 #4.8.sh for03 for str#开始for循环。04 do#循环体。05 echo $str06 done 1-24北京源智天下科技有限公司联系方式:http:/流程控制结构流程控制结构【范例范例4-9】使用使用for循环语句复制指定类型的文件。循环语句复制指定类型的文件。 01 #!/bin/bash02 #4.9.sh for 03 FILES=ls *.sh#ls *.sh浏览文件夹中所有的.sh文件,将结果存放在FILES中。 0405 for sh in $FILES#开始for循环。06 do07 txt=echo $sh | sed s/.sh/.txt/#用替换的方法处理文件名08 cp $sh $txt#复制文件。09 echo $txt#输出已经复制的文件名。10 done 1-25北京源智天下科技有限公司联系方式:http:/流程控制结构流程控制结构【范例范例4-10】使用使用for循环语句的嵌套应用实现输出乘法口诀表。循环语句的嵌套应用实现输出乘法口诀表。01 #!/bi

温馨提示

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

评论

0/150

提交评论