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