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

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. 【人工智能】【深度学习】CUDA与CUDNN安装

    cuDA安装 基础 CUDA工具包 NVIDIA CUDA 工具包提供了开发环境,可供创建经 GPU 加速的高性能应用.借助 CUDA 工具包,您可以在经 GPU 加速的嵌入式系统.台式工作站.企业数 ...

  2. 深入理解二叉查找树(BST)的重要查找操作

    二叉查找树 (Binary Search Tree, 简称 BST) 是一种基本的数据结构,其设计核心在于每个节点的值都满足以下性质: 左子树的所有节点值均小于当前节点值. 右子树的所有节点值均大于当 ...

  3. 使用 Docker Compose 安装 MongoDB

    最近学习 Docker ,试着在 Docker 里安装 MongoDB,按照镜像 mongo 文档一顿操作猛如虎. 快速开始 写个 docker-compose.yml 文件: version: '3 ...

  4. checker jenkins 启动配置

    chmod -R 755 bin scp target/*.jar ubuntu@x:/home/ubuntu/checker/ scp config/*.yml ubuntu@x:/home/ubu ...

  5. Qt音视频开发43-采集屏幕桌面并推流(支持分辨率/矩形区域/帧率等设置/实时性极高)

    一.前言 采集电脑屏幕桌面并推流一般是用来做共享桌面.远程协助.投屏之类的应用,最简单入门的做法可能会采用开个定时器或者线程抓图,将整个屏幕截图下来,然后将图片传出去,这种方式很简单但是性能要低不少, ...

  6. Qt编写安防视频监控系统60-子模块4云台控制

    一.前言 云台控制是一个很老很基础的模块了,视频监控系统中必备的特殊模块之一,可以对选中的通道的摄像机(ONVIF协议),进行云台控制,可以控制球机的上下左右等各个方位的移动,还可以调节变倍步长,至于 ...

  7. Qt音视频开发38-USB摄像头解码linux方案

    一.前言 做嵌入式linux上的开发很多年了,扳手指头算算,也起码9年了,陆陆续续做过很过诸如需要读取外接的USB摄像头或者CMOS摄像机的程序,实时采集视频,将图像传到前端,或者对图像进行人脸分析处 ...

  8. Qt音视频开发25-ffmpeg音量设置

    一.前言 音视频的播放.关闭.暂停.继续这几个基本功能,绝大部分人都是信手拈来的搞定,关于音量调节还是稍微饶了下弯弯,最开始打算采用各个系统的api来处理,坐下来发现不大好,系统的支持不完美,比如有些 ...

  9. vue 控件的淡入淡出

    页面代码. 1.首先要用transition 包裹一下,设置name或者不设置都可以,其次transition 下面要有一个div设置v-if来触发移入移出 <transition name=& ...

  10. 解决Failed to load module canberra-gtk-module错误

    在Ubuntu环境里,通过./triangulation 1.png 2.png 命令运行高翔的ch7的triangulation程序时报错: Gtk-Message: 09:10:26.571: F ...