LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 990|回复: 7

谁能帮下刚入门的菜鸟?谢谢啦

[复制链接]
发表于 2008-6-13 20:45:22 | 显示全部楼层 |阅读模式
#! /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 是什么命令啊?

知道的就请帮帮我吧
发表于 2008-6-13 20:56:06 | 显示全部楼层
[ $# -eq 0 ]是校验$#的值是否等于后面的0,如果是就执行下面的,不是就跳出循环。
fi是if语句的结束符号,
我也是刚学的,共同进步吧,  
还有就是多看看基础方面的书,像$#   $@等变量不看书是很难搞懂的....
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-13 21:03:03 | 显示全部楼层
Post by yongfans;1861428
[ $# -eq 0 ]是校验$#的值是否等于后面的0,如果是就执行下面的,不是就跳出循环。
fi是if语句的结束符号,
我也是刚学的,共同进步吧,  
还有就是多看看基础方面的书,像$#   $@等变量不看书是很难搞懂的....


那while [ $# -eq 0 ]
do
是不是校验的是之前输入的是否为空白??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-13 21:10:01 | 显示全部楼层
还有就是
。。。
if [ -d $s_dir ]
then
if [ -d $d_dir]
。。
中的 [ -d $d_dir]是不是读取d_dir??
回复 支持 反对

使用道具 举报

发表于 2008-6-13 21:23:11 | 显示全部楼层
http://www.linuxsir.cn/main/?q=node/140
建议去看看这本书,我正在看,很好的,[ -d $d_dir ]是校验如果$d_dir是个目录的话就执行then后面的命令。变量有很多种,什么环境变量,shell变量以及位置变量等等。还是多看书才行,你问的这些大部分是test的参数,去书里面查下就知道了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-13 21:33:44 | 显示全部楼层
谢谢你 我这就去看看
回复 支持 反对

使用道具 举报

发表于 2008-6-16 17:39:55 | 显示全部楼层
这个脚本如果按照下面的格式输入没有问题吗?
sh Xcopy.sh source_path dest_path
回复 支持 反对

使用道具 举报

发表于 2008-6-17 20:02:57 | 显示全部楼层
学习中,先把书啃完!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表