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