shell map使用

# 定义初始化map
declare -A map=(["100"]="1" ["200"]="2")

# 输出所有key
echo ${map[@]}

# 输出key对应的值
echo ${map["100"]}

# 遍历map
for key in ${!map[@]}
do
    echo ${map[${key}]}
done
#!/bin/bash
#********************************************************************#
##author:郭昊
##create time:2019-04-03 14:09:17
#********************************************************************#
source /webser/odps/shell/odps.sh

### 定义变量
confSql="select concat_ws('|',check_id,check_desc,type,sql_txt) as flag from check_erroer_data_config where is_deleted = 0"
typeMap=(["a"]="1" ["b"]="2" ["c"]="3" ["d"]="4" ["e"]="5")

### 主函数
main(){
    # 清空结果表历史数据
    db_query_retant "bigdata_db" "truncate table check_erroer_data_result"

    # 遍历配置表里的记录
    db_query_retant "bigdata_db" "${confSql}"|sed '1d'|while read line
    do
        check_id=$(echo ${line}|awk -F'|' '{print $1}')
        check_desc=$(echo ${line}|awk -F'|' '{print $2}')
        type=$(echo ${line}|awk -F'|' '{print $3}')
        sql_txt=$(echo ${line}|awk -F'|' '{print $4}')

        # 处理单引号
        sql=$(echo ${sql_txt}|sed "s/'/''/g")

        # 处理执行语句
        sql_excute=$(echo ${sql_txt}|sed "s/select/select ${check_id} as check_id,'${check_desc}' as check_desc,'${type}' as type,'${sql}' as sql_txt,DATABASE() as db_name,/i")
        echo "${sql}"
        echo "${sql_excute}"

        # 获取key对应的值
        typeTenants=${typeMap[${type}]}

        # 统计异常数据量
        if [ "${typeTenants}" != "" ]
        then
            if [ "${type}" == "gcxt" ]
            then
                upload_1 "${typeTenants}" "${sql_excute}" "check_id,check_desc,type,sql_txt,db_name,error_cnt" "check_erroer_data_result" "bigdata_db" 0
            else
                upload_2 "${typeTenants}" "${sql_excute}" "check_id,check_desc,type,sql_txt,db_name,error_cnt" "check_erroer_data_result" "bigdata_db" 0
            fi
        else
            echo "[ERROR] Type: [ ${type} ] not match,Please check again"
        fi
    done

    # 删除正常的记录
    db_query_retant "bigdata_db" "delete from check_erroer_data_result where error_cnt = 0"
}

### 运行主函数
main
-- 表结构设计
use bigdata_db;
-- 配置表
drop table check_erroer_data_config;
create table check_erroer_data_config(
     check_id     tinyint       primary key auto_increment comment '检查项序号'
    ,check_desc   varchar(500)  not null                   comment '检查项描述'
    ,type         varchar(100)  not null                   comment '检查项类型'
    ,sql_txt      varchar(1000) not null                   comment '检查SQL'
    ,is_deleted   tinyint       default 0                  comment '是否已删除'
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='业务异常数据巡检配置表'
;

-- 结果表
drop table check_erroer_data_result;
create table check_erroer_data_result(
     check_id     tinyint       not null                           comment '检查项序号'
    ,check_desc   varchar(500)  not null                           comment '检查项描述'
    ,type         varchar(100)  not null                           comment '检查项类型'
    ,db_name      varchar(50)   not null                           comment '检查数据库名'
    ,sql_txt      varchar(1000) not null                           comment '检查SQL'
    ,error_cnt    int(11)       default 0                          comment '异常记录数'
    ,update_time  timestamp     DEFAULT CURRENT_TIMESTAMP not null comment '更新时间'
    ,primary key(db_name,check_id)
    ,KEY `ix_error_cnt` (`error_cnt`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='业务异常数据巡检结果表'
;
原文地址:https://www.cnblogs.com/chenzechao/p/10649794.html