shell脚本编程之条件判断

条件测试类型:

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

条件测试的表达式的三种方法:

1、[ expression ]     命令测试
2、[[ expression ]]   关键字测试
3、test expression

整数比较:

-eq:测试两个整数是否相等;相等为真,不等为假
-ne:测试两个整数是否不等;不等为真,相等为假
-gt:测试一个数是否大于另一个数;大于为真,否则为假
-lt:测试一个数是否小于另一个数;小于为真,否则为假
-ge:大于或等于
-le:小于或等于

命令间的逻辑关系:

!:表示非(取反)
逻辑与:&&
逻辑或:||

CMD1 && CMD2
Example:id aaa && echo "hello aaa"
如果&&前的执行结果是假,总的结果就是假,没必要执行&&后的操作
如果CMD1成功了(真),就可执行CMD2
如果CMD1失败了(假),就不执行CMD2
如果aaa用户存在,则打印hello aaa;如果用户aaa不存在,则不进行打印

CMD1 || CMD2
Example:id aaa || useradd aaa
如果||前的执行结果是真,总的结果就是真,没必要执行||后的操作CMD2
如果CMD1成功了(真),就不执行CMD2
如果CMD1失败了(假),就可执行CMD2
如果用户aaa存在,就不执行创建aaa用户的命令;如果aaa用户不存在,则创建该用户

EXAMPLE:
id aaa && echo user aaa exists || useradd aaa
如果用户aaa存在,打印user aaa exists;如果用户不存在,则创建该用户;&&前如果为真,则整个逻辑与为真,再与后面的命令做逻辑或;
!id aaa && useradd aaa || echo user aaa exists
取反;如果用户不存在,则创建用户;如果用户存在,则打印user aaa exists;
!id bbb &>/dev/null && useradd aaa && echo 123456 | passwd --stdin bbb &>/dev/null || echo "bbb exists"
用户不存在则创建用户并且改密码;用户存在则打印bbb exists;
USERID=`id -u bbb`;[ $USERID -eq 0 ] && echo "admin" || echo "common"
如果bbb用户的uid等于0,打印admin;不等于0,打印common;

条件判断,控制结构:

单分支if语句

if 判断条件;then                        
  statement1
  statement2
  ...
fi

Example1:
#!/bin/bash
NAME=aaa
if id $NAME &>/dev/null;then            #id $NAME取的是命令的执行状态返回值;命令是否执行成功
   echo "$NAME exists"
fi

双分支if语句

if 判断条件;then
  statement1
  statement2
  ...
else
  statement3
  statement4
  ...
fi

Example2:
#!/bin/bash
NAME=aaa
USERID=`id -u $NAME`           #`id -u $NAME`取的是命令的执行结果
if [ $USERID -eq 0 ];then      #做等值判断需要加"[  ]"
   echo "$NAME is admin"       #可以不添加$USERID变量,写为 [ `id -u $NAME` -eq 0 ]
else
   echo "$NAME is common"
fi

Example3:
#!/bin/bash
grep "bash$" /etc/passwd &>/dev/null
if [ $? -eq 0 ];then                          
   AUSER=`grep "bash$" /etc/passwd | head -1 | cut -d: -f1`
   echo "The user is $AUSER"
else
   echo no such user
fi
$?判断上一条命令执行是否成功,如果成功则状态返回值为0;当$?的状态返回值等于0时,那么限制一个用户,否则显示没有这样的用户

Example4:
#!/bin/bash
USERNAME=user2
USERID=`id -u $USERNAME`
GROUPID=`id -g $USERNAME`
if [ $USERID -eq $GROUPID ];then
   echo "good boy"
else
   echo "bad boy"
fi
判断用的UID和GID是否相等,相等显示good boy;不相等显示bad boy

shell中进行算数运算

第一种方法:

[root@localhost ~]# A=2
[root@localhost ~]# B=3
[root@localhost ~]# let C=$A+$B
[root@localhost ~]# echo $C
5

第二种方法:

[root@localhost ~]# A=6
[root@localhost ~]# B=8
[root@localhost ~]# C=$[$A+$B]
[root@localhost ~]# echo $C
14

第三种方法:

[root@localhost ~]# A=1
[root@localhost ~]# B=2
[root@localhost ~]# C=$(($A+$B))
[root@localhost ~]# echo $C
3

第四种方法:

[root@localhost ~]# A=3
[root@localhost ~]# B=3
[root@localhost ~]# C=`expr $A + $B`
[root@localhost ~]# echo $C
6

Example:
[root@localhost ~]# TIMESTAMP=`date +%s`
[root@localhost ~]# let USEDATES=$TIMESTAMP/86400
[root@localhost ~]# echo $USEDATES
18234

exit退出脚本

Example:
#!/bin/bash
USERNAME=user10
if ! grep "$USERNAME" /etc/passwd & >/dev/null;then            #if会自动判断后面命令的状态返回值;0为真,1——255皆为假
   echo "no such $USERNAME"
   exit 1
fi
没有user10用户,打印 no such user10,并且exit退出整个脚本,状态返回值定义为1
posted on 2019-12-04 21:52  An.amazing.rookie  阅读(733)  评论(0编辑  收藏  举报