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

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. pikachu平台暴力破解详解

    声明:文章只是起演示作用,所有涉及的网站和内容,仅供大家学习交流,如有任何违法行为,均和本人无关,切勿触碰法律底线. 文章来自个人csdn博客,感兴趣的可以关注一下,https://blog.csdn ...

  2. javascript的一些API接口的使用

    1.blob http URL 在编辑器中,有的情况下插入图片,会讲图片转成 blob:http://localhost/*** 的这种形式.这种形式的URL实际数据是存放在浏览器的内存中. 这种情况 ...

  3. 生产环境BigDecimal用错了,已哭晕在厕所。。。

    大家好,我是苏三,又跟大家见面了. 前言 在日常开发中,很多小伙伴喜欢用 BigDecimal 来处理精确计算,比如钱.分数.比例啥的. 理论上,它比 double 或 float 更精确,但如果你用 ...

  4. 推荐一款轻量级且强大的 Elasticsearch GUI : elasticvue

    推荐一款轻量级且强大的 Elasticsearch GUI : elasticvue 很多同学都是用过 Elasticsearch 的 GUI 工具 Kibana ,但 Kibana 相对比较重,这篇 ...

  5. 对象存储COS成本优化方案

    随着上云企业越来越多,企业对用云成本问题也越发重视.业务的发展会产生海量存储需求,在云端存储数据时,如何进行成本优化,减轻业务负担呢? 在进行成本优化之前,首先需要了解腾讯云对象存储COS的成本构成. ...

  6. Redis应用—7.大Value处理方案

    大纲 1.⽅案设计 2.安装与配置环境 1.⽅案设计 步骤一:首先需要配置一个crontab定时调度shell脚本,然后该脚本每天凌晨会通过rdbtools⼯具解析Redis的RDB⽂件,接着对解析出 ...

  7. .net core 文本比对的一个诡异设计

    9-11 发现的,过久了都忘了,记一下 string s = Encoding.ASCII.GetString(new byte[] { 0x57, 00, 0x49, 00, 0x4e, 00, 0 ...

  8. 聊一聊 C#线程池 的线程动态注入 (上)

    一:背景 1. 讲故事 在线程饥饿的场景中,我们首先要了解的就是线程是如何动态注入的?其实现如今的ThreadPool内部的实现逻辑非常复杂,而且随着版本的迭代内部逻辑也在不断的变化,有时候也没必要详 ...

  9. 【Python】【爬虫】【爬狼】002_自定义获取网页源码的函数

    在上一篇笔记([Python][爬虫系列][爬狼]001_urllib_get_获取响应结果页面代码 - 萌狼蓝天 - 博客园 (cnblogs.com/mllt))我们将一个网页,解析为了文档(源码 ...

  10. SpringBoot:通过多个Context限制Bean的活动范围

    从Spring的包扫描说起 SpringBoot会扫描SpringBootApplication注解标注的类,他所在的包以及这个包的子包,把那里面的Bean注册到applicationContext中 ...