|
#! /bin/bash
#脚本名称:Xcopy.sh
#脚本作者:SUN_Knight
#脚本功能:将源目录的目录结构、权限、修改时间等完整的复制到目标目录。
#脚本备注:写这个脚本的目的有三个
# 1.练习写脚本
# 2.以后装Dubuntu等系统时,将/home单独挂载到一个分区时方便复制
# 3.方便以后需要完整复制时可以偷懒,嘿嘿
#
#最后还要感谢LinuxSir上lastart兄和stoneman兄的帮助
#lastart和stoneman两位兄弟分别提供了两种不同的"是否为绝对路径"的判断方法
#因为修改现有代码方便,最终采用了lastart兄弟的方案,再次表示感谢。
case "$#" in
#向导模式
0) echo "将要复制目录结构"
echo "请输入源目录绝对路径:"
read s_dir
echo "请输入目标目录绝对路径:"
read d_dir
while [ $# -eq 0 ]
do
if [ "${s_dir#/}" = "${s_dir}" ]
then
echo "错误的输入:"
echo " $s_dir不是绝对路径"
if [ "${d_dir#/}" = "${d_dir}" ]
then
echo " $d_dir不是绝对路径"
echo "因为您错误的输入,程序将退出。"
echo "您可以检查正确的输入后重新运行本程序。"
break
fi
echo "因为您错误的输入,程序将退出。"
echo "您可以检查正确的输入后重新运行本程序。"
break
else
if [ "${d_dir#/}" = "${d_dir}" ]
then
echo "错误的输入:"
echo " $d_dir不是绝对路径"
echo "因为您错误的输入,程序将退出。"
echo "您可以检查正确的输入后重新运行本程序。"
break
else
if [ -d $s_dir ]
then
if [ -d $d_dir ]
then
echo "请确认:"
echo "您将要把$s_dir目录完整复制到$d_dir目录中"
echo "yes/no?"
read yn
if [ $yn = "yes" ]
then
( cd $s_dir; tar -cvf - . ) | ( cd $d_dir; tar -xvf - )
break
elif [ $yn = "no" ]
then
break
else
echo "您的输入:${yn}不正确"
continue
fi
else
echo "错误的输入:"
echo " $d_dir不是目录"
echo "因为您错误的输入,程序将退出。"
echo "您可以检查正确的输入后重新运行本程序。"
break
fi
else
echo "错误的输入:"
echo " $s_dir不是目录"
if [ -d $d_dir ]
then
echo "因为您错误的输入,程序将退出。"
echo "您可以检查正确的输入后重新运行本程序。"
break
else
echo " $d_dir不是目录"
echo "因为您错误的输入,程序将退出。"
echo "您可以检查正确的输入后重新运行本程序。"
break
fi
fi
fi
fi
done
;;
#命令模式
2) if [ "${s_dir#/}" = "${s_dir}" ]
then
echo "错误的输入:"
echo " $s_dir不是绝对路径"
if [ "${d_dir#/}" = "${d_dir}" ]
then
echo " $d_dir不是绝对路径"
echo "因为您错误的输入,程序将退出。"
echo "您可以检查正确的输入后重新运行本程序。"
else
echo "因为您错误的输入,程序将退出。"
echo "您可以检查正确的输入后重新运行本程序。"
fi
else
if [ "${d_dir#/}" = "${d_dir}" ]
then
echo "错误的输入:"
echo " $d_dir不是绝对路径"
echo "因为您错误的输入,程序将退出。"
echo "您可以检查正确的输入后重新运行本程序。"
else
if [ -d $1 ]
then
if [ -d $2 ]
then
( cd $1; tar -cvf - . ) | ( cd $2; tar -xvf - )
else
echo "错误的输入:"
echo " $2不是目录"
echo "请您使用以下命令查看帮助:"
echo "Xcopy.sh help"
fi
else
echo "错误的输入:"
echo " $1不是目录"
if [ -d $2 ]
then
echo "请您使用以下命令查看帮助:"
echo "Xcopy.sh help"
else
echo " $2不是目录"
echo "请您使用以下命令查看帮助:"
echo "Xcopy.sh help"
fi
fi
fi
fi
;;
#帮助与错误提示
*) if [ $# -eq 1 ]
then
if [ $1 = "help" ]
then
echo "Xcopy.sh 帮助:"
else
echo "错误的参数!"
fi
else
echo "错误!"
fi
echo "Xcopy.sh [[参数]|[源目录 目标目录]]"
echo "Xcopy.sh 向导模式"
echo "Xcopy.sh help 查看帮助"
echo "Xcopy.sh 源目录 目标目录 命令模式"
;;
esac
上面的SHELL是我在精华帖看到的
感觉蛮实用的,就开始学习了。
我想了好久,通过查资料也懂了不少就是有2个地方不懂
。。。
while [ $# -eq 0 ]
do
。。。。
这里的[ $# -eq 0 ]是什么意思??
还有就是FI 是什么命令啊?
知道的就请帮帮我吧 |
|