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