我是靠谱客的博主 优雅白云,这篇文章主要介绍shell列表字典操作的实际应用shell中使用列表和字典实现多文件的解压,现在分享给大家,希望可以做个参考。

文章目录

  • shell中使用列表和字典实现多文件的解压
    • 1.准备工作
    • 2.脚本的编写
      • 2.1用到的知识点
    • 2.2详细脚本

shell中使用列表和字典实现多文件的解压

工作中要根据不同的文件解压到不同的文件夹中,所以写了个脚本处理这些事情

1.准备工作

首先要有一个统一的命名格式,这个是写脚本的前提,不然光是处理一堆稀奇古怪的包名就够你头疼的
命名格式如下:符合类似格式即可

复制代码
1
2
3
4
v6.1_aiwobu.zip v6.2_aiwobu.zip v6.1_buaini.zip

2.脚本的编写

2.1用到的知识点

  1. 列表的生成与操作
  2. 字典的生成与操作
  3. 函数的传参与返回值
  4. .其他基础知识:sed,awk等

2.2详细脚本

复制代码
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#!/bin/bash #用途: 1.根据文件名解压拷贝web文件到指定位置,并更改版本号 # 2.解压服务文件到指定位置 #原理: 1.分别获取版本号,存储在列表中 # 2.将列表生成字典,方便取用 #作者: connor #时间: xxxx.2.14 #版本: v2 source_dir="/data/source" web_dir="/data/clusters/release" api_dir="/data/clusters/api_release" aiwobu_version=`ls -l ${source_dir}|tail -n +2|grep aiwobu|awk '{print $9}'` buaini_version=`ls -l ${source_dir}|tail -n +2|grep buaini|awk '{print $9}'` boom_version=`ls -l ${source_dir}|tail -n +2|grep boom|awk '{print $9}'` service_version=`ls -l ${source_dir}|tail -n +2|grep service|awk '{print $9}'` #---------------------------------------获取web版本号并存储到列表当中-------------------------------------- get_version () { #声明Version_list是一个列表 declare -a Version_list #列表去重(备份时有用,此处没有多大用,只是生成了一个列表) for Version_name in ${1} do #判断元素是否在数组中 if echo "${Version_list[@]}" | grep "${Version_name:1:3}" &>/dev/null;then continue else #将元素追加到数组中 Version_list=(${Version_list[@]} ${Version_name:1:3}); fi done echo ${Version_list[@]} } #-----------------------------------解压文件到指定目录&拷贝文件&修改配置文件----------------------------------------------- unzip_package () { for version_number in ${Version_dict[${key}]} do cd ${source_dir} package_name="v${version_number}_${key}" unzip -qo ${package_name}.zip -d ${package_name} #区分copy时的路径 if [ ${key} == "service" ];then file_path="${api_dir}/PDW.SCM.API_v${version_number}" elif [ ${key} == "rom" ];then file_path="${web_dir}/v${version_number}" else file_path="${web_dir}/v${version_number}/${key}" fi cp -r ${package_name}/* ${file_path} #修改webconfig if [ ${key} != "service" ];then #过滤出老的版本号 old_web_version=`grep key="Version" ${file_path}/Web.config |awk -F '"' '{print $4}'` #过滤出需要更改的版本号 change_web_version=`grep key="Version" ${file_path}/Web.config |awk -F '"' '{print $4}'|awk -F '.' '{print $3}'` change_web_version=$((change_web_version+1)) new_web_version=${version_number}.${change_web_version} #修改版本号 sed -i "s/key="Version" value="${old_web_version}"/key="Version" value="${new_web_version}"/g" ${file_path}/Web.config echo "${key}" echo "${old_web_version} ==> ${new_web_version}" fi done } #获取需要发布内容的版本号 service_version_list=`get_version "${service_version}"` boom_version_list=`get_version "${boom_version}"` buaini_version_list=`get_version "${buaini_version}"` aiwobu_version_list=`get_version "${aiwobu_version}"` #声明Version_dict是一个字典 declare -A Version_dict Version_dict=( [service]="${service_version_list}" [boom]="${boom_version_list}" [buaini]="${buaini_version_list}" [aiwobu]="${aiwobu_version_list}" ) #-----------------------------------------主体逻辑------------------------------------------ for key in $(echo ${!Version_dict[*]}) do #去除value为空的key if [ -n "${Version_dict[${key}]}" ];then if [ ${key} == "service" ];then unzip_package elif [ ${key} == "boom" ];then unzip_package elif [ ${key} == "buaini" ];then unzip_package elif [ ${key} == "aiwobu" ];then unzip_package else continue fi fi done

最后

以上就是优雅白云最近收集整理的关于shell列表字典操作的实际应用shell中使用列表和字典实现多文件的解压的全部内容,更多相关shell列表字典操作内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(92)

评论列表共有 0 条评论

立即
投稿
返回
顶部