Shell从入门到精通教学课件:第3章 变量和引用

上传人:公**** 文档编号:571410468 上传时间:2024-08-10 格式:PPT 页数:45 大小:322.50KB
返回 下载 相关 举报
Shell从入门到精通教学课件:第3章 变量和引用_第1页
第1页 / 共45页
Shell从入门到精通教学课件:第3章 变量和引用_第2页
第2页 / 共45页
Shell从入门到精通教学课件:第3章 变量和引用_第3页
第3页 / 共45页
Shell从入门到精通教学课件:第3章 变量和引用_第4页
第4页 / 共45页
Shell从入门到精通教学课件:第3章 变量和引用_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《Shell从入门到精通教学课件:第3章 变量和引用》由会员分享,可在线阅读,更多相关《Shell从入门到精通教学课件:第3章 变量和引用(45页珍藏版)》请在金锄头文库上搜索。

1、第3章 变量和引用本章主要涉及到的知识点有:深入认识变量:主要介绍什么是变量,变量的命名,变量的类型,变量的有效范围以及系统变量和用户自定义变量等。变量的赋值和替换:主要介绍如何为变量赋值,如何取得变量的值,如何清空变量的值以及如何进行变量替换。引用:主要介绍什么是全引用、部分引用、命令替换和转义等。3.1 深入认识变量在程序设计语言中,变量是一个非常重要的概念。也是初学在程序设计语言中,变量是一个非常重要的概念。也是初学者在进行者在进行ShellShell程序设计之前必须掌握的一个非常基础的概念。只程序设计之前必须掌握的一个非常基础的概念。只有理解变量的使用方法,才能设计出良好的程序。本节将

2、介绍有理解变量的使用方法,才能设计出良好的程序。本节将介绍ShellShell中变量的相关知识。中变量的相关知识。3.1.1 3.1.1 什么是变量什么是变量顾名思义,变量就是程序设计语言中的一个可以变化的量,顾名思义,变量就是程序设计语言中的一个可以变化的量,当然,可以变化的是变量的值。变量几乎所有的程序设计语言中当然,可以变化的是变量的值。变量几乎所有的程序设计语言中都有定义,并且其涵义也大同小异。从本质上讲,变量就是在程都有定义,并且其涵义也大同小异。从本质上讲,变量就是在程序中保存用户数据的一块内存空间,而变量名就是这块内存空间序中保存用户数据的一块内存空间,而变量名就是这块内存空间的

3、地址。的地址。在程序的执行过程中,保存数据的内存空间的内容可能会不在程序的执行过程中,保存数据的内存空间的内容可能会不断地发生变化,但是,代表内存地址的变量名却保持不变。断地发生变化,但是,代表内存地址的变量名却保持不变。3.1.2 3.1.2 变量的命名变量的命名在在ShellShell中,变量名可以由字母、数字或者下划线组成,并且只能中,变量名可以由字母、数字或者下划线组成,并且只能以字母或者下划线开头。对于变量名以字母或者下划线开头。对于变量名的长度的长度,ShellShell并没有做出明确的规并没有做出明确的规定。因此,用户可以使用任意长度的字符串来作为变量名。但是,为了提定。因此,用

4、户可以使用任意长度的字符串来作为变量名。但是,为了提高程序的可读性,建议用户使用相对较短的字符串作为变量名。高程序的可读性,建议用户使用相对较短的字符串作为变量名。在一个设计良好的程序中,变量的命名有着非常大的学问。通常情在一个设计良好的程序中,变量的命名有着非常大的学问。通常情况下,用户应该尽可能选择有明确意义的英文单词作为变量名,尽量避免况下,用户应该尽可能选择有明确意义的英文单词作为变量名,尽量避免使用拼音或者毫无意义的字符串作为变量名。这样的话,用户通过变量名使用拼音或者毫无意义的字符串作为变量名。这样的话,用户通过变量名就可以了解该变量的作用。就可以了解该变量的作用。例如,下面的变量

