在Bash脚本中强制校验AWS CLI最低版本,有无更优方案?
检查AWS CLI最低版本的可靠方法
如果不想解析aws --version的纯文本输出,有两种更稳定的实现方式:
1. 使用aws --version的JSON输出(推荐兼容多数v2版本)
AWS CLI v2支持通过--output json参数输出结构化的版本信息,相比纯文本,JSON格式的结构更稳定,不会因平台或小版本更新轻易变动。示例脚本:
# 定义最低要求版本 REQUIRED_MAJOR=2 REQUIRED_MINOR=10 REQUIRED_PATCH=0 # 获取JSON格式的版本信息(aws --version默认输出到stderr,所以需要2>&1重定向) AWS_VERSION_JSON=$(aws --version --output json 2>&1) # 解析主、次、补丁版本号 CURRENT_MAJOR=$(echo "$AWS_VERSION_JSON" | grep -o '"Major": [0-9]*' | cut -d' ' -f2) CURRENT_MINOR=$(echo "$AWS_VERSION_JSON" | grep -o '"Minor": [0-9]*' | cut -d' ' -f2) CURRENT_PATCH=$(echo "$AWS_VERSION_JSON" | grep -o '"Patch": [0-9]*' | cut -d' ' -f2) # 版本校验逻辑 if [ "$CURRENT_MAJOR" -gt "$REQUIRED_MAJOR" ] || \ [ "$CURRENT_MAJOR" -eq "$REQUIRED_MAJOR" -a "$CURRENT_MINOR" -gt "$REQUIRED_MINOR" ] || \ [ "$CURRENT_MAJOR" -eq "$REQUIRED_MAJOR" -a "$CURRENT_MINOR" -eq "$REQUIRED_MINOR" -a "$CURRENT_PATCH" -ge "$REQUIRED_PATCH" ]; then echo "AWS CLI版本满足要求" else echo "错误:需要AWS CLI至少$REQUIRED_MAJOR.$REQUIRED_MINOR.$REQUIRED_PATCH版本,当前版本为$CURRENT_MAJOR.$CURRENT_MINOR.$CURRENT_PATCH" exit 1 fi
2. 使用专门的aws cli get-version命令(仅v2.15.0+可用)
从AWS CLI v2.15.0开始,官方提供了aws cli get-version命令,直接返回结构化的版本数据,且输出到stdout,无需处理stderr重定向。如果你的环境版本足够新,这个方法更简洁:
# 定义最低要求版本 REQUIRED_MAJOR=2 REQUIRED_MINOR=15 REQUIRED_PATCH=0 # 获取版本信息(需要jq工具解析JSON,若没有jq可替换为awk/cut) VERSION_INFO=$(aws cli get-version) CURRENT_MAJOR=$(echo "$VERSION_INFO" | jq -r '.Major') CURRENT_MINOR=$(echo "$VERSION_INFO" | jq -r '.Minor') CURRENT_PATCH=$(echo "$VERSION_INFO" | jq -r '.Patch') # 版本校验逻辑 if [ "$CURRENT_MAJOR" -gt "$REQUIRED_MAJOR" ] || \ [ "$CURRENT_MAJOR" -eq "$REQUIRED_MAJOR" -a "$CURRENT_MINOR" -gt "$REQUIRED_MINOR" ] || \ [ "$CURRENT_MAJOR" -eq "$REQUIRED_MAJOR" -a "$CURRENT_MINOR" -eq "$REQUIRED_MINOR" -a "$CURRENT_PATCH" -ge "$REQUIRED_PATCH" ]; then echo "AWS CLI版本符合要求" else echo "错误:需要AWS CLI至少$REQUIRED_MAJOR.$REQUIRED_MINOR.$REQUIRED_PATCH版本,当前版本为$CURRENT_MAJOR.$CURRENT_MINOR.$CURRENT_PATCH" exit 1 fi
为什么不推荐解析纯文本
aws --version的纯文本输出格式(如aws-cli/2.9.0 Python/3.9.10 Darwin/21.6.0 exe/x86_64 prompt/off)会因平台、Python版本甚至CLI的小版本更新而变化,解析时容易出现匹配错误;如果遇到带后缀的版本(如beta版),数值比较逻辑还会失效,结构化输出能彻底规避这些问题。
内容的提问来源于stack exchange,提问作者Sean Patrick Floyd
相关产品推荐
相关产品推荐

