幾個shell小指令碼
阿新 • • 發佈:2020-09-10
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}.csvif [ -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