《鸟哥的Linux私房菜》学习笔记(9)——条件判

系统 1650 0

一、条件判断表达式                                                         

条件测试类型:

  • 整数测试
  • 字符测试
  • 文件测试

条件测试的表达式

  [ expression ](注意expression头和尾部各有一个空格)

  [[ expression ]]

  test expression

算术运算有三种方法:

  • let 算术运算表达式
  • $[算术运算表达式]
  • $((算术运算表达式))
  • expr 算术运算表达式
      
        
          [root@hao ~]#
        
      
       A=
      
        3
      
      
        
           [root@hao ~]#
        
      
      B=
      
        4
      
      
        
           [root@hao ~]#
        
      
       let C=$A+
      
        $B


        
          
            [root@hao 
          
        
      
      
        
          ~]#
        
      
      
        echo
      
      
         $C


      
      
        7
      
      
        
           [root@hao ~]#
        
      
       D=$[$A+
      
        $B]


        
          
            [root@hao 
          
        
      
      
        
          ~]#
        
      
      
        echo
      
      
         $D


      
      
        7
      
      
        
           [root@hao ~]#
        
      
      E=$(($A+
      
        $B))


        
          
            [root@hao 
          
        
      
      
        
          ~]#
        
      
      
        echo
      
      
         $E


      
      
        7
      
      
        
           [root@hao ~]#
        
      
       F=`
      
        expr
      
       $A +
      
         $B`


        
          
            [root@hao 
          
        
      
      
        
          ~]#
        
      
      
        echo
      
      
         $F


      
      
        7
      
    

1、整数测试:

  -eq:测试两个整数是否相等 $A -eq $ eB。

      
        
          [root@hao ~]#
        
      
      A=
      
        3
      
      
        
           [root@hao ~]#
        
      
       B=
      
        6
      
      
        
           [root@hao ~]#
        
      
      [ $A -
      
        eq $B ]

[root@hao 
      
      ~]# 
      
        echo
      
       $?


      
        1
      
    

  -ne:测试两个整数是否不等

  -gt:测试一个数是否大于另一个数

  -lt:小于

  -ge:大于等于

  -le:小于或等于

语句间的逻辑关系(短路操作)

  逻辑与、逻辑或

下面代码实现逻辑与,如果用户存在,则第一个语句为TRUE,则执行第二个语句。否则,若用户不存在,即第一个语句为false,则该逻辑与结果必为false,因此第二个语句就不会执行

      
        
          [root@hao ~]#
        
      
      
        id
      
       user1 &> /dev/
      
        null
      
       && 
      
        echo
      
      
        "
      
      
        hello,test true
      
      
        "
      
      
        
           [root@hao ~]#
        
      
      
        id
      
       hao &> /dev/
      
        null
      
       && 
      
        echo
      
      
        "
      
      
        hello,test true
      
      
        "
      
      
        

hello,test 
      
      
        true
      
    

(1)如果用户不存在,则添加用户(用逻辑与、逻辑或两种方法实现)

      
        
          [root@hao ~]#
        
      
      
        id
      
      
         user2


      
      
        id
      
      
        : user2: No such user


        
          
            [root@hao 
          
        
      
      
        
          ~]#
        
      
      
        id
      
       user2 &> /dev/
      
        null
      
       ||
      
         useradd user2


        
          
            [root@hao 
          
        
      
      
        
          ~]#
        
      
      
        id
      
      
         user2

uid
      
      =
      
        5002
      
      (user2) gid=
      
        5002
      
      (user2) 
      
        groups
      
      =
      
        5002
      
      
        (user2)


        
          
            [root@hao 
          
        
      
      
        
          ~]#
        
      
      
        id
      
      
         user3


      
      
        id
      
      
        : user3: No such user


        
          
            [root@hao 
          
        
      
      
        
          ~]#
        
      
      ! 
      
        id
      
       user3 &> /dev/
      
        null
      
       &&
      
         useradd user3


        
          
            [root@hao 
          
        
      
      
        
          ~]#
        
      
      
        id
      
      
         user3

