15、bash脚本编程之二 条件判断及算术运算

15.1 条件判断:

        如果用户不存在

                添加用户,给密码并显示添加成功;

        否则

                显示如果已经没在,没有添加;

条件判断,控制结构:

1、单分支if语句

        if 判断条件; then

                statement1

                statement2

                ...

        fi

        双分支的if语句:

        if 判断条件; then

                statement1

                statement2

                ...

        else

                statement3

                statement4

                ...

        fi

2、多分支的if语句:

        if 判断条件1; then

                statement1

                ...

        elif 判断条件2; then

                statement2

                ...

        elif 判断条件3; then

                statement3

                ...

        else

                statement4

                ...

        fi

15.2 bash中如何实现条件判断?

1、实现方法:

        1、查看状态返回值

2、条件测试类型:

        1、整数测试:判断整数是否正确

        2、字符测试

        3、文件测试

3、条件测试的表达式:

        1、[ expression ]

        2、[[ expression ]]

        3、test expression

4、整数比较:

        -eq: 测试两个整数是否相等;比如 $A -eq $B

        -ne: 测试两个整数是否不等;不等,为真;相等,为假;

        -gt: 测试一个数是否大于另一个数;大于,为真;否则,为假;

        -lt: 测试一个数是否小于另一个数;小于,为真;否则,为假;

        -ge: 大于或等于

        -le:小于或等于

        [root@Daniel-R480 ~]# A=3

        [root@Daniel-R480 ~]# B=6

        [root@Daniel-R480 ~]# [$A -eq $B]

        -bash: [3: command not found

        [root@Daniel-R480 ~]# [ $A -eq $B]

        -bash: [: missing `]'

        [root@Daniel-R480 ~]# [ $A -eq $B ]

        [root@Daniel-R480 ~]# echo $?

        1

        [root@Daniel-R480 ~]# [ $A -ne $B ]

        [root@Daniel-R480 ~]# echo $?

        0

        [root@Daniel-R480 ~]# [ $A -gt $B ]

        [root@Daniel-R480 ~]# echo $?

        1

        [root@Daniel-R480 ~]# [ $A -lt $B ]

        [root@Daniel-R480 ~]# echo $?

        0

        [root@Daniel-R480 ~]# [ $A -ge $B ]

        [root@Daniel-R480 ~]# echo $?

        1

        [root@Daniel-R480 ~]# [ $A -le $B ]

        [root@Daniel-R480 ~]# echo $?

        0

        [root@Daniel-R480 ~]#

5、命令的间逻辑关系:

        (1)逻辑与: &&

                第一个条件为假时,第二条件不用再判断,最终结果已经有;

                第一个条件为真时,第二条件必须得判断;

                [root@Daniel-R480 ~]# id user1 &>/dev/null && echo "hello student"

                hello student

                [root@Daniel-R480 ~]# id user3 &>/dev/null && echo "hello student"

                [root@Daniel-R480 ~]# useradd user3

                [root@Daniel-R480 ~]# id user3 &>/dev/null && echo "hello student"

                hello student

                [root@Daniel-R480 ~]#

        (2)逻辑或: ||

如果用户user6不存在,就添加用户user6

        ! id user6 && useradd user6

        id user6 || useradd user6

        [root@Daniel-R480 ~]# id user6 || useradd user6

        id: user6: no such user

        [root@Daniel-R480 ~]# id user6 || useradd user6

        uid=10019(user6) gid=10019(user6) groups=10019(user6)

        [root@Daniel-R480 ~]# id user6 || useradd user6

        uid=10019(user6) gid=10019(user6) groups=10019(user6)

        [root@Daniel-R480 ~]# id user6 &>/dev/null || useradd user6

        [root@DanielR480 ~]# (id user6 &>/dev/null || useradd user6)&& echo 'hello user6'

        hello user6

        [root@Daniel-R480 ~]#

如果/etc/inittab文件的行数大于100,就显示好大的文件;

[ `wc -l /etc/inittab | cut -d' ' -f1` -gt 100 ] && echo "Large file."

6、变量名称定义规范:

        1、只能包含字母、数字和下划线,并且不能数字开头;

        2、不应该跟系统中已有的环境变量重名;

        3、最好做到见名知义;

如果用户存在,就显示用户已存在;否则,就添加此用户;

id user1 && echo "user1 exists." || useradd user1

如果用户不存在,就添加;否则,显示其已经存在;

! id user1 && useradd user1 || echo "user1 exists."

如果用户不存在,添加并且给密码;否则,显示其已经存在;

! id user1 && useradd user1 && echo "user1" | passwd --stdin user1      || echo "user1 exists."

练习,写一个脚本,完成以下要求:

1、添加3个用户user1, user2, user3;但要先判断用户是否存在,不存在而后再添加;

2、添加完成后,显示一共添加了几个用户;当然,不能包括因为事先存在而没有添加的;

3、最后显示当前系统上共有多少个用户;

练习,写一个脚本,完成以下要求:

给定一个用户:

        1、如果其UID为0,就显示此为管理员;

        2、否则,就显示其为普通用户;

如果其UID为0

  显示为管理员

否则

  显示为普通用户

        NAME=user16

        USERID=`id -u $NAME`

        if [ $USERID -eq 0 ]; then

        echo "Admin"

        else

        echo "common user."

        fi

        NAME=user16

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

        echo "Admin"

        else

        echo "common user."

        fi

        if id $NAME; then

练习:写一个脚本

判断当前系统上是否有用户的默认shell为bash;

   如果有,就显示有多少个这类用户;否则,就显示没有这类用户;

        #!/bin/bash

        #grep "bash$" /etc/passwd &> /dev/null

        grep "xsh$" /etc/passwd &> /dev/null

        RETVAL=$?

        if [ $RETVAL -eq 0 ];then

        #COUNT=`grep "bash$" /etc/passwd | wc -l`

        #echo $COUNT

        echo `grep "bash$" /etc/passwd | wc -l`

        else

        echo "There is no such users."

        fi

        不能如此执行:if grep "bash$" /etc/passwd &> /dev/null; then

提示:“引用”一个命令的执行结果,要使用命令引用;比如: RESAULTS=`wc -l /etc/passwd | cut -d: -f1`;

      使用一个命令的执行状态结果,要直接执行此命令,一定不能引用;比如: if id user1一句中的id命令就一定不能加引号;

          如果想把一个命令的执行结果赋值给某变量,要使用命令引用,比如USERID=`id -u user1`;

      如果想把一个命令的执行状态结果保存下来,并作为命令执行成功与否的判断条件,则需要先执行此命令,而后引用其状态结果,如

                id -u user1

                RETVAL=$?

                此句绝对不可以写为RETVAL=`id -u user1`;

练习:写一个脚本

判断当前系统上是否有用户的默认shell为bash;

   如果有,就显示其中一个的用户名;否则,就显示没有这类用户;

        #!/bin/bash

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

        #grep "xsh$" /etc/passwd &> /dev/null

        RETVAL=$?

        if [ $RETVAL -eq 0 ];then

        #COUNT=`grep "bash$" /etc/passwd | wc -l`

        #echo $COUNT

        #echo `grep "bash$" /etc/passwd | wc -l`

        echo `grep "bash$" /etc/passwd | head -1 | cut -d':' -f1`

        else

        echo "There is no such users."

        fi

        fi

Comments Closed.