条件测试,可以使脚本拥有更高的智能
test a == a 判断 字符串a是否等于a
echo $? 查看结果,0为判断成功, 非0为失败
test a == b
echo $?
[ a == a ] 另一种格式,效果同上,字符串两边有空格
echo $?
[ a == b ]
echo $?
[ $USER == root ] 判断当前用户名是否叫root
echo $? 查看结果
[ a != b ] 判断a是否不等于b
[ -z $a ] 判断 变量a是否为空
echo $? 如果为空,输出0
[ $a == b ] 判断变量a是否等于b,如果变量a为空会报错
[ "$a" == b ] 解决上述问题
echo $?
[ ! -z $a ] 判断变量a是否非空
echo $?
逻辑组合
&& 之前命令成功才执行之后命令
|| 之前命令失败才执行之后命令
当使用2个逻辑符号时:
&& 前后任务都成功才算成功
|| 前后有一个任务成功就算成功
ls && ls && ls
ls || ls || ls
ls && ls || ls
ls || ls && ls
[ $USER == root ] && echo "ok" || echo "no"
[ a == a ] && echo "相等" || echo "不等"
a=
[ -z $a ] && echo "为空" || echo "非空"
---------------------------------------------------------------
2,数字的条件测试
-eq 等于
-ne 不等于
-ge 大于等于
-gt 大于
-le 小于等于
-lt 小于
[ 10 -le 10 ] && echo "ok" || echo "no"
[ 10 -gt 11 ] && echo "ok" || echo "no"
每隔2分钟检查主机的登录账户数量,如果超过3人,则发邮件给管理员报警
#!/bin/bash
x=`who |wc -l`
[ $x -gt 3 ] && echo "有人入侵服务器~!" | mail -s test root
chmod +x test01.sh
crontab -e
*/2 * * * * /opt/test01.sh
rm -rf /var/spool/mail/root 可以先删除所有邮件
mail 查看邮箱
--------------------------------------------------
3,对文件进行测试
-e 文件是否存在
-d 文件是否存在,且是目录
-f 文件是否存在,且是普通文件
-r 当前用户对文件是否有读权限
-w 当前用户对文件是否有写权限
-x 当前用户对文件是否有执行权限
[ -e /opt/123 ] 测试123是否存在,不关心文件类型
echo $?
[ -f /opt/123 ] 测试123是否存在,必须是普通文件
mkdir abc
[ -f /opt/abc ] 测试abc是否存在,必须是普通文件
[ -d /opt/abc ] 测试abc是否存在,必须是目录
[ -r /opt/123 ] 当前用户对123是否能读
[ -w /opt/123 ] 当前用户对123是否能写
[ -x /opt/123 ] 当前用户对123是否能执行
-------------------------------------------------------------------
使用if判断语句
1,单分支
if 条件测试;then
执行指令1
执行指令2
...
fi
2,双分支
if 条件测试1;then
执行指令1
else
执行指令2
fi
3,多分支
if 条件测试1;then
执行指令1
elif 条件测试2;then
执行指令2
else
执行指令n
fi
-----------------------------------------------------------------------
利用if双分支判断ping的结果
ping工具选项 -c 设置ping次数
-i 设置ping间隔时间(秒)
-W 设置不通时的反馈时间(秒)
#!/bin/bash
ping -c 3 -i 0.2 -W 1 172.25.0.12 &> /dev/null
if [ $? -eq 0 ];then
echo "通了"
else
echo "不通"
fi
-----------------------------------------------------------------
for循环
#!/bin/bash
a=10
for i in `seq $a`
do
echo $i
done
----------------------------------------------------------------------
#!/bin/bash
x=0
y=0
for i in {1..15}
do
ping -c 3 -i 0.2 -W 1 172.25.0.$i &> /dev/null
if [ $? -eq 0 ];then
echo "172.25.0.$i通了"
let x++
else
echo "172.25.0.$i不通"
let y++
fi
done
echo "$x台通了,$y台不通"
-------------------------------------------------------------------
while循环,可以实现无限次循环
#!/bin/bash
while :
do
echo 123
sleep 0.1
done
---------------------------------------------------------------------
#!/bin/bash
x=$[RANDOM%100]
while :
do
read -p "请输入一个数字(0-99)" n
if [ $x -eq $n ];then
echo "猜对了!"
elif [ $x -lt $n ];then
echo "猜大了"
else
echo "猜小了"
fi
done