uid
      
      =
      
        5003
      
      (user3) gid=
      
        5003
      
      (user3) 
      
        groups
      
      =
      
        5003
      
      (user3)
    

 (2) 如果一个文件的行数大于100,则显示该文件为大文件,否则显示为小文件

      #!/bin/
      
        bash

LINES
      
      =$(
      
        wc
      
       -l /etc/
      
        inittab)


      
      
        echo
      
      
         $LINES

FINLINES
      
      =`
      
        echo
      
       $LINES |
      
        cut
      
       -d
      
        '
      
      
        '
      
       -
      
        f1`


      
      
        echo
      
      
         $FINLINES

[ $FINLINES 
      
      -gt 
      
        100
      
       ]&& 
      
        echo
      
      
        "
      
      
        etc/inittab is a big file
      
      
        "
      
       || 
      
        echo
      
      
        "
      
      
        etc/inittab is a small file
      
      
        "
      
    

执行结果为:

      
        26
      
       /etc/
      
        inittab


      
      
        26
      
      
        

etc
      
      /inittab is a small 
      
        file
      
    

(3)如果用户存在,则显示该用户,如果用户不存在,则添加此用户

      
        
          [root@hao ~]#
        
      
      
        id
      
       user1 && 
      
        echo
      
      
        "
      
      
        user1 exits.
      
      
        "
      
       ||
      
         useradd user1

uid
      
      =
      
        5001
      
      (user1) gid=
      
        5001
      
      (user1) 
      
        groups
      
      =
      
        5001
      
      
        (user1)

user1 exits.
      
    

(4)如果用户不存在,则添加用户并添加密码,如果存在,则显示用户已存在

      
        
          [root@hao ~]#
        
      
      ! 
      
        id
      
       user1 && useradd user1 && 
      
        echo
      
      
        "
      
      
        user1
      
      
        "
      
       | 
      
        passwd
      
       --stdin user1 || 
      
        echo
      
      
        "
      
      
        user1 exits
      
      
        "
      
      
        

uid
      
      =
      
        5001
      
      (user1) gid=
      
        5001
      
      (user1) 
      
        groups
      
      =
      
        5001
      
      
        (user1)

user1 exits
      
    

(5)给定一个用户,如果其UID为0,则显示为管理员,否则显示为普通用户

      
        
          [root@hao ~]#
        
      
       nano third.
      
        sh
      
      
        
           [root@hao ~]#
        
      
      
        cat
      
       third.
      
        sh
      
      
        

#
      
      !/bin/
      
        bash

NAME
      
      =
      
        user1

USERID
      
      =`
      
        id
      
       -
      
        u $NAME`

[ $USERID 
      
      -eq 
      
        0
      
       ] && 
      
        echo
      
      
        "
      
      
        Admin
      
      
        "
      
       || 
      
        echo
      
      
        "
      
      
        Common user
      
      
        "
      
      
        .


        
          
            [root@hao 
          
        
      
      
        
          ~]#
        
      
      
        chmod
      
       +x third.
      
        sh
      
      
        
           [root@hao ~]#
        
      
       ./third.
      
        sh
      
      
        

Common user.
      
    

  2、文件测试

  -e file :测试文件是否存在

  -f file :测试文件是否为普通文件

  -d file:测试指定路径是否为目录

  -r file:测试指定文件对当前用户是否可读

  -w file: 测试指定文件对当前用户是否可写

  -x file: 测试指定文件对当前用户是否可执行

(1)判断一个文件是否存在

      #!bin /
      
        bash

FILE
      
      =/etc/
      
        inittab


      
      
        if
      
       [ ! -
      
        e $FILE ]


      
      
        then
      
      
        echo
      
      
        "
      
      
        no file
      
      
        "
      
      
        

    exit 
      
      
        8
      
      
        fi
      
    

