Bash脚本如何实现curl状态码与读取的输入值同行输出
脚本调整方案
现有脚本运行后仅输出HTTP状态码的核心原因:
- 循环内只把curl的返回值直接输出到结果文件,没有将逐行读取的文件内容和状态码做同字符串拼接
- curl的输出自带换行控制,没有和读取的行值做格式对齐
具体调整内容:
- 将curl的返回结果存入临时变量,不再直接输出到stdout;修改
-w参数移除自带的\n,拿到纯HTTP状态码 - 用
echo把逐行读取的输入值、逗号、状态码拼接成完整行后再输出,保证每条记录占单独一行
修改完成的可运行脚本:
#!/bin/bash input="test.txt" while IFS= read -r line ; do http_code=$(curl -o /dev/null -s -w "%{http_code}" -u username:token "https://website.com/api/user$line") echo "${line},${http_code}" done < "$input" > result.txt
调整后result.txt的输出效果完全匹配预期:
value1,400 value2,200 value3,200
注意:如果输入文件最后一行没有末尾换行,可能出现最后一行读取遗漏的情况,可将while判断逻辑调整为
while IFS= read -r line || [ -n "$line" ]做兜底兼容。
内容的提问来源于stack exchange,提问作者Taieb
相关产品推荐
相关产品推荐

