Linux外壳程序编程 shell编程 引号详解

shell是命令语言、命令解释程序及程序设计语言的统称;

shell是一个命令语言解释器,它拥有自己内建的shell命令;

Shell(Bash)单引号、双引号和反引号用法详解;

尽量使用 $(命令) 的方式来引用命令的输出,而不要使用反引号。


前言

1.shell变量的定义及其使用

2.位置参数和环境变量

3.shell中的特殊字符

目录

前言

一、SHELL变量

二、SHELL中的特殊字符

(1)通配符

1. * 星号

2. ?问号

3. !叹号

(2)引号

1.双引号

2.单引号-所见即所得

3.倒/反引号和$作用相同

4.反斜线

三、条件测试

1.字符串比较

2.数字比较

3.文件操作符

四、测试语句

五、执行shell程序的方法


一、SHELL变量

shell有两三种变量:内部变量、环境变量和临时变量;在shell脚本中临时变量又分为两类:用户定义的变量和位置参数;返回值为0代表为真,其他非0值均为假。

常用的内部变量:
#:传给shell程序位置参数的个数;

?:存储上一个执行命令的返回值,返0 存储shell程序的名称;

* :存储shell程序的所有参数

二、SHELL中的特殊字符

(1)通配符

通常的通配符有三种:

1. * 星号

它匹配任意字符的0次或多次出现。但注意,文件名前面的圆点(.)和路径名中的斜线(/)必须显示匹配。

2. ?问号

它匹配任意一个字符。应该注意:字符 * 和 ?在一对方括号外面是通配符,若出现在其内部,它们就失去通配符的能力了。

3. !叹号

若它紧跟在一对方括号的左方括号“ [ ”之后,则表示不在一对方括号中所列出的字符。

(2)引号

 在SHELL中引号分为三种:单引号、双引号、和倒引号。被单引号括起的字符串(包括特殊字在内),这些字符串就会失去特殊的意义而只作为普通字符解释;双引号括起来的字符串除 $ 、’、和”仍保留特殊的功能,其余字符则被视为普通字符;反引号括起的字符串被shell解释为命令行,在执行时shell将其解释后直接输出不包括反引号在内的结果。

单引号和双引号用于变量值出现空格时,比如name=yue ying,这样执行就会出现问题,而必须用括号引起来。如name="yue ying"

不过,引号有单引号和双引号之分,二者的主要区别在于,被单引号括起来的字符都是普通字符,就算特殊字符也不再有特殊含义;而被双引号括起来的字符中,"$"、"\"和反引号是拥有特殊含义的,"$"代表引用变量的值,而反引号代表引用命令。

1.双引号

由双引号括起来的字符,除$、倒引号和反斜线(\)仍保留其功能外,其余字符通常作为普通字符对待。双引号作用与单引号类似,区别在于单引号会忽略其内的特殊字符(单引号直接引用字符串),而双引号会对其内的“$”"、“`”这三种特殊字符先进行解释,并将以解释后的含义替换字符本身的含义后输出。

2.单引号-所见即所得

由单引号括起来的字符都作为普通字符出现。在shell中定义字符串时就会涉及到空格或引用字符串原意的问题,在不使用引号而直接定义有空格的字符串时会出现定义失败,如果要直接引用字符串中特殊字符的原型时,单引号都可以解决这个问题。
单引号括起来的字符串,它可以将其中的内容全部解释为普通的字符串,并将解释后的字符串输出。如,使用单引号来定义有空格的字符串,并将定义的字符串引用。如果定义的字符串中含有空格而不使用引号时,就会出现定义失败的情况。

在定义字符串失败的情况下引用字符串时就出现空值,这反过来也说明字符串定义失败。单引号还有另一个作用是阻止在其内的特殊字符被解释,也就是说在单引号内定义的是字符串,都直接把定义的全部字符串一成不变的输出。

3.倒/反引号和$作用相同

反引号的作用和用法与在双引号内的变量引用相似,在shell中会将反引号内的字符视为命令来执行,并将执行后的结果输出。如果在反引号内的字符不能被识别,系统就无法执行并输出空值或错误的提示信息。

反引号可用在单引号和双引号内,不同的是在单引号内使用时会忽略对反引号内容的解释(就是不执行反引号内的字符或字符串),而在双引号中时会对反引号内的字符先进行解释,并将结果输出。

echo '`date`'

echo "`date`"
~   

4.反斜线

转义字符,若想在字符串中使用反斜线本身,则必须采用(\\)的形式,其中第一个反斜线作为转义字符,而把第二个反斜线变为普通字符。

三、条件测试

1.字符串比较

=     比较两个字符串是否相等
!=    比较两个字符串是否不相等
-n    判断字符长度是否大于零
-z    判断字符长度是否等于零

2.数字比较

-eq     比较两个数是否相等
-ge     比较一个数是否大于或是等于另一个数
-le      比较一个数是否小于或是等于另一个数
-ne     比较两个数是否不等
-gt      比较一个数是否大于另一个数
-lt       比较一个数是否小于另一个数

3.文件操作符

-d     确定文件是否为目录
-f      确定文件是否为普通文件
-r      确定是否对文件设置了读许可
-s      确定文件名是否具有大于零的长度
-w     确定文件是否设置了写许可
-x      确定文件是否设置了执行许可

四、测试语句

有两种常用形式:一种是用test命令,如上所示。另一种是用一对方括号将测试条件括起来。两种形式完全等价。

eg:测试位置参数$1是否是已存在的普通文件,可写成:test -f " $1",也完全可写成:[ -f $ l ]

在格式上应注意,如果在test语句中使用shell变量,为表示完整、避免造成歧异起见最好用双引号将变量括起来。利用一对方括号表示条件测试时,在左方括号[之后、右方括号]之前各应有空格。 

五、执行shell程序的方法

方法一 : shell程序不在当前目录:加执行权后,程序完整路径引导。

方法二:  shell程序在当前目录,可用点返斜线引导 或 sh shell程序名;
例如:./aa.sh  或 sh  aa.sh

你可能感兴趣的:(操作系统operating,sys,linux,运维,服务器)