条件测试、if语句、for循环

条件测试,可以赋予脚本智能判断的效果

语法格式 1,  test  表达式   2, [  表达式  ]

1,对字符串进行测试

== 两边是否相等,相等时条件测试算成功

!= 两边是否不等,不相等时条件测试算成功

test a == a  //方式一:test ,使用常量判断,再用echo $?测试结果

test a == b 

[ a == a ]   //方式二:中括号,使用常量判断,再用echo $?测试结果

[ a == b ]  

a=abc

a=xyz

[ $a == $b ]  //使用变量判断两个变量的值是否相等

[ $a != $b ]   //使用变量判断两个变量的值是否不相等

[ "$c" == $b ]  //如果变量为空,有可能报错,加双引号可以避免

-z

[ -z $a ]  //判断变量是否为空,为空时条件测试算成功

[ ! -z $a ]  //判断变量是否非空,非空时条件测试算成功

逻辑组合

条件 &&  指令     条件成功才执行指令     

条件 ||   指令     条件失败才执行指令

 

[  root  ==  $USER  ] || exit   //判断当前用户名是否为root

如果判断失败,则执行exit

[  $USER  !=  root  ] && exit  //判断当前用户名是否不为root

如果判断成功,则执行exit

#!/bin/bash
[ $USER == "root" ] || exit
yum -y install vsftpd &> /etc/null
systemctl restart vsftpd
systemctl enable vsftpd

当多个逻辑符号组合使用时

A && B    A、B任务都成功算成功

A || B     A、B 任务有一个成功算成功

[root@localhost opt]# touch a b c
[root@localhost opt]# ls a && ls b && ls c
a
b
c
[root@localhost opt]# ls a || ls b || ls c
a
[root@localhost opt]# ls a && ls b || ls c
a
b
[root@localhost opt]# ls a || ls b && ls c
a
c

[ root != $USER ]  &&  echo "非管理员不能执行该脚本"  && exit  //之前的语句可以改进成这个方式

 

#!/bin/bash
[ root != $USER ] && echo "非管理员不可执行" && exit
yum -y install vsftpd &> /etc/null
systemctl restart vsftpd
systemctl enable vsftpd

 

 

数字

-eq  是否相等    -ne  是否不等    -gt  是否大于

-ge   是否大于等于  -lt  是否小于   -le  是否小于等于

-eq   (Equal)

-ne   (Not Equal)

-ge    (Greater or Equal)

-le     (Less or Equal)

-gt    (Greater Than)

-lt     (Less Than)

 

编写脚本,每2分钟检查服务器的用户数量,如果发生变化

则发邮件通知管理员

echo "测试" | mail -s test root   //编写脚本前,测试下邮件功能是否正常 ,mail -s是发送邮件,test是标题,root是给谁发,echo后面写要发送的邮件内容

使用上述命令发邮件,再敲mail命令打开邮件列表即可看到邮件,按邮件列表对应的数字回车可以查看邮件内容

如果邮件太多可以删除/var/spool/mail/root文件清空邮箱

#!/bin/bash

x=$(cat /etc/passwd | wc -l)   //将目前用户数量赋值给变量x

[ $x -gt 29 ] && echo "用户数量发生变化,服务器可能被入  

侵" | mail -s test root       //如果目前用户数量大于29,就

发邮件给管理员,29是之前查看的用户数量

chmod  u+x  test01.sh   //然后给脚本加x权限

crontab  -e     //编写计划任务

*/2 * * * * /opt/test01.sh    //定义每2分钟执行脚本

 

 

  1. 文件

-e  判断文件是否存在,不关心类型

-f  判断文件是否存在,必须是普通文件

-d  判断文件是否存在,必须是目录

-r  判断当前用户对文件是否有读权限,对root无效

-w 判断当前用户对文件是否有写权限,对root无效

-x  判断当前用户对文件是否有x权限

[ -e abc ]   //判断当前目录下的abc是否存在,用echo $?查结果

[ -f /opt/abc ]   //判断opt下有没有abc这个普通文件

[ -d /opt/abc ]  //判断opt下有没有abc这个目录

mkdir  xyz

[ -d /opt/xyz ]   //判断opt下有没有xyz这个目录

[ -r /opt/abc ]   //判断当前用户对abc是否有读权限

[ -w /opt/abc ]   //判断当前用户对abc是否有写权限

[ -x /opt/abc ]   //判断当前用户对abc是否有x权限

 

==  !=  -z   ! -z
&&        ||
-eq  -ne  -gt  -ge   -lt  -le
-e  -f  -d  -r  -w  -x

if分支

  1. 单分支

if 条件测试;then    //满足条件的话就执行下面指令

执行指令

fi

#!/bin/bash
if [ $UID -eq 0 ];then
echo "管理员"
echo "无敌"
fi

 

  1. 双分支

if 条件测试;then    //满足条件的话就执行下面指令

执行指令A   //指令可以是一条,也可以是多条

else     //否则,不满足条件的话就执行下面指令

执行指令B

fi

#!/bin/bash
if [ $UID -eq 0 ];then
echo "管理员"
echo "无敌"
else
echo "无权执行"
fi

ping  -c  3  -i  0.2  -W  1  192.168.2.254

// -c 定义ping的次数   -i 定义ping的间隔时间(秒)

-W  ping失败时多久反馈结果

使用if双分支编写ping脚本 

#!/bin/bash
ping -c 2 -i 0.2 -W 1 192.168.4.110 &> /dev/null
if [ $? -eq 0 ];then
echo "通"
else
echo "不通"
fi

 这里Ping的是自己的主机地址


 修改地址后:

 

 

多分支

if 条件测试;then    //满足条件的话就执行下面A指令

执行指令A   //指令可以是一条,也可以是多条

elif 条件测试;then    //满足条件的话就执行下面B指令

执行指令B

elif 条件测试;then    //满足条件的话就执行下面C指令

执行指令C

else     //否则,不满足条件的话就执行下面指令

执行指令

fi

#!/bin/bash
read -p "过年花了几天时间学习?"  x
if [ $x -eq 9 ];then
echo "NB!"
elif [ $x -ge 5 ];then
echo "YBB!"
elif [ $x -ge 2 ];then
echo "BB!"
else
echo "回家吧!"
fi
~

 

循环,可以反复执行某任务

for循环,可以定义循环次数

for 变量名称 in 值1  值2  值3 。。。。  //此处变量名可以自定义,通常习惯

用i,值的多少决定了下面do与done之间的任务执行多少次,每个值之间有空

格,这里是有3个值,所以就循环执行指令3次

do

任务

done

 

vim name.txt
tom
t1
t2
t3
t4
t5
t6
t7
t8
t9
t0


---------------------------------------------------------------------------------------



vim test06.sh

#!/bin/bash
for i in $(cat name.txt)
do
useradd $i
done

 批量测试ip地址通不通:

#!/bin/bash
for i in {101..110}
do
ping -c 2 -i 0.2 -W 1 192.168.4.$i &> /dev/null
if [ $? -eq 0 ];then
echo "192.168.4.$i通"
else
echo "192.168.4.$i不通"
fi
done

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值