几个shell小脚本
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
浙公网安备 33010602011771号