#!/bin/bash # 更新应用列表及说明.md中的版本信息 # 用法: ./updateVersion.sh <项目名称> # 示例: ./updateVersion.sh GrabBag # 定义项目与Version.h文件的映射关系 declare -A PROJECT_VERSION_FILES=( ["GrabBag"]="App/GrabBag/GrabBagApp/Version.h" ["BeltTearing"]="App/BeltTearing/BeltTearingApp/Version.h" ["LapWeld"]="App/LapWeld/LapWeldApp/Version.h" ["Workpiece"]="App/Workpiece/WorkpieceApp/Version.h" ["ParticleSize"]="App/ParticleSize/ParticleSizeApp/Version.h" ["BinocularMark"]="App/BinocularMark/BinocularMarkApp/Version.h" ["WorkpieceProject"]="App/WorkpieceProject/WorkpiecePositionApp/Version.h" ["TunnelChannel"]="App/TunnelChannel/TunnelChannelApp/Version.h" ["WheelMeasure"]="App/WheelMeasure/WheelMeasureApp/Version.h" ["ScrewPosition"]="App/ScrewPosition/ScrewPositionApp/Version.h" ["BagThreadPosition"]="App/BagThreadPosition/BagThreadPositionApp/Version.h" ["WorkpieceHole"]="App/WorkpieceHole/WorkpieceHoleApp/Version.h" ["StatorPosition"]="App/StatorPosition/StatorPositionApp/Version.h" ["HoleDetection"]="App/HoleDetection/HoleDetectionApp/Version.h" ["HolePitPosition"]="App/HolePitPosition/HolePitPositionApp/Version.h" ["RodAndBarPosition"]="App/RodAndBarPosition/RodAndBarPositionApp/Version.h" ) # 定义项目与版本宏的映射关系 declare -A PROJECT_VERSION_MACROS=( ["GrabBag"]="GRABBAG" ["BeltTearing"]="BELT_TEARING_APP" ["LapWeld"]="LAPWELD" ["Workpiece"]="WORKPIECE" ["ParticleSize"]="PARTICLESIZE" ["BinocularMark"]="BINOCULARMARK" ["WorkpieceProject"]="WORKPIECE_POSITION" ["TunnelChannel"]="TUNNELCHANNEL" ["WheelMeasure"]="WHEELMEASURE" ["ScrewPosition"]="SCREWPOSITION" ["BagThreadPosition"]="BAGTHREADPOSITION" ["WorkpieceHole"]="WORKPIECEHOLE" ["StatorPosition"]="STATORPOSITION" ["HoleDetection"]="HOLEDETECTION" ["HolePitPosition"]="HOLEPITPOSITION" ["RodAndBarPosition"]="RODANDBARPOSITION" ) # 定义项目与Publish包名称的映射关系 declare -A PROJECT_PUBLISH_NAMES=( ["GrabBag"]="GrabBag" ["BeltTearing"]="BeltTearingServer" ["LapWeld"]="LapWeld" ["Workpiece"]="Workpiece" ["ParticleSize"]="ParticleSize" ["BinocularMark"]="BinocularMarkServer" ["WorkpieceProject"]="WorkpieceProject" ["TunnelChannel"]="TunnelChannel" ["WheelMeasure"]="WheelMeasure" ["ScrewPosition"]="ScrewPosition" ["BagThreadPosition"]="BagThreadPosition" ["WorkpieceHole"]="WorkpieceHole" ["StatorPosition"]="StatorPosition" ["HoleDetection"]="HoleDetection" ["HolePitPosition"]="HolePitPosition" ["RodAndBarPosition"]="RodAndBarPosition" ) # 定义项目与中文名称的映射关系 declare -A PROJECT_CHINESE_NAMES=( ["GrabBag"]="自动拆包" ["BeltTearing"]="皮带撕裂" ["LapWeld"]="焊接" ["Workpiece"]="工件定位" ["ParticleSize"]="颗粒尺寸检测" ["BinocularMark"]="双目标记检测" ["WorkpieceProject"]="工件项目" ["TunnelChannel"]="铁路隧道槽道测量" ["WheelMeasure"]="车轮拱高测量" ["ScrewPosition"]="螺杆定位" ["BagThreadPosition"]="包裹拆线位置定位" ["WorkpieceHole"]="工件孔定位" ["StatorPosition"]="定子定位" ["HoleDetection"]="孔洞检测" ["HolePitPosition"]="坑孔定位" ["RodAndBarPosition"]="棒材定位" ) # 应用列表文件路径 APP_LIST_FILE="应用列表及说明.md" # 获取脚本所在目录 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" # 检查参数 if [ $# -eq 0 ]; then echo "用法: $0 <项目名称>" echo "示例: $0 GrabBag" echo "" echo "可用项目名称:" for project in "${!PROJECT_VERSION_FILES[@]}"; do echo " - $project (${PROJECT_CHINESE_NAMES[$project]})" done exit 1 fi PROJECT_NAME=$1 # 检查项目是否存在 if [ -z "${PROJECT_VERSION_FILES[$PROJECT_NAME]}" ]; then echo "错误: 未知的项目名称 '$PROJECT_NAME'" echo "可用项目名称:" for project in "${!PROJECT_VERSION_FILES[@]}"; do echo " - $project (${PROJECT_CHINESE_NAMES[$project]})" done exit 1 fi # 获取Version.h文件路径 VERSION_FILE="../${PROJECT_VERSION_FILES[$PROJECT_NAME]}" VERSION_MACRO="${PROJECT_VERSION_MACROS[$PROJECT_NAME]}" PUBLISH_NAME="${PROJECT_PUBLISH_NAMES[$PROJECT_NAME]}" CHINESE_NAME="${PROJECT_CHINESE_NAMES[$PROJECT_NAME]}" echo "==========================================" echo "更新项目版本信息" echo "==========================================" echo "项目名称: $PROJECT_NAME ($CHINESE_NAME)" echo "发布名称: $PUBLISH_NAME" echo "Version.h: $VERSION_FILE" echo "==========================================" # 检查Version.h文件是否存在 if [ ! -f "$VERSION_FILE" ]; then echo "错误: Version.h 文件不存在: $VERSION_FILE" exit 1 fi # 读取版本信息 # 尝试多种可能的宏定义格式 VERSION_STRING="" BUILD_STRING="" # 尝试读取版本号 VERSION_STRING=$(grep "#define ${VERSION_MACRO}_VERSION_STRING" "$VERSION_FILE" | sed 's/.*"\(.*\)".*/\1/' | head -1) if [ -z "$VERSION_STRING" ]; then # 尝试另一种格式 VERSION_STRING=$(grep "#define ${VERSION_MACRO}_APP_VERSION_STRING" "$VERSION_FILE" | sed 's/.*"\(.*\)".*/\1/' | head -1) fi # 尝试读取构建号 BUILD_STRING=$(grep "#define ${VERSION_MACRO}_BUILD_STRING" "$VERSION_FILE" | sed 's/.*"\(.*\)".*/\1/' | head -1) if [ -z "$BUILD_STRING" ]; then # 尝试另一种格式 BUILD_STRING=$(grep "#define ${VERSION_MACRO}_APP_VERSION_BUILD" "$VERSION_FILE" | sed 's/.*"\(.*\)".*/\1/' | head -1) fi # 如果仍然无法读取,使用默认值 if [ -z "$VERSION_STRING" ]; then VERSION_STRING="1.0.0" echo "警告: 无法读取版本号,使用默认值: $VERSION_STRING" else echo "版本号: $VERSION_STRING" fi if [ -z "$BUILD_STRING" ]; then BUILD_STRING="1" echo "警告: 无法读取构建号,使用默认值: $BUILD_STRING" else echo "构建号: $BUILD_STRING" fi # 组合完整版本号 FULL_VERSION="${VERSION_STRING}.${BUILD_STRING}" echo "完整版本: $FULL_VERSION" echo "==========================================" # 检查应用列表文件是否存在 if [ ! -f "$APP_LIST_FILE" ]; then echo "错误: 应用列表文件不存在: $APP_LIST_FILE" exit 1 fi # 更新应用列表文件中的版本信息 # 查找对应行并更新版本号 if grep -q "| ${CHINESE_NAME} | ${PUBLISH_NAME} |" "$APP_LIST_FILE"; then # 使用sed更新版本号 sed -i "s/| ${CHINESE_NAME} | ${PUBLISH_NAME} | .* |/| ${CHINESE_NAME} | ${PUBLISH_NAME} | ${FULL_VERSION} |/" "$APP_LIST_FILE" echo "已更新 $CHINESE_NAME 的版本信息为 $FULL_VERSION" else echo "警告: 在应用列表中未找到项目 '$CHINESE_NAME' ($PUBLISH_NAME)" fi echo "==========================================" echo "版本信息更新完成!" echo "=========================================="