ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

几个shell小脚本

2020-09-10 20:00:27  阅读:235  来源: 互联网

标签:脚本 shell 几个 sjyzx echo cut file wlw dir


1.从某个主机下载文件到本地主机目录

 用到的知识点:

  • day1=date +%e  %e与%d的区别,%d是指天,比如9号就是09  而%e是整数,9号就是9

  • ftp下载文件的命令  批量下载文件用mget,不能用get。EOF包含的里边不能用for循环,只能指定是哪个变量

  • 最后判断文件是否get到,用if条件   -e表示文件是否存在 

 

#!/bin/bash
# subject: get file from ftp 
# date:2020/9/7
# author :houchunping

ip=******
user=******
pass=******
dir=******
dir_ext=******day=`date +%Y%m`
day1=`date +%e`
#echo $day1
pre_month=`expr $day - 1`
#echo "$dir_ext/$pre_month"

file=I20041?_${day1}_${day}.csv

ftp -ivn $ip <<EOF
user $user $pass
bin
cd $dir_ext/$pre_month
lcd $dir
mget $file
bye
EOF
#执行完成判断文件是否在当前目录存在,如果存在则表示get成功
cd $lcd
file1=I200411_${day1}_${day}.csv
if [ -e $file1 ];then
    
    echo "it is successful!"
else
    echo "it is fialed"
fi

 2.批量重命名文件

 

用到的知识点

  • case循环语句

  • for循环语句

  • cut命令  cut -d 是根据分隔符进行字符串截取,与-f配合使用,默认分隔符是tab   cut -c  是根据字符截取

#!/bin/bash

dir=*****
for file in `ls $dir/I2004*`
do
        echo $file
        flag=`echo $file |cut -d \/ -f 6|cut -c 6-7`
        case $flag in
                10)
                        mv $file "$dir/wlw_sjyzx_2005"
                        ;;
                11)
                        mv $file "$dir/wlw_sjyzx_2004"
                        ;;
                12)
                        mv $file "$dir/wlw_sjyzx_2003"
                        ;;
                13)
                        mv $file "$dir/wlw_sjyzx_2002"
                        ;;
                14)
                        mv $file "$dir/wlw_sjyzx_2001"
                        ;;
        esac

done

 

3.批量压缩文件

用到的知识点:

  • awk命令  awk 'END{print NR}' $file 查询文件的行数   awk '{printf("%010d\n",$0)}'  指定长度字符串不够前边补0操作

  • gzip -c  文件1 > 文件2.gz  压缩命令将文件1压缩成文件2的名称格式

  • 多进程处理。括号和&  是将括号里的任务作为一个组合后台运行。wait是等待所有进程执行。

#!/bin/bash

day=`date +%Y%m%d`
dir=*****
for file in `ls $dir/wlw_sjyzx*`
do
(
        flag=`echo $file|cut -d \/  -f 6|cut -d \_ -f 3`
        wcl=`awk 'END{print NR}' $file`
        echo ---------------------------
        echo $wcl
        wcll=`echo $wcl|awk '{printf("%010d\n",$0)}'`
        echo $wcll
        gzip -c "$file" > "$dir/BOSS_${day}010000_${flag}100.${wcll}.gz"
) &
done
wait

 

标签:脚本,shell,几个,sjyzx,echo,cut,file,wlw,dir
来源: https://www.cnblogs.com/houjiashan/p/13647894.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有