Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 244|回复: 0

[默认分类] Linux shell编程——if条件判断

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-7-7 13:01:40 | 显示全部楼层 |阅读模式

    if 语句格式


      
       
        if  条件
    then
    Command
    else
    Command
    fi                              别忘了这个结尾
       
       
        If语句忘了结尾fi
    test.sh: line 14: syntax error: unexpected end of fi
       
      




       
    if 的三种条件表达式



      
       
        if
    command
    then

    if
    函数
    then
         命令执行成功,等于返回0 (比如grep ,找到匹配)
    执行失败,返回非0 (grep,没找到匹配)
       
       
        if [ expression_r_r_r  ]
    then
         表达式结果为真,则返回0,if把0值引向then
       
       
        if test expression_r_r_r
    then
         表达式结果为假,则返回非0,if把非0值引向then
       
      


          

       
    [ ] &&  ——快捷if



      
       
        [ -f "/etc/shadow" ] && echo "This computer uses shadow passwors"
       
       
           && 可以理解为then
        如果左边的表达式为真则执行右边的语句
       
      
      



       
    shell的if与c语言if的功能上的区别



      
       
         shell if
            c语言if
       
       
        0为真,走then
         正好相反,非0走then
       
       
         不支持整数变量直接if
    必须:if [ i –ne 0 ]

    但支持字符串变量直接if
    if [ str ] 如果字符串非0
         支持变量直接if
    if (i )
       
      




    =================================以command作为if 条件===================================

      

       
    以多条command或者函数作为if 条件



      
       
        echo –n “input:”
    read user

    if
    多条指令,这些命令之间相当于“and”(与)
    grep $user /etc/passwd >/tmp/null      
    who -u | grep $user
    then             上边的指令执行成功,返回值$?为0,0为真,运行then
    echo "$user has logged"
    else     指令执行失败,$?为1,运行else                           
    echo "$user has not logged"
    fi   
       
       
        # sh test.sh
    input : macg
    macg     pts/0        May 15 15:55   .          2075 (192.168.1.100)
    macg has logged
       
    # sh test.sh
    input : ddd
    ddd has not logged  
       
      




       
    以函数作为if条件  (函数就相当于command,函数的优点是其return值可以自定义)



      
       
        if
    以函数作为if条件,
    getyn
    then   函数reture值0为真,走then
    echo " your answer is yes"
    else  函数return值非0为假,走else
    echo "your anser is no"
    fi  
       
      




       
    if command  等价于 command+if $?



      
       
        $ vi testsh.sh
    #!/bin/sh

    if
    cat 111-tmp.txt | grep ting1
    then
    echo found
    else
    echo "no found"
    fi
         $ vi testsh.sh
    #!/bin/sh

    cat 111-tmp.txt | grep ting1

    if [ $? -eq 0 ]
    then
    echo $?
    echo found
    else
    echo $?
    echo "no found"
    fi
       
       
        $ sh testsh.sh
    no found  
        $ sh testsh.sh
    1
    no found
       
       
        $ vi 111-tmp.txt
    that is 222file
    thisting1 is 111file

    $ sh testsh.sh
    thisting1 is 111file
    found
        $ vi 111-tmp.txt
    that is 222file
    thisting1 is 111file

    $ sh testsh.sh
    thisting1 is 111file
    0
    found
       
      


       

    ========================================以条件表达式作为 if条件=============================



       
    传统if 从句子——以条件表达式作为 if条件

    if [ 条件表达式 ]

    then

    command

    command

    command

    else

    command

    command

    fi

       


        条件表达式



      文件表达式

    if [ -f  file ]    如果文件存在


    if [ -d ...   ]    如果目录存在


    if [ -s file  ]    如果文件存在且非空

    if [ -r file  ]    如果文件存在且可读

    if [ -w file  ]    如果文件存在且可写

    if [ -x file  ]    如果文件存在且可执行   



      整数变量表达式

    if [ int1 -eq int2 ]    如果int1等于int2   


    if [ int1 -ne int2 ]    如果不等于   

    if [ int1 -ge int2 ]       如果>=

    if [ int1 -gt int2 ]       如果>

    if [ int1 -le int2 ]       如果<=

    if [ int1 -lt int2 ]       如果<

       



         字符串变量表达式
    If  [ $a = $b ]                 如果string1等于string2

                                    
    字符串允许使用赋值号做等号

    if  [ $string1 !=  $string2 ]   如果string1不等于string2      


    if  [ -n $string  ]             如果string 非空(非0),返回0(true)  

    if  [ -z $string  ]             如果string 为空


    if  [ $sting ]                  如果string 非空,返回0 (和-n类似)   





       
    条件表达式引用变量要带$



      
       
        if [ a = b ] ;then   
    echo equal
    else
    echo no equal
    fi
       
       
        [macg@machome ~]$ sh test.sh
    input a:
    5
    input b:
    5
    no equal  (等于表达式没比较$a和$b,而是比较和a和b,自然a!=b)
       
      
    改正:



      
       
        if [ $a = $b ] ;then      
    echo equal
    else
    echo no equal
    fi
       
       
        [macg@machome ~]$ sh test.sh
    input a:
    5
    input b:
    5
    equal
       
      


                                                                                       

      
    -eq  -ne  -lt  -nt只能用于整数,不适用于字符串,字符串等于用赋值号=



      
       
        [macg@machome ~]$ vi test.sh
    echo -n "input your choice:"
    read var
    if  [ $var -eq "yes" ]
    then
    echo $var
    fi
    [macg@machome ~]$ sh -x test.sh
    input your choice:
    y
    test.sh: line 3: test: y: integer expression_r_r_r expected
            
       
      
      
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-20 20:40 , Processed in 0.412708 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表