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