Linux逻辑关系
1、bash中如何实现条件判断?
在bash中条件测试类型有以下几种
整数测试、字符测试、文件测试
条件测试表达式:
[ expression ]
[[ expression ]]
2、整数比较:
-eq: 测试两个整数是否相等;比如 $A -eq $B
-ne: 测试两个整数是否不等;不等,为真;相等,为假;
-gt: 测试一个数是否大于另一个数;大于,为真;否则,为假;
-lt: 测试一个数是否小于另一个数;小于,为真;否则,为假;
-ge: 大于或等于
-le:小于或等于
3、命令的时间逻辑关系:
逻辑与:&&
第一个条件为假时,第二条件不用再判断,最终结果已经有;
第一个条件为真时,第二条件必须得判断;
逻辑或: ||
例1:
创建一个用户user1,如果存在就输出,不存在不返回
id user1 &> /dev/null && echo "hello.student"
例2:
如果用户不存在,就添加用户
!mid user1 && usreadd user1
或者id user1 || adduser user1
例3:
如果/etc/inittab文件行数大于100,就显示 大文件
[ `wc -l /etc/inittab | cut -d‘ ‘ -f1` -gt 100 ] && echo "Large file"
如果用户存在,显示存在,否则添加
! id user1 && echo "user exist" || useradd user1
用户不存在,添加并且给以密码,否则,显示 存在
! id user1 && useradd user1 &> /dev/null &&eccho "user1"| passwd --stdin user1 &> /dve/null | echo "users exist"
例4:
根据以下要求写一个脚本:
添加3表用户,但是需先判断用户是否存在,不存在就添加,添加后,显示一共添加了多少几个用户,不包括以前存在的,最后显示当前系统上共有多少系统
#!/bin/bash
! id user1 && useradd user1 &> /dve/null && echo "user1" | passwd --stdin user1 &> /dev/null
! id user2 && useradd user2 &> /dve/null && echo "user2" | passwd --stdin user1 &> /dev/null
! id user31 && useradd user3 &> /dve/null && echo "user3" | passwd --stdin user1 &> /dev/null
USER=`wc -l /etc/passwd | cut -d: -f1`
echo "$USERS users"
给一个用户,如果UID为0,显示admin 否则为 common
#!/bin/bash
NAME=user
USERID=`id -u $NAME`
[ $NAME -eq 0 ] && echo "admin" || echo "common"
4、条件判断:控制结构
单分支if语句
if 判断条件; then
statement1
statement2
...
fi
双分支if语句
if 判断条件;then
statement1
statement2
...
else
statement3
statement4
...
fi
据此改写上面关于UID的脚本:
#!/bin/bash
NAME=usr1
USERID=`id -u $NAME`
if [ $USERID -eq 0 ] ;then
echo "admin"
else
echo "common user."
fi
因为$USERID只引用了1次,所以$USERID可这样
NAME=user1
if [ `id -u $NAME` -eq 0 ];then
echo "admin"
else
echo "common user."
fi