如何编写Bash脚本解析cookie_jar文件提取Cookie键值对并修复执行报错
错误根因
- Bash 变量名仅允许包含字母、数字、下划线,你使用包含
~的字符串作为变量名,触发语法解析错误,这是你看到报错的核心原因。 - Netscape HTTP Cookie 文件使用制表符作为字段分隔符,你将 awk 分隔符设为空格,会出现字段提取错位的问题。
- 硬编码 Cookie 名称的写法可维护性差,Cookie 增减时需要同步修改脚本。
可用脚本
场景1:输出标准HTTP请求头格式Cookie(格式:name1=value1; name2=value2,最常用)
#!/bin/bash # 提取cookie_jar中所有有效Cookie并拼接为请求头格式单行 cookie_str=$(awk ' BEGIN { FS="\t" } /^#/ { next } { printf "%s=%s; ", $6, $7 } ' cookie_jar | sed 's/; $//') echo "$cookie_str"
场景2:仅输出所有Cookie值,用空格分隔为单行
#!/bin/bash awk ' BEGIN { FS="\t" } /^#/ { next } { printf "%s ", $7 } ' cookie_jar | sed 's/ $//'
固定Cookie输出顺序版本
如果你必须和原脚本一样保持固定的Cookie输出顺序,可以用下面的写法,规避变量名非法问题:
#!/bin/bash get_cookie_val() { awk -v key="$1" ' BEGIN { FS="\t" } /^#/ { next } $6 == key { print $7; exit } ' cookie_jar } TS21xx72R2=$(get_cookie_val "TS21xx72R2") BUILD0=$(get_cookie_val "BUILD0") TS01dda1cb=$(get_cookie_val "TS01dda1cb") BIGipCookie=$(get_cookie_val "BIGipS~NP_QA_QF~LQAS0_7011") UserxxxId=$(get_cookie_val "UserxxxId") echo "$TS21xx72R2 $UserxxxId $TS01dda1cb $BIGipCookie $BUILD0"
内容的提问来源于stack exchange,提问作者Mohd Rashid
相关产品推荐
相关产品推荐

