Shell生成日期变量的json

有一些场合,对应的json文件里有datetime这样的字段,但是这个datetime需要每天取到对应的变量值,但是要知道json本身就是一个文本,是没有逻辑而言的。那么就需要写一个脚本,每天可以crontab生成一个含有对应日期的json文档,于是我就搞了一个shell脚本,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/bin/bash
source /etc/profile

date_str=$(date -d "yesterday" +%F) # 取昨天的日期2022-01-17
year="${date_str%%-*}"
yuebian="${date_str#*-}"
month="${yuebian%%-*}"
day="${date_str##*-}"
format_date="$year$month$day"
## 重定向 eg:message=`echo "输出项为:${abc}" |sed s/[[:space:]]//g`
filename="pouch-odps2mysql.json" # 这里就是想要的文件输出名
format=`echo "$format_date"|sed s/[[:space:]]//g`
echo "$format"
# 下面是真实的json文件产出,这里用了一个dataX的json例子
echo "{
'job': {
'content': [
{
'reader': {
'name': 'odpsreader',
'parameter': {
'accessId': '***',
'accessKey': '***',
'column': [
'dept_name',
'zone',
'labels',
'vcpu',
'memory',
'disk'
],
'odpsServer': 'http://service-corp.odps.aliyun-inc.com/api',
'packageAuthorizedProject': '',
'partition': [
'ds=${format_date}'
],
'project': '这里是工程名',
'splitMode': 'record',
'table': '这里是表名'
}
},
'writer': {
'name': 'mysqlwriter',
'parameter': {
'column': [
'dept_name',
'zone',
'labels',
'vcpu',
'memory',
'disk'
],
'connection': [
{
'jdbcUrl': 'jdbc:mysql://数据库IP地址:3306/AAA?useUnicode=true&characterEncoding=UTF-8',
'table': ['MYSQL表名']
}
],
'password': '密码',
'preSql': ['DELETE FROM MYSQL表名;'], # 先删除后insert
'session': [],
'username': '用户名',
'writeMode': 'insert'
}
}
}
],
'setting': {
'speed': {
'channel': '1'
}
}
}
}
" >$filename

执行这个shell文档后,就会生成一个文件,里面的ds=${format_date}就会被顺利解析成20220117(本文时间是2022年1月18日)。这里注意一下,最后写入文档的echo搭配的是双括号,因为用了单括号的话,变量将不会被识别,所有内容都会原封不对的输出,而双引号才是不会屏蔽对变量和某些特殊符号的转义的。

还要注意,如果搭配crontab做定时任务使用的话,需要加上环境变量:cd /文件目录/ && /bin/sh 脚本.sh。 不然的话,可能会执行失败。

感谢您请我喝咖啡~O(∩_∩)O,如果要联系请直接发我邮箱chenx1242@163.com,我会回复你的
-------------本文结束感谢您的阅读-------------