1、分支语句
(1)if-then-fi 语句:
格式:
if command; then commands fi
当command命令的退出状态码为$?=0时,进入分支,否则继续执行后面的命令。
(2) if-then-else-fi 语句:
格式:
if command; then commands1 else commands2 fi
当command命令的退出状态码为$?=0时,进入then分支,否则执行else分支命令。
(3)if-then-elif-then-fi 语句:
格式:
if command1; then commands1 elif command2; then commands2 fi
if分支的嵌套处理。
2、test命令
只能通过test命令测试跟命令退出码无关的条件。
test命令提供了在if-then语句中测试不同条件的途径。
test命令可以判断三类条件,数值比较,字符串比较,文件比较
格式:
if test condition; then commands fi
bash shell中提供了另一种在if-then-fi语句中声明test命令的方法:
if [ condition ]; then commands fi
方括号定义了test命令中用到的条件,注意:左右括号和condition之间必须有一个空格
(1)数值比较
n1 -eq n2 检查n1是否等于n2
n1 -ge n2 检查n1是否大于或等于n2
n1 -gt n2 检查n1是否大于n2
n1 -le n2 检查n1是否小于或等于n2
n1 -lt n2 检查n1是否小于n2
n1 -ne n2 检查n1是否不等于n2
注意:数值比较只能用来处理整数,不能处理浮点数
(2)字符串比较
str1 = str2 检查str1是否和str2相同
str1 != str2 检查str1是否和str2不同
str1 < str2 检查str1是否比str2小
str1 > str2 检查str1是否比str2大
-n str 检查str的长度是否非0
-z str 检查str的长度是否为0
注意:
在使用大于和小于号时需要使用转义字符 < 或 > ,否则会与重定向符号冲突
比较时,会将大写字母处理成小写,但是将同样的字符串进行比较时,小写字母较大
(3)文件比较
-d file 检查file是否存在并且是目录
-e file 检查file是否存在
-f file 检查file是否存在并且是文件
-r file 检查file是否存在并且可读
-s file 检查file是否存在并且非空
-w file 检查file是否存在并且可写
-x file 检查file是否存在并且可执行
-O file 检查file是否存在并属当前用户所有
-G file 检查file是否存在并且默认组与当前用户相同
file1 -nt file2 检查file1是否比file2新
file1 -ot file2 检查file1是否比file2旧
(4)符合条件测试
if-then-fi语句允许使用布尔逻辑来组合测试,两种布尔逻辑符号可用:
[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]
3、if-then 的高级特性
(1)使用双圆括号
格式:(( expression ))
expression可以是任意的数学赋值或比比较表达式,除了test命令中的数学运算符之外,还有以下符号:
val++/val-- 后增/后减
++val/--val 前加/前减
! 逻辑取反
~ 按位取反
** 幂运算
<< / >> 按位左移/右移
& / | 按位与/或
&& / || 逻辑与/或
注意:双圆括号的数学运算符不需要转义
(2)使用双方括号
格式:[[ expression ]]
expression中可以使用test命令中标准的字符串比较,并且提供了模式匹配,可以利用正则表达式进行匹配
例:
if [[ $USER == r* ]]; then commands fi
匹配 $USER是否是r开头,如果通过,则执行commands内容。
4、case语句
格式:
case var in val1 | val2) command1;; val3 command2;; *) default command3;; esac
用来解决if-then多层嵌套的问题