bash脚本编程之二、条件判断
条件判断:
如果用户不存在
添加用户,给密码并显示添加成功;
否则
显示用户已存在,没有添加
bash中如何实现条件判断?
整数测试
字符测试
文件测试
条件测试的表达式:
[expression]
[[expression]]
test expression
整数比较:
-eq:测试两个整数是否相等;比如 $A -eq $B
-ne:测试两个整数是否不等;不等,为真;相等,为假;
-qt:测试一个数是否大于另一个数;大于为真;否则,为假;
-lt:测试一个数是否小于另一个数;小于为真;否则,为假;
-ge:大于或等于
-le:小于或等于
命令间的逻辑关系:
逻辑与:&&
第一个条件为假时,第二个条件不会再判断,最终结果已经有;
第二个条件为真时,第二个条件必须得判断;
逻辑或:||
如果用户user2不存在,就添加用户 user2
!id user2 && useradd user2
id user2 || useradd user2
变量名称:${VARNAME},括号有时可省略
1、只能包含子母、数字和下划线,并且不能数字开头;
2、不应该跟系统中已有的系统变量重名;
3、最好做到见名知意;
如果用户user1存在,就显示用户已存在;否则,就添加;
id user1 && echo "user1 exists." || useradd user1
如果用户user1不存在,就添加;否则,显示其已经存在;
! id user1 && useradd user1 || echo “user1 exists.”
如果用户user1不存在,添加并且给密码;否则,显示其已经存在;
! id user1 && useradd user1 && echo "user1" | passwd --stdin user1 || echo "user1 exists."
条件判断,控制结构:
单分支if语句
if 判断条件; then
statement1
statement2
...
fi
双分支if语句:
if 判断条件; then
statement1
statement2
else
statement3
statement4
fi
bash脚本编程之三 条件判断及算术运算
练习一:写一个脚本
判断当前系统上是否有用户的默认shell为bash;如果有,就显示有多少个这类用户;否则,就显示没有这类用户;
#!/bin/bash
#
grep '\ /dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
USERS=` grep '\ echo "The shells of $USERS users is bash. "
else
echo "No such user."
fi
练习二:写一个脚本
给定一个文件,比如/etc/inittab
判断这个文件中是否有空白行;
如果有,则显示其空白行数;否则,显示没有空白行。
#!/bin/bash
#
grep '\ /dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
USERS=` grep '\ echo "The shells of $USERS users is bash. "
else
echo "No such user."
fi
练习四:写一个脚本
给定一个用户,获取其密码警告期限;
而后判断用户最近一次修改密码时间距是否已经小于警告期限;
提示:算术运算的方法$[$A-$B]:表示变量A的值减去变量B的值的结果;
如果小于,则显示”Warning“;否则,就显示”OK“.
shell 中如何进行算术运算:
A=3
B=6
1、let 算术运算表达式
let C=$A+$B
2、$[算术运算表达式]
C=$[$A+$B]
3、$((算术运算表达式))
c=$(($A+$B))
4、expr 算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用
c=`expr $A + $B`
#!/bin/bash
W=`grep "wolf" /etc/shadow | cut -d: -f6`
S=`date +%s`
T=`expr $S/86400`
L=`grep "wolf" /etc/shadow | cut -d: -f5`
N=`grep "wolf" /etc/shadow | cut -d: -f3`
SY=$[$L-$[$T-$N]]
if [ $SY -lt $W ]; then
echo "warning"
else
echo "OK"
fi
练习五:写一个脚本
判定命令历史中历史命令的总条目是否大于1000;如果大于,则显示”Some command will gone.“;否则显示”OK“;
#!/bin/bash
#
HI=`history | tail -1 | cut -d' ' -f2`
S=[ $HI -gt 100 ]
if [ $S -eq 0 ]; then
echo "Some command will gone."
else
echo "OK."
fi