一、变量定义 | 赋值 | 输出

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

Shell脚本常用写法的更多相关文章

  1. shell脚本常用技巧

    shell脚本常用技巧 1.获取随机字符串或数字 ~]#echo $RANDOM | md5sum | cut -c 1-6 ~]#openssl rand -base64 4 | cut -c 1- ...

  2. shell脚本常用参数

    shell 脚本 常用参数 #!/bin/sh # 在脚本第一行脚本头 # sh为当前系统默认shell,可指定为bash等shell sh -x # 执行过程 sh -n # 检查语法 (a=bbk ...

  3. Shell 脚本常用命令

    Shell脚本是Linux开发工作中常用的工具,但是我一直没有找到一个适合自己的简明扼要的HandBook.在工作过程中整理了一下,贴在这里已备查看. 1           Shell中的特殊符号 ...

  4. SHELL 脚本----常用的命令

    一个很不错的bash脚本编写教程,至少没接触过BASH的也能看懂   建立一个脚本 Linux中有好多中不同的shell,但是通常我们使用bash (bourne again shell) 进行she ...

  5. shell 脚本常用调试方法

    曾经我刚开始学习 shell 脚本时,除了知道用 echo 输出一些信息外,并不知道其他方法,仅仅依赖 echo 来查找错误,比较难调试且过程繁琐.效率低下.本文介绍下我常用的一些 shell 脚本调 ...

  6. shell脚本常用命令汇总

    一.shell脚本概述和入门 (1)shell脚本是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核 (2)shell脚本的常用执行方式: 第一种:采用bash或sh+脚本的相对路径或 ...

  7. Shell脚本常用模板

    作为一个运维人员编写Shell脚本是很平常的,一个格式好的脚本不仅赏心悦目,后期自己和别人也易于维护. 下面的脚本就是我自己的shell编写格式,如下: [root@mini05 -]# cat te ...

  8. Shell脚本常用命令简介

    格式化日期yyyy-mm-dd hh:mm:ss显示 date "+%Y-%m-%d %H:%M:%S" 将内容写入到新文件 echo "hello">a ...

  9. Linux入门——shell脚本常用信息小结

    1.shell中的$默认变量    $n           $1 表示第一个参数,$2 表示第二个参数 ...    $#           命令行参数的个数    $0           当前 ...

  10. linux shell脚本常用语句

    linux shell 指令 诸如-d, -f, -e之类的判断表达式: 文件比较运算符-e filename  如果 filename存在,则为真  [ -e /var/log/syslog ]-d ...

随机推荐

  1. python之异步任务框架Celery

    官网参考: Celery 官网:http://www.celeryproject.org/ Celery 官方文档英文版:http://docs.celeryproject.org/en/latest ...

  2. 三菱电梯IC卡系统数据库备份与恢复

    查看msde2000的登录方式 sa密码lonele 64位操作系统下 reg query "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsof ...

  3. 移动端NES网页模拟器(1)

    前言 移动端浏览器是没有实体键盘的,想要操作游戏就必须为其设置虚拟按键,通过虚拟按键(按钮)的标识与实体键盘的keyCode进行绑定,来达到想要的效果. 这个随笔只封装NES游戏手柄右边的按键,不包含 ...

  4. canvas(七)绘制网格和坐标轴

    1.绘制网格 传入dom和分割线间隔进行渲染,网格线分为水平方向和垂直方向 <script> //绘制网格 function drwaGrid(dom = document.querySe ...

  5. 第一个 milestone:内推 50 人拿到微软 offer!

    就在昨天,我的一位候选人和我说,他已经通过面试,正在 offer 沟通阶段.由此,我达成第一个小里程碑:成功内推 50 人拿到了微软 offer! 内推了多少人? 从 2019 年年初开始内推,到现在 ...

  6. HarmonyOS Next 入门实战 - 关系型数据库、smartdb

    SQLite数据库 HarmonyOS的关系型数据库基于SQLite 导入模块 import { relationalStore } from '@kit.ArkData'; 实现步骤: 获取RdbS ...

  7. Qt支持RKMPP硬解的视频监控系统/性能卓越界面精美/实时性好延迟低/录像存储和回放/云台控制

    一.前言 之前做的监控系统,已经实现了在windows上硬解码比如dxva2和d3d11va,后续又增加了linux上的硬解vdpau的支持,这几种方式都是跨系统的硬解实现方案,也是就是如果都是win ...

  8. Qt音视频开发02-海康sdk解码(支持句柄/回调/gpu模式/支持win/linux)

    一.前言 为何还要选用使用海康sdk,之前不是ffmpeg已经牛皮吹上天了吗?这个问题问得好,那是因为无论ffmpeg也好还是vlc/mpv之类的,都是实现的播放相关,不同的监控硬件厂家对应设备还有很 ...

  9. Qt编写可视化大屏电子看板系统32-模块10大屏地图

    一.前言 大屏地图模块采用浏览器模块+echart组件,Qt自带了webkit或者webengine模块,其中在win上mingw编译器的Qt5.6以后的版本,没有了浏览器模块,这个就需要用第三方的浏 ...

  10. Kaggle API使用范例

    kaggle.com/docs/api