if/then结构用来判断命令列表的退出状态码是否为0 如果成功的话, 那么就执行接下来的一个或多个命令. 

echo 什么是真!!!!!!!!
if [ 测试条件为真 ]
 then
command
command
else #可选,如果原始的条件判断的结果为假,那么在这里添加默认的代码来执行
command
command
fi
如果if then 在同一行
if [ -x "$test" ] ; then
else if和elif
elif 是else if 的缩写,作用是在外部的判断结构中在嵌入一个内部的if then 结构
test, /usr/bin/test, [ ], 和/usr/bin/[都是等价命令
[[]]  比[] 结构更加通用,这是一个扩展的test命令
使用` `.``.``.` `条件判断结构, 而不是[ ... ], 能够防止脚本中的许多逻辑错误. 比如, &&, ||, <, 和> 操作符能够正常存在于` `条件判断结构中, 但是如果出现在[ ]结构中的话, 会报错.
如:
#!/bin/bash
var1=20
var2=22
[ "$var1" -ne "$var2" ] && echo "$var1 is not equal to $var2"
#测试var1是否等于var2
home=/home/bozo
[ -d "$home" ] ||  echo "$home directory does not exist "
&&是不是不管前面的命令执行如何,都要执行后面的命令,|| 是不是前面的命令执行失
败就执行后面的命令
 
文件测试操作符
-e 文件存在
-f 这个文件是一个一般文件,不是目录或设备文件
-s 文件大小不为零
-d 这是一个目录
-b 块设备
-c 字符设备 (键盘,声卡等)
-p 文件是一个管道
-h 符号链接
-L 符号链接
-S 这是一个socket
-t    文件(描述符)被关联到一个终端设备上
  这个测试选项一般被用来检测脚本中的stdin([ -t 0 ]) 或者stdout([ -t 1 ])是否来自于一个终端.
-r -w -x 分别表示文件是否有可读可写可执行权限
-g -u 分别表示 setgid setuid
-O 判断你是否是文件的拥有者
-G 文件GID是否与你相同
-N 从文件上一次被读取到现在为止,文件是否被修改过
file1 -nt file2 文件file1 比文件flie2新
file1 -ot file2 文件file1 比文件flie2旧
file1 -ef file2 文件file1和文件file2是相同的硬链接
!反转上面-nt -ot -ef 所有的测试结果,如果没有条件给出,返回真值
其他比较符号!
整数比较!
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
<=, < ,> ,>=,用在双括号中使用
如:(("$a" < "$b"))
字符串比较
=
if [ "$a" = "$b" ]
==与=等价
!=不等号
 if [ "$a" != "$b" ]  
例子:
#!/bin/bash
a=4
b=5
echo
if [ "$a" -ne "$b" ]
        then
echo "$a is not equal to $b"
else "(arithentic comparison)"
fi
echo
if [ "$a" != "$b" ]
        then
echo "$a is not equal to $b"
else "(string comparison)"
fi
                  
可以通过if/then结构来使用嵌套的条件测试. 最终的结果和上面使用&&混合比较操作符的结果是相同的.
  1 if [ condition1 ]
  2 then
  3   if [ condition2 ]
  4   then
  5     do-something  # But only if both "condition1" and "condition2" valid.
  6   fi 
  7 fi