首先shell中只有字符串这一种类型,没有整形或者浮点型。

但是在定义变量时,可以采用单引号,双引号和不加引号。不加引号,如果变量内部有空白字符,则会被截断,所以这种情况必须加引号,单引号和双引号的区别就是变量替换,单引号不会替换。

shell中用作条件测试的语法有两种[]和test。一般用[]更多,如果为了避免太多的[],可以用test。

用[]时要注意,括号前后都必须有空格,否则报错。


在测试块内部,所能用的我们在其他语言里使用的比较符只有四种:== != > <,而且,shell中只有字符串,所以这四种比较符也是针对字符串的,也就是基于字典序的。

除了以上四种比较符外,我们还可以使用其他的比较参数,分为字符串,数字和文件三类:

字符串:

if [-n str],测试非空,str非空返回true。这个很常用,比如我们判断一个环境变量是否存在。

但是需要注意的一点是,这里的str必须上双引号,否则始终为true。

或者,根据《shell脚本攻略》一书的作者的建议,凡是对字符串的if,全部放在双中括号中[[]],即if [[-n str]],也只是可行的。

【shell】条件_单引号

数字:

主要有以下六种:

-eq

-nq

-lt

-le

-gt

-ge


文件:

-f 是文件或者目录

-d 是目录

-e 是文件


如果有多个条件,可以使用|| &&连接每一个[]。但是不能出现在[]内部,内部也只能只用命令-a或者-o。

if [ $a -gt 10 ] && [ $a -lt 12 ];then
echo "valid"
fi


if [ $a -gt 10 -a $a -lt 12 ];then
echo "valid"
fi