5、名都是非常好的选择:例如,下面的变量名都是非常好的选择:PATH=/sbinUID=100JAVA_HOME=/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/./.SSHD=/usr/sbin/sshd3.1.3 3.1.3 变量的类型变量的类型ShellShell是一种动态类型语言和弱类型语言,即在是一种动态类型语言和弱类型语言,即在ShellShell中,变中,变量的数据类型毋需显示地声明,变量的数据类型会根据不同的操量的数据类型毋需显示地声明,变量的数据类型会根据不同的操作有所变化。准确地讲,作有所变化。准确地讲,ShellShell中的变量是不分数据

6、类型的,统一中的变量是不分数据类型的,统一地按照字符串存储。但是根据变量的上下文环境,允许程序执行地按照字符串存储。但是根据变量的上下文环境,允许程序执行一些不同的操作,例如字符串的比较和整数的加减等等。一些不同的操作,例如字符串的比较和整数的加减等等。#!/bin/bash#定义变量x,并且赋值为123x=123#变量x加1letx+=1#输出变量x的值echox=$x#显示空行Echo#替换x中的1为abc,并且将值赋给变量yy=$x/1/abc#输出变量y的值echoy=$y#声明变量ydeclare-iy#输出变量y的值echoy=$y【例3-1】演示Shell变量的数据类型#变量y的

7、值加1lety+=1#输出变量y的值echoy=$y#显示空行echo#将字符串赋给变量zz=abc22#输出变量z的值echoz=$z#替换变量z中的abc为数字11,并且将值赋给变量mm=$z/abc/11#输出变量m的值echom=$m#变量m加1letm+=1#输出变量m的值echom=$mecho#将空串赋给变量nn=#输出变量n的值echon=$n#变量n加1letn+=1echon=$necho#输出空变量p的值echop=$p#变量p加1letp+=1echop=$p01rootlinuxchapter3#./ex3-1.sh02x=1240304y=abc2405y=abc2

8、406y=10708z=abc2209m=112210m=11231112n=13n=11415p=16p=13.1.4 3.1.4 变量的定义变量的定义在在ShellShell中,通常情况下用户可以直接使用变量,而毋需先中,通常情况下用户可以直接使用变量,而毋需先进行定义,当用户第一次使用某个变量名时,实际上就同时定义进行定义,当用户第一次使用某个变量名时,实际上就同时定义了这个变量,在变量的作用域内,用户都可以使用该变量。了这个变量,在变量的作用域内,用户都可以使用该变量。#!/bin/bash#定义变量aa=1#定义变量bb=hello#定义变量cc=helloworld【例3-2】演示

9、通过直接使用变量来定义变量通过declare命令声明变量declare attribute variable-p-p:显示所有变量的值。:显示所有变量的值。-i-i:将变量定义为整数。在之后就可以直接对表达式求值,结果只能是整数。如果求:将变量定义为整数。在之后就可以直接对表达式求值,结果只能是整数。如果求值失败或者不是整数,就设置为值失败或者不是整数,就设置为0 0。-r-r:将变量声明为只读变量。只读变量不允许修改,也不允许删除。:将变量声明为只读变量。只读变量不允许修改,也不允许删除。-a-a:变量声明为数组变量。但这没有必要。所有变量都不必显式定义就可以用作数组。:变量声明为数组变量。

10、但这没有必要。所有变量都不必显式定义就可以用作数组。事实上,在某种意义上,似乎所有变量都是数组,而且赋值给没有下标的变量与赋值事实上,在某种意义上,似乎所有变量都是数组,而且赋值给没有下标的变量与赋值给下标为给下标为0 0的数组元素相同的数组元素相同. .-f-f:显示所有自定义函数,包括名称和函数体。:显示所有自定义函数,包括名称和函数体。-x-x:将变量设置成环境变量,这样在随后的脚本和程序中可以使用。:将变量设置成环境变量,这样在随后的脚本和程序中可以使用。【例3-3】演示使用不同的方法了声明变量,导致变量在不同的环境下表现出不同的行为#!/bin/bash定义变量x,并将一个算术式赋给

