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
  
  

 

 

 

 

 

posted @ 2023-02-20 12:43  黑水滴  阅读(27)  评论(0编辑  收藏  举报