写一个关于复制文件的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不存在,第四个参数为空:

一个复制文件的Shell脚本_重命名

 

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

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

一个复制文件的Shell脚本_可执行_02

 

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

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

一个复制文件的Shell脚本_字符串_03

 

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

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

一个复制文件的Shell脚本_目标路径_04

 

 报错!

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

一个复制文件的Shell脚本_文件复制_05

 

 报错!

 

最后,补充一些知识点:

实现代码一



一个复制文件的Shell脚本_可执行_06

#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


一个复制文件的Shell脚本_可执行_06


实现代码二



一个复制文件的Shell脚本_可执行_06

#!/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