11、它x=6/3echo$x#定义变量x为整数declare-ixecho$x#将算术式赋给变量xx=6/3echo$x#将字符串赋给变量xx=helloecho$x#将浮点数赋给变量xx=3.14echo$x#取消变量x的整数属性declare+ix#重新将算术式赋给变量xx=6/3echo$x#求表达式的值x=$6/3echo$x#求表达式的值x=$(6/3)echo$x#声明只读变量xdeclare-rxecho$x#尝试为只读变量赋值x=5echo$xrootlinuxchapter3#./ex3-3.sh6/36/320./ex3-3.sh:line15:3.14:syntaxerror

12、:invalidarithmeticoperator(errortokenis.14)06/3222./ex3-3.sh:line32:x:readonlyvariable23.1.5 3.1.5 变量和引号变量和引号ShellShell语言中一共有语言中一共有3 3种引号,分别为单引号(种引号,分别为单引号( )、双引号()、双引号( )和反引号(和反引号( )。这)。这3 3种引号的作用是不同的,其中单引号括起来的字符种引号的作用是不同的,其中单引号括起来的字符都作为普通字符出现,由双引号括起来的字符,除都作为普通字符出现,由双引号括起来的字符,除“$ $”、“ ”、“ ”和和“ ”这几个

13、字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待,由反引号括起来的字串被字符对待,由反引号括起来的字串被ShellShell解释为命令,在执行时,解释为命令,在执行时,ShellShell首先执行该命令,并以它的标准输出结果取代整个反引号(包括两个反引首先执行该命令,并以它的标准输出结果取代整个反引号(包括两个反引号)部分号)部分#!/bin/bash#输出当前目录echocurrentdirectoryispwdrootlinuxchapter3#./ex3-4.shcurrentdirectoryis/root/ch

14、apter3【例3-4】演示反引号使用方法3.1.6 3.1.6 变量的作用域变量的作用域ShellShell中的变量也分为全局变量和局部变量中的变量也分为全局变量和局部变量2 2种种1全局变量全局变量全局变量可以在脚本中定义,也可以在某个函数中定义。在脚本中全局变量可以在脚本中定义,也可以在某个函数中定义。在脚本中定义的变量都是全局变量,其作用域为从被定义的地方开始,一直到定义的变量都是全局变量,其作用域为从被定义的地方开始,一直到ShellShell脚本结束或者被显式地删除脚本结束或者被显式地删除#!/bin/bash#定义函数func()#输出变量x的值echo$v1#修改变量x的值v1

15、=200#在脚本中定义变量xv1=100#调用函数func#输出变量x的值echo$v1rootlinuxchapter3#./ex3-5.sh100200【例3-5】演示全局变量的使用方法#!/bin/bash#定义函数func()#在函数内部定义变量v2=200#调用函数func#输出变量的值echo$v2rootlinuxchapter3#./ex3-6.sh200【例3-6】演示在函数内部定义全局变量的方法2局部变量与全局变量相比,局部变量的使用范围较小,通常仅限于某个程序与全局变量相比,局部变量的使用范围较小,通常仅限于某个程序段访问,例如函数内部。在段访问,例如函数内部。在Shel

16、lShell语言中,可以在函数内部通过语言中,可以在函数内部通过locallocal关关键字定义局部变量,另外,函数的参数也是局部变量。键字定义局部变量,另外,函数的参数也是局部变量。#!/bin/bash#定义函数func()#使用local关键字定义局部变量localv2=200#调用函数func#输出变量的值echo$v2rootlinuxchapter3#./ex3-7.sh【例3-7】演示使用local关键字定义局部变量#!/bin/bash#定义函数func()#输出全局变量v1的值echoglobalvariablev1is$v1#定义局部变量v1localv1=2#输出局部变量

17、v1的值echolocalvariablev1is$v1#定义全局变量v1v1=1#调用函数func#输出全局变量v1的值echoglobalvariablev1is$v1rootlinuxchapter3#./ex3-8.shglobalvariablev1is1localvariableis2globalvariableis1【例3-8】演示全局变量和局部变量的区别3.1.7 3.1.7 系统变量系统变量ShellShell语言的系统变量主要在对参数判断和命令返回值判断语言的系统变量主要在对参数判断和命令返回值判断时使用,包括脚本和函数的参数以及脚本和函数的返回值时使用,包括脚本和函数的参

18、数以及脚本和函数的返回值变量说明$nn是一个整数,从1开始,表示参数的位置,例如$1表示第1个参数,$2表示第2个参数等等$#命令行参数的个数$0当前Shell脚本的名称$?前一个命令或者函数的返回状态码$*以“参数1参数2”的形式将所有的参数通过一个字符串返回$以“参数1”“参数2”的形式返回每个参数$返回本程序的进程ID(PID)#!/bin/bash#输出脚本的参数个数echothenumberofparametersis$#输出上一个命令的退出状态码echothereturncodeoflastcommandis$?#输出当前脚本名称echothescriptnameis$0#输出所有

19、的参数echotheparametersare$*#输出其中的几个参数echo$1=$1;$2=$2;$11=$11【例3-9】演示常用系统变量的使用方法rootlinuxchapter3#./ex3-9.shabcdefghijklmnthenumberofparametersis14thereturncodeoflastcommandis0thescriptnameis./ex3-9.shtheparametersareabcdefghijklmn$1=a;$2=b;$11=a13.1.8 3.1.8 环境变量环境变量ShellShell的环境变量是所有的的环境变量是所有的ShellShe

20、ll程序都可以使用的变量。程序都可以使用的变量。ShellShell程序在运行时,都会接收一组变量,这组变量就是环境变量。程序在运行时,都会接收一组变量,这组变量就是环境变量。环境变量会影响到所有的脚本的执行结果。环境变量会影响到所有的脚本的执行结果。除了上表列出的环境变量之外,用户还可以使用除了上表列出的环境变量之外,用户还可以使用setset命令列出命令列出当前系统的环境变量。当前系统的环境变量。rootlinux chapter3# set | moreBASH=/bin/bashBASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:

21、force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepathBASH_ALIASES=()BASH_ARGC=()BASH_ARGV=()BASH_CMDS=()BASH_LINENO=()BASH_SOURCE=()BASH_VERSINFO=(0=4 1=1 2=2 3=1 4=release 5=x86_64-redhat-linux-gnu)BASH_VERSION=4.1.2(1)-releaseCOLORS=/etc/DIR_COLORSCOLUMNS=235#!

22、/bin/bash#输出命令搜索路径echocommandspathis$PATH#输出当前的登录名echocurrentloginnameis$LOGNAME#输出当前用户的主目录echocurrentusershomeis$HOME#输出当前的Shellechocurrentshellis$SHELL#输出当前工作目录echocurrentpathis$PWD【例3-10】通过环境变量来获取与当前Shell有关的一些环境变量的值rootlinux chapter3# ./ex3-10.sh commands path is /usr/lib64/qt-3.3/bin:/usr/local/

23、sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/pgsql-9.2/bincurrent login name is rootcurrent users home is /rootcurrent shell is /bin/bashcurrent path is /root/chapter33.2 变量赋值和和清空本节介绍本节介绍ShellShell中变量的赋值和销毁。中变量的赋值和销毁。3.2.1 3.2.1 变量赋值变量赋值在在ShellShell中,变量的赋值使用以下语法:中,变量的赋值使用以下语法:var

24、iable_name=valuevariable_name=value其中,其中,varibale_namevaribale_name表示变量名表示变量名,valuevalue表示变量的值。表示变量的值。例如,下面都是一些正确的赋值语句:例如,下面都是一些正确的赋值语句:v1=Linuxv1=Linuxv2=RedHat Linuxv2=RedHat Linuxv3=RedHat Linux $HOSTTYPEv3=RedHat Linux $HOSTTYPEv4=12345v4=123453.2.2 3.2.2 引用变量的值引用变量的值在在ShellShell中,用户可以通过在变量名前面加上

25、中,用户可以通过在变量名前面加上“$ $”,来获取,来获取该变量的值。该变量的值。#!/bin/bashv1=Linuxv2=RedHatLinuxv3=RedHatLinux$HOSTTYPEv4=12345#输出变量v1的值echo$v1#输出变量echo$v2#输出变量v3的值echo$v3#输出变量v4的值echo$v4rootlinuxchapter3#./ex3-11.shLinuxRedHatLinuxRedHatLinuxx86_6412345【例3-11】演示Shell变量的引用方法3.2.3 3.2.3 清除变量清除变量当某个当某个ShellShell变量不再需要时,可以将

26、其清除。当变量被清变量不再需要时,可以将其清除。当变量被清除后,其所代表的值也会消失。清除变量使用除后,其所代表的值也会消失。清除变量使用unsetunset语句,其基本语句,其基本语法如下:语法如下:unset variable_nameunset variable_name其中,参数其中,参数varibale_namevaribale_name表示要清除的变量的名称。表示要清除的变量的名称。#!/bin/bash#定义变量v1v1=Helloworld#输出v1的值echo$v1#清除变量unsetv1echothevalueofv1hasbeenreset#再次输出变量的值echo$v1

27、rootlinuxchapter3#./ex3-12.shHelloworldthevalueofv1hasbeenreset【例3-12】演示Shell变量清除方法,并且观察在清除前后变量值的变化3.3 引用和替换变量的引用和替换是变量的引用和替换是ShellShell对于变量功能的扩展。对于变量功能的扩展。3.3.1 3.3.1 引用引用所谓引用,是指将字符串用引用符号包括起来,以防止其中所谓引用,是指将字符串用引用符号包括起来,以防止其中的特殊字符被的特殊字符被ShellShell解释为其他涵义。特殊字符是指除了字面意思解释为其他涵义。特殊字符是指除了字面意思之外还可以解释为其他意思的字

28、符。例如在之外还可以解释为其他意思的字符。例如在ShellShell中,中,“$ $”符号符号的本身涵义是美元符号,其的本身涵义是美元符号,其ASCIIASCII码值为十进制码值为十进制3636。除了这个涵义。除了这个涵义之外,前面已经讲过,之外,前面已经讲过,“$ $”符号还可以用了获取某个变量的值,符号还可以用了获取某个变量的值,即变量替换。星号即变量替换。星号“* *”也是一个特殊的字符,星号可以用来作为也是一个特殊的字符,星号可以用来作为通配符使用通配符使用。【例3-13】演示星号通配符的使用方法rootlinux chapter3# ll ex*-rwxr-xr-x 1 root r

29、oot 179 Jan 7 11:51 ex3-10.sh-rwxr-xr-x 1 root root 114 Jan 7 15:49 ex3-11.sh-rwxr-xr-x 1 root root 100 Jan 7 16:15 ex3-12.sh符号符号说明说明双引号除美元符号、单引号、反引号和反斜线之外,其他所有的字符都将保持字面意义单引号所有的字符都将保持字面意义反引号反引号中的字符串将被解释为Shell命令反斜线转义字符,屏蔽后的字符的特殊意义3.3.2 3.3.2 全引用全引用在在ShellShell语句中,当一个字符串被单引号引用起来之后,其语句中,当一个字符串被单引号引用起来之

30、后,其中所有的字符,除单引号本身之外,都将被解释为字面意义,即中所有的字符,除单引号本身之外,都将被解释为字面意义,即字符本身的涵义。这意味着被单引号引用起来的所有的字符都将字符本身的涵义。这意味着被单引号引用起来的所有的字符都将被解释为普通的字符,因此,这种引用方式称为全引用。被解释为普通的字符,因此,这种引用方式称为全引用。#!/bin/bash#定义变量v1v1=chunxiao#输出含有变量名的字符串echoHello,$v1rootlinux chapter3# ./ex3-14.sh Hello, $v1【例3-14】演示全引用的使用方法3.3.3 3.3.3 部分引用部分引用对于

31、单引号来说,对于单引号来说, 被其引用起来的所有的字符都将被解释被其引用起来的所有的字符都将被解释为字面意义。而对于双引号来说,情况会有所不同。如果用户使为字面意义。而对于双引号来说,情况会有所不同。如果用户使用双引号将字符串引用起来,则其中所包含的字符除美元符号用双引号将字符串引用起来,则其中所包含的字符除美元符号($ $)、反引号()、反引号( )以及反斜线()以及反斜线( )之外的所有的其他的字符,)之外的所有的其他的字符,都将被解释为字面意义,这称为部分引用。也就是说,在部分引都将被解释为字面意义,这称为部分引用。也就是说,在部分引用中,用中,“$ $”、“ ”和和“ ”仍然拥有特殊的

