上一篇讲了数据有哪些类型,这一篇讲脚本怎么拿这些数据做判断。条件语句就是让代码”自己做决定”的开关:满足条件就干某件事,不满足就跳过或干别的。
安全分析师为什么要会这个?自动化脚本的核心就是判断——状态码是不是异常、登录是不是失败、IP 在不在黑名单。这些全靠条件语句。
先看全景:三个关键字 + 两类运算符
| 部件 | 关键字/符号 | 干什么 |
|---|---|---|
| 起手 | if | 必须有,开启一个条件判断 |
| 再判断 | elif | 前面都不满足时,再试一个新条件(可多个) |
| 兜底 | else | 前面全不满足时执行(可选,最多一个) |
| 比较运算符 | > < >= <= == != | 比较两个值,得出 True / False |
| 逻辑运算符 | and or not | 把多个条件组合起来 |
两条铁律语法(违反就报错),先记住:
- 每个
if/elif/else头部结尾必须有冒号: - 头部下面的”动作”必须缩进(且多行要缩进一致)
条件语句怎么运作
一个条件语句,本质是拿两个值比一比,得出一个布尔值(True / False)。比较用这 6 个运算符:
| 运算符 | 含义 |
|---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
== | 等于(注意是两个等号) |
!= | 不等于 |
==和!=也常用来比字符串。最常见的新手 bug:把”判断相等”的==写成”赋值”的=。
if:条件满足才执行
if 开启判断。下面这段:HTTP 响应状态码等于 200 时,打印 “OK”:
if status == 200:
print("OK")拆成两部分看:
头部(header) —— 第一行 if status == 200:。if 后面跟条件,条件可以加括号 if (status == 200):,效果一样(加不加看可读性)。结尾必须有冒号。
主体(body) —— 冒号下面缩进的部分,告诉 Python 条件为 True 时干什么。这里就是打印 “OK”。主体必须比头部缩进更深,多行动作要缩进一致。
如果 status 不等于 200,条件为 False,这段直接跳过,程序继续往下走。
else:前面都不满足时的兜底
else 引出的代码,只在它前面所有条件都为 False 时才执行:
if status == 200:
print("OK")
else:
print("check other status")状态码不是 200 时,打印 “check other status”。else 同样要冒号 + 缩进,但 else 后面不跟条件(它就是”其他所有情况”)。
elif:多个备选条件
有多个互斥的情况要分别处理时,用 elif(else if 的缩写)。它引出一个新条件,只在前面条件都为 False 时才检查。elif 可以有多个:
if status == 200:
print("OK")
elif status == 400:
print("Bad Request")
elif status == 500:
print("Internal Server Error")
else:
print("check other status")Python 从上往下:先看是不是 200,不是就看是不是 400,还不是就看 500,全不是就走 else。
关键区别:
elifvs 多个if一串elif里,一旦命中一个 True,后面的就不再检查(短路)。 但如果你写成多个独立的if,每个都会被检查一遍。 处理互斥情况(状态码只可能是其中一个)→ 用elif,又快又对。
组合条件:and / or / not
复杂判断需要把多个条件拼起来。
and —— 两个条件都要满足
HTTP 状态码 200~226 都算成功响应。用 and 把”≥200”和”≤226”两个条件连起来,两个都为 True 才打印:
if status >= 200 and status <= 226:
print("successful response")or —— 只要一个满足就行
状态码 100 和 102 都是信息类响应。用 or,任一为 True 就打印:
if status == 100 or status == 102:
print("informational response")not —— 把条件反过来
not 取反:原本 True 变 False,False 变 True。想在状态码不在成功范围时提醒检查:
if not(status >= 200 and status <= 226):
print("check status")Python 先算括号里”status 在 200~226 之间”是否成立,再用 not 翻转——所以当 status 小于 200 或大于 226 时才打印。
这里的括号是必须的,不是可选的。 Python 先算括号内,所以
not(A and B)是对”A 且 B 的整体”取反。如果去掉括号写成not A and B,not只会作用在 A 上,逻辑就全错了。涉及not组合时,养成加括号的习惯。
一段安全脚本里它长什么样
把这些拼起来,一个最朴素的”状态码分流”就成型了——这正是监控脚本、日志分析、API 健康检查的骨架:
if status >= 200 and status <= 226:
print("成功")
elif status == 401 or status == 403:
print("⚠️ 鉴权/权限问题,记下来") # 安全分析师会盯这类
elif status >= 500:
print("服务器错误")
else:
print("其他状态,人工看一眼")把 print 换成”写日志""发告警""加进可疑 IP 集合”,就是真实的自动化响应了。
一句话总结
if 起手、elif 加备选、else 兜底;条件用 6 个比较运算符得出真假,用 and/or/not 组合。两条铁律别忘:头部加冒号、主体要缩进。 当你能让脚本”看到 200 就放行、看到 403 就记一笔、看到 500 就告警”,你就把人工盯屏变成了自动判断——这就是用 Python 自动化安全任务的起点。