一.条件测试
1.对字符串进行测试
语法格式1, test 表达式 2, [ 表达式 ]
== 两边是否相等,相等时条件测试算成功 != 两边是否不等,不相等时条件测试算成功
test a == a //方式一:test ,使用常量判断,再用echo $?测试结果test a == b[ a == a ] //方式二:中括号,使用常量判断,再用echo $?测试结果[ a == b ]a=abcb=xyz[ $a == $b ] //使用变量判断两个变量的值是否相等[ $a != $b ] //使用变量判断两个变量的值是否不相等[ "$c" == $b ] //如果变量为空,有可能报错,加双引号可以避免-z[ -z $a ] //判断变量是否为空,为空时条件测试算成功[ ! -z $a ] //判断变量是否非空,非空时条件测试算成功
2.逻辑组合
条件 && 指令 条件成功才执行指令
条件 || 指令 条件失败才执行指令
[ root == $USER ] || exit //判断当前用户名是否为root如果判断失败,则执行exit[ $USER != root ] && exit //判断当前用户名是否不为root如果判断成功,则执行exit当多个逻辑符号组合使用时A && B A、B任务都成功算成功A || B A、B 任务有一个成功算成功touch a b cls a && ls b && ls c //结果是都显示ls a || ls b || ls c //结果是显示als a && ls b || ls c //结果是显示a和bls a || ls b && ls c //结果是显示a和c[ root != $USER ] && echo "非管理员不能执行该脚本" && exit //之前的语句可以改进成这个方式
3.数字
-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分钟检查服务器的用户数量,如果发生变化则发邮件通知管理员yum -y install mailx postfix //安装邮件客户端软件和服务端程序systemctl restart postfix //启动邮件服务如果改过主机名,需要将在/etc/hosts文件第二行的末尾加空格主机名echo "测试" | mail -s test root //编写脚本前,测试下邮件功能是否正常 ,mail -s是发送邮件,test是标题,root是给谁发,echo后面写要发送的邮件内容使用上述命令发邮件,再敲mail命令打开邮件列表即可看到邮件,按邮件列表对应的数字回车可以查看邮件内容,q是退出如果邮件太多可以删除/var/spool/mail/root文件清空邮箱#!/bin/bashx=$(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分钟执行脚本
4.文件
-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/bashif [ $UID -eq 0 ];thenecho "我是管理员"echo okfi
2.双分支 格式
if 条件测试;then //满足条件的话就执行下面指令 执行指令A //指令可以是一条,也可以是多条 else //否则,不满足条件的话就执行下面指令 执行指令B fi
#!/bin/bashif [ $UID -eq 0 ];thenecho "我是管理员"echo okelseecho "我不是管理员"echo nofi------------------------------------------------ping -c 3 -i 0.2 -W 1 192.168.2.254 // -c 定义ping的次数 -i 定义ping的间隔时间(秒) -W ping失败时多久反馈结果-------------------------------------------------使用if双分支编写ping脚本#!/bin/bashping -c 3 -i 0.2 -W 1 $1 &> /dev/null //使用$1位置变量更方便if [ $? -eq 0 ];thenecho "通了!"elseecho "不通!"fi
3.多分支
if 条件测试;then //满足条件的话就执行下面A指令 执行指令A //指令可以是一条,也可以是多条 elif 条件测试;then //满足条件的话就执行下面B指令 执行指令B elif 条件测试;then //满足条件的话就执行下面C指令 执行指令C else //否则,不满足条件的话就执行下面指令 执行指令 fi
#!/bin/bashread -p "询问内容" xif [ $x -eq 1 ];thenecho "情况一"elif [ $x -eq 2 ];thenecho "情况二"elif [ $x -eq 3 ];thenecho "情况三"elseecho "情况四"fi
