1. 程式人生 > 實用技巧 >幾個shell小指令碼

幾個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