zoukankan      html  css  js  c++  java
  • 一个复制文件的Shell脚本

    写一个关于复制文件的Shell脚本,脚本的功能:

    ①把一个目录下(目录A)的文件复制到另外一个目录中(目录B);

    ②如果目录B不存在,就创建出这个目录;

    ③可以重命名复制后得到的文件;

    其实,这个脚本并没有什么用,只是为了检验最近学习的Shell语法是否掌握了而已。源码如下:

    PATH0=$1
    FILE0=$2
    
    PATH1=$3
    FILE1=$4
    
    if [ ! -d $PATH0 ] ; then
            echo "The path is not exist!"
            exit 0
    else
            echo "The path is exist!"
    fi
    
    if [ ! -f "$PATH0$FILE0" ] ; then
            echo "Can't find $FILE0 this file!"
            exit 0
    else
            echo "the file is exist!"
    fi
    
    if [ ! -d $PATH1 ] ; then
            echo "The path is not exist,and creat it now!"
            mkdir $PATH1
            cp -i $PATH0$FILE0 $PATH1$FILE1
    else
            if [ ! -n "$FILE1" ] ; then #$FILE这个变量必须加""号,否则会出错,不能正确判断
                    echo "$PATH1 is exist,but FILE1 is empty!"
                    cp  $PATH0$FILE0  $PATH1
            else
                    echo "$PATH1 is exist !"
                    cp -i $PATH0$FILE0 $PATH1FILE1
            fi
    
    fi
    
    
    
    exit 0
    

      

      

    修改这个脚本的权限:

    yang@yang-VirtualBox:~/test$ sudo chmod 777 auto_cp.sh 
    

      

    执行这个脚本的方法:

    yang@yang-VirtualBox:~/test$ ./auto_cp.sh 目录A  文件A  目录B  文件B 
    

      这个脚本中有四个参数,第一个参数是需要复制的文件所在的目录,第二个参数是需要复制的目录,第三个参数是要复制到的目标路径,第四个参数复制完成后文件的名字

    1.第一种情况,目录B不存在,第四个参数为空:

     这种情况下,会创建出一个新的目录,路径为第三个参数,然后把文件A原封不动地复制到这个新创建的目录中。

    2、第二种情况,目录B不存在,文件B的名字跟文件A不同:

     这种情况下,会根据参数3的路径创建出一个目录,把文件A复制到这个新创建的目录中,并且重命名为第四个参数的名称;

    3、第三种情况,目录B存在,第四个参数为空:

     这种情况下,直接把文件A原封不动地复制到目录B中

    4.第四种情况,目录A不存在:

     报错!

    5、第五种情况,文件A不存在:

     报错!

    最后,补充一些知识点:

    实现代码一

    复制代码
    #shell判断文件夹是否存在
     
    #如果文件夹不存在,创建文件夹
    if [ ! -d "/Top" ]; then
     mkdir -p /Topfi
     
    #shell判断文件,目录是否存在或者具有权限
     
    folder="/Top"
    file="/Top/test.txt"
     
    # -x 参数判断 $folder 是否存在并且是否具有可执行权限
    if [ ! -x "$folder"]; then
     mkdir "$folder"
    fi
     
    # -d 参数判断 $folder 是否存在
    if [ ! -d "$folder"]; then
     mkdir "$folder"
    fi
     
    # -f 参数判断 $file 是否存在
    if [ ! -f "$file" ]; then
     touch "$file"
    fi
    # -n 判断一个"变量"是否有值 if [ ! -n "$file" ]; then echo "$file 变量为空!" exit 0 fi # 判断两个变量的字符串内容是否相同 if [ "$file1" = "$file2" ]; then echo "$file1 equal $file2" else echo "$file1 not equal $file2" fi
    复制代码

    实现代码二

    复制代码
    #!/bin/sh
    # 说明:判断文件是否存在
    
     
    myPath="/Top"
    myFile="/Top/access.log"
    
    # 这里的-x 参数判断$myPath是否存在并且是否具有可执行权限
    if [ ! -x "$myPath"]; then
     mkdir "$myPath"
    fi
    # 这里的-d 参数判断$myPath是否存在
    if [ ! -d "$myPath"]; then
     mkdir "$myPath"
    fi
     
    # 这里的-f参数判断$myFile是否存在
    if [ ! -f "$myFile" ]; then
     touch "$myFile"
    fi

    # 其他参数还有-n,-n是判断一个变量是否是否有值
    if [ ! -n "$myVar" ]; then
     echo "$myVar 变量为空!"
     exit 0
    fi
     
    # 判断$file字符串内容是否是“123123”相同
    if [ "$file1" = "123123" ]; then
     echo "$file1 equal $file2"
    else
     echo "$file1 not equal $file2"
    fi

    参考:https://www.cnblogs.com/weijiangbao/p/7862278.html

  • 相关阅读:
    前端面试题六
    前端面试题五
    前端面试题四
    前端面试题之三
    前端面试题分享二
    前端面试题分享一
    JS学习笔记一
    git使用学习笔记一
    常见User-Agent
    ado.net之SQLServer和Oracle (sys_cursor) 数据库链接——获取结果集方式对比
  • 原文地址:https://www.cnblogs.com/young-dalong/p/15164509.html
Copyright © 2011-2022 走看看