shell里if-then的使用

来源:互联网 发布:qq三国js心法 编辑:程序博客网 时间:2024/06/05 16:19
命令格式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开头。  


 
原创粉丝点击