Shell脚本常用写法
一、变量定义 | 赋值 | 输出
1、debugmap
#!/bin/bash
source /etc/profile
# hive_json_tuple_params_orignal.tmp
# exl_questiongroup_id
# exl_appcode
# exl_restype
declare -A debugmap
debugmap[exl_questiongroup_id]="exl_questionGroup_id"
debugmap[exl_appcode]="exl_appCode"
debugmap[exl_restype]="exl_resType"
while read line
do
if [ ${debugmap[$line]+_} ] ; then
echo "$line"
echo "${debugmap[$line]}"
fi
done < ./hive_json_tuple_params_orignal.tmp
2、变量字符串处理
#!/bin/bash
source /etc/profile
declare -A debugmap
debugmap[exl_questiongroup_id]="exl_questionGroup_id"
debugmap[exl_appcode]="exl_appCode"
debugmap[exl_restype]="exl_resType"
column_tmp="exl_tab1,exl_tab2,dt1,,#,#,,dt2,"
hive_columns=${column_tmp%%,,*}
echo "两个逗号之后的所有字符串去除 ${hive_columns}"
#截取
echo "取最左边9个字节 ${column_tmp:0:9}"
echo "取第9个字符串后9个字节 ${column_tmp:9:9}"
# 变量值里的字符串作替换
echo "将第一个exl_tab1内容,替换为apptest ${column_tmp/exl_tab1/apptest}"
echo "将全部exl_tab内容,替换为apptest ${column_tmp//exl_tab/apptest}"
echo "删除第一个,和左边的内容 ${column_tmp#*,}"
echo "删除最后一个,和左边的内容 ${column_tmp##*,}"
echo "删除最后一个,及右边字符串 ${column_tmp%,*}"
echo "仅删除最后一个, ${column_tmp%*,}"
echo "删除第一个,及右边字符串 ${column_tmp%%,*}"
3、循环
#!/bin/bash
source /etc/profile
# 文件tab1.tmp数据例子 col1,col2,col3,
# 常量定义
hive_table_partition="dt"
# 数据转换1
declare -A debugmap
debugmap[exl_questiongroup_id]="exl_questionGroup_id"
debugmap[exl_appcode]="exl_appCode"
# 数据转换2
declare -A columnmap
columnmap[exl_clazz_number]="clazz_number"
columnmap[exl_course_type]="course_type"
# 查看本地某个文件
column_tmp=$(cat ./tab1.tmp)
# 去除最后一个逗号
hive_columns=${column_tmp%%,,*}
hive_columns_arr=(${hive_columns//,/ })
# 循环
for (( i=0;i<${#hive_columns_arr[@]};i++ ))
do
column="${hive_columns_arr[$i]}"
# 日期分区是最后一个字段,遇到直接结束
if [[ ${column} == ${hive_table_partition} ]];then
break;
fi
if [ $i -eq 0 ] && [[ ${column} == ${column_private_prefix}* ]]; then
if [ ${debugmap[$column]+_} ] ; then
echo 'coalesce(json_temp.'"${column}"',json_temp.'"${debugmap[$column]}"',"") as '${column}
elif [ ${columnmap[$column]+_} ] ; then
echo "${columnmap[$column]}"
else
echo 'nvl(json_temp.'"${column}"',"") as '${column}
fi
elif [ $i -eq 0 ] && [[ ${column} != ${column_private_prefix}* ]]; then
echo ${column}
else
echo ",${column}"
fi
done