• shell脚本学习之if..else用法


    一 简介 


    1 字符串判断

    str1 = str2      当两个串有相同内容、长度时为真 
    str1 != str2      当串str1和str2不等时为真 
    -n str1        当串的长度大于0时为真(串非空) 
    -z str1        当串的长度为0时为真(空串) 
    str1           当串str1为非空时为真

    >   <                               比较大小的时候 可以使用大于号,小于号,但是需转义。例如 [ "2006.01.23" > "2005.03.01" ] && echo dayu || echo budayu

    2 数字的判断

    int1 -eq int2    两数相等为真 
    int1 -ne int2    两数不等为真 
    int1 -gt int2    int1大于int2为真 
    int1 -ge int2    int1大于等于int2为真 
    int1 -lt int2    int1小于int2为真 
    int1 -le int2    int1小于等于int2为真

    3 文件的判断

    -r file     用户可读为真 
    -w file     用户可写为真 
    -x file     用户可执行为真 
    -f file     文件为正规文件为真 
    -d file     文件为目录为真 
    -c file     文件为字符特殊文件为真 
    -b file     文件为块特殊文件为真 
    -s file     文件大小非0时为真 
    -t file     当文件描述符(默认为1)指定的设备为终端时为真

    3 复杂逻辑判断

    -a         与 
    -o        或 
    !        非


    上面的三种写在括号内,对应的 && || 写在中括号之间。例如,if  [   "$a"  eq   1  -o  "$b" eq 2 ]  &&  [   "$c"  eq  3 ]

    4字符串匹配

    if [  `echo $str | grep -e regexp`  ];then .


    转自:http://hi.baidu.com/ryouaki/item/0689dcb8a467b5a7eaba9319


    二 具体使用

    比较两个字符串是否相等的办法是:

        if [ "$test"x = "test"x ]; then

        这里的关键有几点:

        1 使用单个等号

        2 注意到等号两边各有一个空格:这是unix shell的要求

        3 注意到"$test"x最后的x,这是特意安排的,因为当$test为空的时候,上面的表达式就变成了x = testx,显然是不相等的。而如果没有这个x,表达式就会报错:[: =: unary operator expected

        

        二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别.

        整数比较 需要注意的是 要么使用[]和gt组合 要么使用大于号和双括号组合

        -eq 等于,如:if [ "$a" -eq "$b" ]

        -ne 不等于,如:if [ "$a" -ne "$b" ]

        -gt 大于,如:if [ "$a" -gt "$b" ]

        -ge 大于等于,如:if [ "$a" -ge "$b" ]

        -lt 小于,如:if [ "$a" -lt "$b" ]

        -le 小于等于,如:if [ "$a" -le "$b" ]

         大于(需要双括号),如:(("$a" > "$b"))

        >= 大于等于(需要双括号),如:(("$a" >= "$b"))

        小数据比较可使用AWK

        字符串比较

        = 等于,如:if [ "$a" = "$b" ]

        == 等于,如:if [ "$a" == "$b" ],与=等价

         注意:==的功能在[[]]和[]中的行为是不同的,如下:

         1 [[ $a == z* ]] # 如果$a以"z"开头(模式匹配)那么将为true

         2 [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true

         3

         4 [ $a == z* ] # File globbing 和word splitting将会发生

         5 [ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true

         一点解释,关于File globbing是一种关于文件的速记法,比如"*.c"就是,再如~也是.

         但是file globbing并不是严格的正则表达式,虽然绝大多数情况下结构比较像.

        != 不等于,如:if [ "$a" != "$b" ]

         这个操作符将在[[]]结构中使用模式匹配.

         大于,在ASCII字母顺序下.如:

         if [[ "$a" > "$b" ]]

         if [ "$a" > "$b" ]

         注意:在[]结构中">"需要被转义.

         具体参考Example 26-11来查看这个操作符应用的例子.

        -z 字符串为"null".就是长度为0.

        -n 字符串不为"null"

         注意:

         使用-n在[]结构中测试必须要用""把变量引起来.使用一个未被""的字符串来使用! -z

         或者就是未用""引用的字符串本身,放到[]结构中。虽然一般情况下可

         以工作,但这是不安全的.习惯于使用""来测试字符串是一种好习惯.

    if判断式
    if [ 条件判断一 ] && (||) [ 条件判断二 ]; then
    elif [ 条件判断三 ] && (||) [ 条件判断四 ]; then
    else
       执行第三段內容程式
    fi

    例如:

     

    <span style="background-color: rgb(255, 255, 255);">root@Bizbox:~# a=0
    root@Bizbox:~# b=0
    root@Bizbox:~# c=5         
    root@Bizbox:~# if [ $a = 0 -a $b = 0 ]&&[ $c != 0 ]; then
    > echo success
    > fi
    success</span>

    if 使用的表达式


  • 相关阅读:
    2015531 网络攻防 Exp1 PC平台逆向破解(5)M
    2017-2018-1 20155331 嵌入式C语言
    20155330 《网络对抗》 Exp9 web安全基础实践
    20155330 《网络对抗》 Exp8 Web基础
    20155330 《网络对抗》 Exp7 网络欺诈防范
    20155330 《网络对抗》 Exp6 信息搜集与漏洞扫描
    20155330 《网络对抗》 Exp5 MSF基础应用
    20155330 《网络攻防》 Exp4 恶意代码分析
    20155330 《网络攻防》 Exp3 免杀原理与实践
    20155330 《网络对抗》 Exp2 后门原理与实践
  • 原文地址:https://www.cnblogs.com/wangshuai6707/p/4430566.html
Copyright © 2020-2023  润新知