(2)给定一个文件,如果不存在,则退出脚本,如果存在且该文件为普通文件或者目录就显示之,否则,

      #!/bin/
      
        bash

FILE
      
      =/etc/rc.d/
      
        rc.sysinit




      
      
        if
      
       [ ! -
      
        e $FILE ]


      
      
        then
      
      
        echo
      
      
        "
      
      
        no file
      
      
        "
      
      
        

    exit 
      
      
        6
      
      
        fi
      
      
        if
      
       [ -
      
        f $FILE  ]


      
      
        then
      
      
        echo
      
      
        "
      
      
        common file
      
      
        "
      
      
        elif
      
       [ -
      
        d $FILE ]


      
      
        then
      
      
        echo
      
      
        "
      
      
        directory
      
      
        "
      
      
        else
      
      
        echo
      
      
        "
      
      
        unknown
      
      
        "
      
      
        fi
      
    

二、条件判断控制结构                                                    

1、单分支if语句:

if 判断条件

then

  statement1

  statement2

  ...

fi

2、双分支的if语句

if 判断语句

then

  statement1

  statement2

else

  statement3

  statement4

fi

3、多分支的if语句

if 判断条件1

then

  statement1

  ...

elif 判断条件2

then

  statement2

  ...

elif 判断条件3

then

  statement3

  ...

else

  statement4

  ...

fi

4、测试

(1)如果用户存在,输出用户存在,否则创建用户名和密码为用户名的密码。

      
        
          [root@hao ~]#
        
      
       nano fourth.
      
        sh
      
      
        
           [root@hao ~]#
        
      
      
        cat
      
       fourth.
      
        sh
      
      
         

#
      
      !/bin/
      
        bash

NAME
      
      =
      
        user4


      
      
        if
      
      
        id
      
       $NAME &> /dev/
      
        null
      
      
        then
      
      
        echo
      
      
        "
      
      
        $NAME exists
      
      
        "
      
      
        else
      
      
        

    useradd $NAME

    
      
      
        echo
      
       $NAME | 
      
        passwd
      
       --stdin $NAME &> /dev/
      
        null
      
      
        echo
      
      
        "
      
      
        add user successful
      
      
        "
      
      
        fi
      
      
        
           [root@hao ~]#
        
      
      
        chmod
      
       +x fourth.
      
        sh
      
      
        
           [root@hao ~]#
        
      
       ./fourth.
      
        sh
      
      
         

add user successful


        
          
            [root@hao 
          
        
      
      
        
          ~]#
        
      
       ./fourth.
      
        sh
      
      
         

user4 exists
      
    

(2)判断一个用户是否是管理员

      
        
          [root@hao ~]#
        
      
      nano fifth.
      
        sh
      
      
        
           [root@hao ~]#
        
      
      
        cat
      
       fifth.
      
        sh
      
      
         

#
      
      !/bin/
      
        bash

NAME
      
      =
      
        user1


      
      
        if
      
       [ `
      
        id
      
       -u $NAME ` -eq 
      
        0
      
      
         ]


      
      
        then
      
      
        echo
      
      
        "
      
      
        Admin
      
      
        "
      
      
        else
      
      
        echo
      
      
        "
      
      
        Common
      
      
        "
      
      
        fi
      
      
        
           [root@hao ~]#
        
      
      
        chmod
      
       +x fifth.
      
        sh
      
      
        
           [root@hao ~]#
        
      
       ./fifth.
      
        sh
      
      
         

Common
      
    

(3)判断当前系统上是否有用户的默认shell为bash,如果有,就显示有多少个这类用户,否则,就显示没有这类用户

      
        
          [root@hao ~]#
        
      
       nano sixth.
      
        sh
      
      
        
           [root@hao ~]#
        
      
      
        cat
      
       sixth.
      
        sh
      
      
         

