当前位置: 首页 > article >正文

shell脚本实战案例

文章目录

  • 实战第一坑
  • 功能说明
  • 脚本实现

实战第一坑

实战第一坑:在Windows系统写了一个脚本,比如上面,随后上传到服务,执行会报错

原因:

在这里插入图片描述

解决方案:在linux系统touch文件,并通过vim添加内容,或者通过系统关联的编辑器编辑,坚决不能将win文件直接上传到linux系统

功能说明

# 功能说明:
#   读取CSV文件,文件内容如下,要求解压缩zip文件并命名为对应文件名称,并按日期存放到对应文件夹中,比如将2324c5b6-6ac2-4d15-9333-da25ae52dfac.zip解压#   缩命名为hrminput(1).xls,放到202304文件夹下
# 3,hrminput(1).xls,/usr/weaver/ecology/filesystem/202304/J/2324c5b6-6ac2-4d15-9333-da25ae52dfac.zip
# 4,hrminput(1).xls,/usr/weaver/ecology/filesystem/202304/V/d3842bc2-e9dc-4de0-8861-5745ea862ba0.zip
# 78,组织架构表-新.xls,/usr/weaver/ecology/filesystem/202304/G/c60f0d3f-31db-4fe4-8df9-65d8e9cfb19d.zip
# 79,组织架构表-新.xls,/usr/weaver/ecology/filesystem/202304/J/3b9096eb-76db-4a3e-b938-0b02156c1346.zip

脚本实现

#!/bin/bash
# 定义变量:变量名=变量值,注意等号两侧不能有空格,变量名一般习惯用大写,双引号""、单引号''都可以
csvFilePath="/root/queryRes.csv"

# 读取CSV文件(有问题:最后一行读不到,所以csv文件必须多一条空行)
while IFS=, read -r DOCID IMAGEFILENAME FILEREALPATH; do 
  # echo "文件序号:${DOCID} 文件名称:$IMAGEFILENAME  文件地址:$FILEREALPATH"
  # 1、检查文件路径是否存在
  if [ ! -f $FILEREALPATH ]; then
    echo "文件不存在: $FILEREALPATH"
    continue
  fi

  # $FILEREALPATH = /usr/weaver/ecology/filesystem/202304/G/c60f0d3f-31db-4fe4-8df9-65d8e9cfb19d2.zip
  # 2、解压前的文件名称,并去掉后缀 2324c5b6-6ac2-4d15-9333-da25ae52dfac,通过basename命令 
  filename=$(basename $FILEREALPATH .zip)
  # 3、解压前的日期 202304【根据/分割,取倒数第三个值】
  date=$(echo $FILEREALPATH | awk -F'/' '{print $(NF-2)}')
  
   # 4、去除真实文件名称前后的尾随空格、双引号
   IMAGEFILENAME=$(echo $IMAGEFILENAME | tr -d ' ')
   IMAGEFILENAME=$(echo $IMAGEFILENAME | tr -d '"')
   echo "IMAGEFILENAME: $IMAGEFILENAME"

  # 5、解压文件,放到对应日期文件夹下
  mkdir -p /root/file/${date}
  unzip -o $FILEREALPATH -d /root/file/${date}
  # sleep 0.2s

  # 6、查找并重命名解压后的文件
  mv /root/file/${date}/${filename} /root/file/${date}/$IMAGEFILENAME
done < $csvFilePath    # 使用变量: $变量名、${变量名}都可以
echo "大功告成..."

http://www.kler.cn/a/427860.html

相关文章:

  • Android --- CameraX讲解
  • React第二十八章(css modules)
  • Linux运维之Linux的安装和配置
  • Oracle Primavera P6自动进行进度计算
  • Spring Boot项目如何使用MyBatis实现分页查询及其相关原理
  • 从0到1:C++ 开启游戏开发奇幻之旅(二)
  • 计算机网络复习6——应用层
  • SQL——DQL分组聚合
  • 档案学实物
  • 如何解决‘逻辑删除‘和‘唯一索引‘冲突的问题
  • 七、CNN的变体(更新中)
  • 51c嵌入式~单片机合集3
  • 【jvm】垃圾回收的优点和原理
  • Docker Compose 和 Kubernetes 之间的区别?
  • oracle之用户的相关操作
  • 【C#】键值对的一种常见数据结构Dictionary<TKey, TValue>
  • NAS-FCOS论文总结
  • 【xLSTM-Transformer序列分类】Pytorch使用xLSTM-Transformer对序列进行分类源代码
  • 【Redis集群】使用docker compose创建docker集群,并暴露外部接口
  • Android APP自学笔记
  • 一、web基础和http协议
  • Apache Doris Sql Cache
  • draggable插件——实现元素的拖动排序——拖动和不可拖动的两种情况处理
  • 第一节、电路连接【51单片机-TB6600驱动器-步进电机教程】
  • Java课程设计项目-servlet+jsp美食系统、菜品管理系统
  • 数据结构代码归纳