shell脚本 条件测试

条件测试,可以使脚本拥有更高的智能

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值