32、涵义。仍然拥有特殊的涵义。#!/bin/bash#定义变量v1=chunxiao#输出变量的值echoHello,$v1rootlinuxchapter3#./ex3-15.shHello,chunxiao【例3-15】演示部分引用的使用方法3.3.4 3.3.4 命令替换命令替换所谓命令替换,是指在所谓命令替换,是指在ShellShell程序中,将某个程序中,将某个ShellShell命令的执命令的执行结果赋给某个变量。在行结果赋给某个变量。在bashbash中,有中,有2 2种语法可以进行命令替换,种语法可以进行命令替换,分别使用反引号和圆括号,如下:分别使用反引号和圆括号,如下:shel

33、l_commandshell_command$(shell_command)$(shell_command)以上以上2 2种语法时等价的,用户可以根据自己的习惯来选择使种语法时等价的,用户可以根据自己的习惯来选择使用。用。#!/bin/bash#变量替换v1=pwd#输出变量的值echocurrentworkingdirectoryis$v1rootlinuxchapter3#./ex3-16.shcurrentworkingdirectoryis/root/chapter3【例3-16】演示反引号的使用方法3.3.5 3.3.5 转义转义顾名思义,转义的作用是转换某些特殊字符的意义。转义使顾

34、名思义,转义的作用是转换某些特殊字符的意义。转义使用反斜线表示,当反斜线后面的一个字符具有特殊的意义时,反用反斜线表示,当反斜线后面的一个字符具有特殊的意义时,反斜线将屏蔽该字符的特殊意义,使得斜线将屏蔽该字符的特殊意义,使得ShellShell按照该字符的字面意义按照该字符的字面意义来解释。来解释。rootlinuxchapter3#echo$SHELL/bin/bashrootlinuxchapter3#echo$SHELL$SHELL3.4 小结本章详细介绍了本章详细介绍了ShellShell语言中的变量和引用的相关知识,主语言中的变量和引用的相关知识,主要内容包括变量涵义、变量的命名规则、变量的定义、变量的作要内容包括变量涵义、变量的命名规则、变量的定义、变量的作用域、系统变量和环境变量、变量赋值和清除、全引用和部分引用域、系统变量和环境变量、变量赋值和清除、全引用和部分引用、命令替换以及转义等。重点在于掌握好变量的定义方法、变用、命令替换以及转义等。重点在于掌握好变量的定义方法、变量的作用域、常用的系统变量和环境变量的使用方法、以及全引量的作用域、常用的系统变量和环境变量的使用方法、以及全引用和部分引用。在下面的一章中,将介绍条件测试和判断语句。用和部分引用。在下面的一章中,将介绍条件测试和判断语句。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号