1.shell脚本基本设置
1.1 首行
#!/bin/bash
1.2 脚本内设置参数
export PATH=$PATH
2.执行脚本
2.1调用hive(hive -e/-f )
hive --hiveconf tez.application.tags="xx/xx" --hiveconf hive.metastore.uris="xx/xx" -hivevar tableName=$tableName -hivevar partition=$partition -hivevar date=$date -f ${xx}/xx.sql
2.2调用spark
spark-sql --hiveconf hive.metastore.uris="xx/xx" -f ${xx}/xx.sql & #循环内容放到后台执行
2.3执行jar包
javac -cp xx/xx-1.0-SNAPSHOT.jar(jar包路径) com.xx.xx.xx(main方法)
javac -jar xx/xx-1.0-SNAPSHOT.jar(jar包路径)
3.set 设置一些配置
使用场景:
echo "xxx"
set +e
java -jar $xx
run_code=$?
set -e
最常用的两个参数就是 -e 与 -x ,一般写在 shell 代码逻辑之前,这两个组合在一起用,可以在 debug 的时候替你节省许多时间 。
set -x 会在执行每一行 shell 脚本时,把执行的内容输出来。它可以让你看到当前执行的情况,里面涉及的变量也会被替换成实际的值。
set -e 会在执行出错时结束程序,就像其他语言中的“抛出异常”一样。(准确说,不是所有出错的时候都会结束程序,见下面的注)
4 上传文件
4.1 aws
echo "[`date`] - 上传 $target_file_name 到表路径 $upload_table_path"
aws s3 cp $target_file_name $upload_table_path
4.2 lftp
lftp sftp://xx@ip -p 22 -e "
ls /xx/xx/xx/xx(地址)
exit
"
4.3 hdfs
hdfs dfs -put s3://xx
5 常见使用场面
5.1 错误退出
if [ "$?"-ne 0]; then echo "command failed"; exit 1; fi
5.2 将导出的文件按指定行数拆分成多个文件
基本用法:split [-bl] file [prefix]
参数说明:
-b, --bytes=SIZE :对 file 进行切分,每个小文件大小为 SIZE 。可以指定单位 b,k,m 。
-l, --lines=NUMBER :对 file 进行切分,每个文件有 NUMBER 行。
prefix:分割后产生的文件名前缀。
链接:(6条消息) 用shell切分文件--split_未来可7-CSDN博客_shell split
实际代码样例:
cd ${split_data_dir}
rm -f *
# 将导出的文件按指定行数拆分成多个文件,以供后续任务使用
split -l $split_num ${source_data_file} $split_prefix
if [[ $? -ne 0 ]];then
echo "拆分${source_data_file}失败"
exit 1
fi
echo "拆分文件路径:$split_data_dir"
echo "拆分文件列表:$(ls -l $split_data_dir)"
echo "############ The shell $0 completed. ##################"
5.3 创建路径
mkdir -p -m 755 /xx/xx/
5.4 删除路径
rm -rf /xx/xx
6 时间处理
指定月份,加减日期
mth_2=`date +'%Y-%m-%d' -d "2 month 2020-10-01"`
当前日期,加减日期
mth_1=`date +'%Y-%m' -d '-1 month'`