请教这个小脚本哪出错了,谢谢!

请教这个小脚本哪出错了,谢谢!

#/bin/bash
#备份文件或者目录的小程序
B_dir="li"  #定义一个备份目的目录
DATE=$(date +%b%d) #定义日期的表示为月日
dobackup ( )  {
  if  [ -d /$B_dir ] && [-s /$B_dir ]  #测试备份目的目录存在并且不是空的
    then
    tar  cfz  /$B_dir/$DATE-$A_dir.tgz  /$A_dir/*
   else
    echo "storage directory may not be mounted."
    exit 1
    fi
    exit 0
}
for  A_dir in "$@"
do
      dobackup  $A_dir
done

脚本如上,我的目的目录和需备份目录都存在且不空,为什么shell总是提示:
storage directory may not be mounted呢?
小弟初学shell请指点。谢谢!!      
函数的用法:
复制内容到剪贴板
代码:
#!/bin/bash

function fib {
    [ $1 = 0 -o $1 = 1 ] && {
        echo $1
        return
    }
    local x1=0
    local x2=1
    local x3=
    local i=
    for ((i = 1; i <= $1 - 1; ++i))
    do
        x3=$((x1 + x2))
        x1=$x2
        x2=$x3
    done
    echo $x3
}

xx=0
while [ $xx -le 20 ]; do
    printf "fib(%2d) = %d\n" $xx $(fib $xx)
    xx=$((xx + 1))
done
      
不好意思哦dearvoid兄。对照你给的例子又看了不同教材关于函数使用的的章节,想了几天我还是不清楚我那错了,请指点。哪天你来了广州兄弟请你喝酒!!!!!!      
我想应该是定义目录和下面调用时出了问题,因为当我换为文件的时候是可以的。这样定义目录为什么不行呢?      
函数的参数跟 shell 脚本的参数都是用 $1, $2, ... 来引用的,你的原意是将 $A_dir 作为参数传给 dobackup() 函数,但实际上 dobackup() 是直接引用的 $A_dir,意即:调用 dobackup() 时你大可不必加 $A_dir,直接 dobackup 即可      
你函数的具体功能没有仔细看,我说的主要是语法      
我试试      
-d 是判断文件是否为一个已经存在的目录,
-s 是判断文件是否为一个已经存在的不为空的文件,
两者同时为真是不可能的,所以你的 [ -d /$B_dir ] && [-s /$B_dir ] 永远都不会为真值,也就执行不到
tar cfz /$B_dir/$DATE-$A_dir.tgz /$A_dir/*
拙见:去掉 [ -s /$B_dir ]      
是不是要把 tar cfz /$B_dir/$DATE-$A_dir.tgz /$A_dir/* 中的$A_dir都改成$1阿!      
#/bin/bash
#备份文件或者目录的小程序
B_dir="li" #定义一个备份目的目录
DATE=$(date +%b%d) #定义日期的表示为月日
dobackup ( ) {
if [ -d /$B_dir ] && [ `ls /$B_dir`] #测试备份目的目录存在并且不是空的
then
tar cfz /$B_dir/$DATE-$A_dir.tgz /$A_dir/*
else
echo "storage directory may not be mounted."
exit 1
fi
exit 0
}
for A_dir in "$@"
do
dobackup $A_dir
done