shell编程小问题

来源:百度知道 编辑:UC知道 时间:2024/06/07 01:44:07
我的目的是格式化我的usb的读卡器上的卡,然后拷贝文件到这个卡上,且顺序插拔卡,达到格式化每个卡,拷贝文件到这个卡上的目的,且提示输出拷贝了几张卡,现在问题是,我的这个if是不是不对啊,也就是说当识别到/disk的时候,但是没有挂载上呢,会报错一句 umount //dev/sdb1 没有找到设别,所以1个卡会在if里面执行2次。请高手指点下我的这个错误

declare -i a=1
declare -i b=0

while [ 1 ]
do
if [ -d /media/disk ]
then
echo -e "\n正在复制第$a块CF卡"
umount /dev/sdb1
echo -n mke2fs /dev/sdb1
mount /dev/sdb1 /mnt/usb
#数据保存目录 加载的usb设备位置
cp /home/jhgjbm/Desktop/k5b-ET/* /mnt/usb
umount /dev/sdb1
b=0
a=a+1
else
if [ "$b" = 0 ]
then
echo -e "\n请插入CF卡"
b=1
fi
fi
done

-d 只能判断目录是不是可以被使用,可以理解为能不能cd进去。如果存在/media/disk但是没有mount,还是可以cd进去的,也就是-d会返回真。

比较好的做法是在脚本里创建自己的目录,自己维护。比如

TMPDIR=/media/mytmp
DEVICE=/dev/sdb1
SOURCE=/some/where

trap (umount $TMPDIR &>/dev/null; rm -rf $TMPDIR) 2 3 15

if [ -d $TMPDIR ]; then
echo "$TMPDIR already exists, maybe previous instant exits abnormally" >&2
exit
fi

mkdir $TMPDIR || exit
[ !-d $TMPDIR ] || exit

while true; do
if mke2fs -j $DEVICE; then
if mount $DEVICE $TMPDIR; then
echo "start copying" >&2
rsync -avzP $SOURCE $TMPDIR
umount $TMPDIR
else
echo "unexpected error" >&2
fi
else
echo 'please insert an disk and input sth to continue'
read ok
fi
done