一个复制文件的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

原文地址:https://www.cnblogs.com/young-dalong/p/15164509.html