zoukankan      html  css  js  c++  java
  • shell备份,重命名,删除目录下面的文件

    因为经常会用到shell脚本,所以经常会写一些,但是我从来没有系统的学习过shell脚本,遇到问题,就去看手册,或者google一下,到了一定的程度才发现自己的基础真的好差。下面在系统学习shell时,顺便写了点有用的小脚本。

    1,备份目录下面文件

    #!/bin/bash
    E_BADARGS=65
     
    case $# in  //$#表示转入参数的个数,sh bak.sh ./ .sh 有二个参数./和.sh
    0)                     // 参数为空时,提示错误,并且退出
    echo "message:param is wrong"
    exit $E_BADARGS;;
    esac
     
    string=" "
     
    cd $1      //进入传入的目录
     
    //备份子目录中的文件时,参数也要接上
    if [ $# -gt "1" ]
    then
     string=$string" "$2
    fi
     
    for filename in *   //读取当前目录中的文件
    do
     if [ -d "$filename" ]     //判断一下是不是目录
     then
     /bin/sh /home/zhangy/test/$0 $(pwd)/$filename $string    //是目录的话,进行递归
     else
     if [ $# -gt "1" ] && [ ${filename:(-${#2})} = $2 ]    //指定备份什么样的文件
     then
     cp $filename $filename"bak"
     fi
     if [ $# -eq "1" ]
     then
     cp $filename $filename"bak"  //没指定,备份目录下面的所有文件
     fi
     fi
    done
    exit 0
    
    [zhangy@BlackGhost test]$ sh bak.sh ./ .sh  这句话的意思是把当前目录(以及子目录)中的所有以.sh为后缀的文件,进行备份、

    2,重命名文件

    #!/bin/bash
    E_BADARGS=65
     
    case $# in
    0|1|2)
    echo "message:param is wrong"
    exit $E_BADARGS;;
    esac
     
    string=" "
    cd $1
     
    if [ $# -gt "2" ]
    then
     string=$string" "$2" "$3
    fi
     
    for filename in *
    do
     if [ -d "$filename" ]
     then
     /bin/sh /home/zhangy/test/$0 $(pwd)/$filename $string
     else
     if [ $# -gt "2" ] && [ ${filename:(-${#2})} = $2 ]
     then
     mv $filename  ${filename%$2}$3
     fi
     fi
    done
    exit 0
    
       

    [zhangy@BlackGhost test]$ sh rename.sh /home/zhangy/test .php .html  这句话的意思是说,把当前目录(包括子目录)下的所有以.php为后缀的文件,重命名为.html

    3,删除指定文件

    #!/bin/bash
    E_BADARGS=65
     
    case $# in
    0|1)
    echo "message:param is wrong"
    exit $E_BADARGS;;
    esac
     
    string=" "
    cd $1
     
    if [ $# -gt "1" ]
    then
     string=$string" "$2
    fi
     
    for filename in *
    do
     if [ -d "$filename" ]
     then
     /bin/sh /home/zhangy/test/$0 $(pwd)/$filename $string
     else
     if [ $# -gt "1" ] && [ ${filename:(-${#2})} = $2 ]
     then
     rm -f $filename
     fi
     fi
    done
    exit 0
    
       

    [zhangy@BlackGhost test]$ sh del.sh /home/zhangy/test .log 删除/home/zhangy/test,以及子目录下所有以.log为后缀的文件

    链接:https://pan.baidu.com/s/1v5gm7n0L7TGyejCmQrMh2g 提取码:x2p5

    免费分享,但是X度限制严重,如若链接失效点击链接或搜索加群 群号936682608

     

    4,小结

    通过上面例子的练习,总结有以下几点

    1,传参数到shell脚本,一般传参数可以通过url或者是form表单,像这样index.php?name=tank,但是shell不能这样,他传参数直接根shell脚本的后面,像这样rename.sh /home/zhangy/test .php .html 向rename.sh传了3个参数,分别是/home/zhangy/test .php .html

    2,case语句,if语句的思想差不多,就是写法不一样,多看看,多练练就会适应了。

    3,如果将命令的输出,负值给一个变量,语法是$(shell command)  例如 :$(pwd)显示当前目录

    4,变量的截取,变量之间的比较等,上面的例子虽然非常的简单,但是包括的知识点还是不少的。

  • 相关阅读:
    HDU 5791 Two (DP)
    POJ 1088 滑雪 (DPor记忆化搜索)
    LightOJ 1011
    POJ 1787 Charlie's Change (多重背包 带结果组成)
    HDU 5550 Game Rooms (ccpc2015 K)(dp)
    HDU 5542 The Battle of Chibi (ccpc 南阳 C)(DP 树状数组 离散化)
    HDU 5543 Pick The Sticks (01背包)
    HDU 5546 Ancient Go (ccpc2015南阳G)
    NB-IoT的DRX、eDRX、PSM三个模式 (转载,描述的简单易懂)
    MQTT 嵌入式端通讯协议解析(转)
  • 原文地址:https://www.cnblogs.com/it-3327/p/11731953.html
Copyright © 2011-2022 走看看