命令格式 if command then commands fi 或者 if command ; then commands fi 注意command后面有个分号(;)
shell里面会运行if后面的command命令。如果运行之后,该命令退出状态为0,则只需then后面的commands命令。这点和其他编程语言不一样。其他编程语言是,如果if后面的条件为TRUE或者false来判断。
if-then 不能测试命令退出状态码以外的条件。但在bash中有个好工具可以通过test命令来测试其他条件
test command如果后面的condition满足的话,test命令退出并返回状态码0。如果条件不成立,则退出并返回非0的状态码。
除此之外,可以直接用方括号( [ ] )来替代test命令
if [ condition ]需要注意的是 , 方括号与condtion前后都必须留有空格,否则会报错
条件比较类型分为三类;
1)数值比较。
-eq,-ge,-gt,-le,-lt,-ne
2)字符串比较
str1 = str2 检查str1是否和str2相同
str1 != str2 检查str1是否和str2不等
str1 < str2 检查str2是否比str1小
str1 > str2 检查str1是否比str2大
-n str1 检查str1的长度是否非0
-z str1 检查str1的长度是否为0
注意:字符串大于和小于比较需要转义,if [ $val1 > $val2 ]是错误的,必须用 [ $val1 \> $val2]
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旧
if-then高级特性:
1)用于数学表达式的双括号(())
((expression))双括号命令允许在比较过程中使用高级数学表达式。test比较命令只能使用简单的算数操作,而双括号可以使用更多的数学符号。
如:++,--,!(取反),~(位取反),**(幂运算),<<,>>,&,|,&&,||
2)用于高级字符串处理功能的双方括号[[]]
[[expression]]双方括号提供了针对字符串比较的高级特性。有一个模式匹配功能。
例如:
if [[ $USER == r*]] then echo "Hello $USER" else echo "Sorry,I don't know you" fi这个例子里,判断当前用户是否是以r开头。 原文链接:https://www.f2er.com/bash/392043.html