#
      
      !/bin/
      
        bash


      
      
        grep
      
      
        "
      
      
        \<bash$
      
      
        "
      
       /etc/
      
        passwd
      
       &> /dev/
      
        null
      
      
        

RETVAL
      
      =$?


      
        if
      
       [ $RETVAL -eq 
      
        0
      
      
         ]


      
      
        then
      
      
         

    USERS
      
      =`
      
        grep
      
      
        "
      
      
        \<bash$
      
      
        "
      
       /etc/
      
        passwd
      
       | 
      
        wc
      
       -
      
        l`

    
      
      
        echo
      
      
        "
      
      
        $USERS users has shell of bash
      
      
        "
      
      
        else
      
      
        echo
      
      
        "
      
      
        no such users
      
      
        "
      
      
        fi
      
      
        
           [root@hao ~]#
        
      
      
        chmod
      
       +x sixth.
      
        sh
      
      
        
           [root@hao ~]#
        
      
      ./sixth.
      
        sh
      
      
        12
      
       users has shell of bash
    

(4)上题基础上,如果存在上述用户,显示其中一个的用户名,否则显示没有此类用户

      
        
          [root@hao ~]#
        
      
      nano seventh.
      
        sh
      
      
        
           [root@hao ~]#
        
      
      
        cat
      
       seventh.
      
        sh
      
      
         

#
      
      !/bin/
      
        bash


      
      
        grep
      
      
        "
      
      
        \<bash$
      
      
        "
      
       /etc/
      
        passwd
      
       &> /dev/
      
        null
      
      
        

RETVAL
      
      =$?


      
        if
      
       [ $RETVAL -eq 
      
        0
      
      
         ]


      
      
        then
      
      
         

    AUSER
      
      =`
      
        grep
      
      
        "
      
      
        \<bash$
      
      
        "
      
       /etc/
      
        passwd
      
       | 
      
        head
      
       -
      
        1
      
       | 
      
        cut
      
       -d: -
      
        f1`

    USERS
      
      =`
      
        grep
      
      
        "
      
      
        \<bash$
      
      
        "
      
       /etc/
      
        passwd
      
       | 
      
        wc
      
       -
      
        l`

    
      
      
        echo
      
      
        "
      
      
        One of the $USERS is $AUSER
      
      
        "
      
      
        else
      
      
        echo
      
      
        "
      
      
        no such users
      
      
        "
      
      
        fi
      
      
        
           [root@hao ~]#
        
      
      
        chmod
      
       +x seventh.
      
        sh
      
      
        
           [root@hao ~]#
        
      
      ./seventh.
      
        sh
      
      
         

One of the 
      
      
        12
      
       is root
    

(5)给定一个用户,判断其UID与GID是否一样,如果一样,就显示此用户为“good guy”;否则,就显示此用户为“bad guy”

      #!/bin/
      
        bash

USERNAME
      
      =
      
        user1

USERID
      
      =`
      
        id
      
       -
      
        u $USERNAME`

GROUPID
      
      =`
      
        id
      
       -
      
        g $USERNAME `


      
      
        if
      
       [ $USERID-
      
        eq $GROUPID]


      
      
        then
      
      
        echo
      
      
        "
      
      
        good guy
      
      
        "
      
      
        else
      
      
        echo
      
      
        "
      
      
        bad guy
      
      
        "
      
      
        fi
      
    

 三、测试脚本                                                              

测试脚本是否有语法错误

      bash -n 
      
        file.sh
      
    

单步执行脚本

      bash -x 
      
        file
      
      .
      
        sh
      
    

四、定义退出状态码                                                       

exit:退出脚本

exit #

如果脚本没有明确定义退出状态吗,那么最后执行的一条命令的退出码即为脚本的退出码

 

 

 

 

 

 

 

 

 

 

 

 

《鸟哥的Linux私房菜》学习笔记(9)——条件判断


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论