shell编程(if)

0x00 if-then

格式
if command
then
   commands
fi
## shell编程的if判断条件与其他语言不同,条件处填写command(命令)
## 如果command执行后返回0(正确执行),则执行then后语句
## fi结束标志
另一种格式
if command;then
   commands
fi

0x01 if-then-else

格式
if command
then
   commands
else
   commands
fi
## shell编程的if判断条件与其他语言不同,条件处填写command(命令)
## 如果command执行后返回0(正确执行),则执行then后语句
## 如果command执行后返回非0(执行失败),则执行else后的语句
## fi结束标志
另一种格式
if command;then
   commands
else
   commands
fi

0x02 嵌套if

格式
if command
then
   commands
elif command
then
   commands
fi

0x03 test命令

shell中的if语句只可以判断命令返回状态值,无法做到判断条件
但是test命令却可以做到对条件的判断
test判断的条件为True时,返回状态值为 0 (正确执行)
test判断的条件为False时,返回状态值为 非0 (执行失败)
结合if语句可以得出,如下语法:

if test condition
then
   commands
fi
## condition为判断条件
另一种方法

除了可以使用test命令还可以,还有如下方式:

if [ condition ]
then
   commands
fi
## 注意严格按照
##[ condition ]
## 格式
## 注意[]和condition之间的空格
## 否则会报错

0x04 数值比较

比较 描述
n1 -eq n2 检查n1是否等于n2
n1 -lt n2 检查n1是否小于n2
n1 -le n2 检查n1是否小于等于n2
n1 -gt n2 检查n1是否大于n2
n1 -ge n2 检查n1是否大于等于n2
n1 -ne n2 检查n1是否不等于n2
shell中数值比较用上述,不用">"、"<"、"="等。

0x05 字符串比较

比较 描述
str1 = str2 检查str1是否等于str2
str1 != str2 检查str1是否不等于str2
str1 < str2 检查str1是否小于str2
str1 > str2 检查str1是否大于str2
-n str 检查str长度是否不为0
-z str 检查str长度是否为0
注意一

当使用 ">" 或 "<"时需要使用转义符号,否则会被识别成重定向符号

## 错误
if [ "a" > "a"]
then
   echo "True"
else
   echo "False"
fi
## 正确
if [ "a" \> "a"]
then
   echo "True"
else
   echo "False"
fi
注意二

-n或-z后面指定的字符串(变量)要带双引号(不可以单引号)

str=""
## 错误
if [ -n $str ]
then
   echo "True"
else
   echo "False"
fi
## 正确
 if [ -n "$str" ]
then
   echo "True"
else
   echo "False"
fi

或者可以使用双方括号

str=""
## 错误
if [ -n $str ]
then
   echo "True"
else
   echo "False"
fi
## 正确
 if [[ -n $str ]]
then
   echo "True"
else
   echo "False"
fi
注意三

字符串 大于 和 小于 的比较原理:

  • 首先比较第一个字符,第一个字符大的不管后面的字符为大的一方
  • 如果第一个字符相等,比较第二个字符,第二个字符大的不管后面的字符为大的一方;如果第二个字符相同,依次类推比较
  • 字符之间的比较通过ascii数值进行比较
注意四

注意书写形式严格按照如下:

[ "abc" = "abc" ]
## 注意空格

否则可能会得到错误的结果

0x06 文件比较

比较 描述
-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旧
注意一

root用户为最高权限用户,对任何文件的权限都为rwx
所以当存在 -r、-w、-x比较的脚本所属用户为root时,对任何文件判断都为True

注意二

-O和-G比较中的当前用户为Linux系统终端当前登录的用户

0x07 符合条件测试

## and
[ condition1 ] && [ condition2 ]
## or
[ condition1 ] || [ condition2 ]

0x08 高级特性

双括号
if (( expression ))
then
    commands
fi
## 双括号主要是针对数学表达式
## 使用 > < = 等进行比较,不可以在使用 -gt等
## 可以使用逻辑、位运算符和自增、自减等
案例:
## 错误
if (( 10 -lt 10*10 ))
then
   echo "True"
else
   echo "False"
fi
## 正确
if (( 10 < 10*10 ))
then
   echo "True"
else
   echo "False"
fi
双方括号
if [[ expression ]]
then
    commands
fi
## 双方括号主要是针对字符串比较
## 支持模式匹配
## 不是所有的shell都支持双方括号

案例:

if  [[ abc = a* ]]
then
 echo "True"
else
 echo "False"
fi
posted @ 2020-10-17 16:59  she11s  阅读(252)  评论(0编辑  收藏  举报