-1

嘿,所以我有一些代码可以解决下面的问题,但我被卡住了它不起作用,我真的不知道我在做什么。

此脚本应删除垃圾箱目录的内容。如果使用 -a 选项,脚本应该从垃圾箱中删除所有文件。否则,脚本应将垃圾箱中的文件名一一显示,并要求用户确认是否应将其删除

#!/bin/sh

echo " The files in the dustbin are : "
ls ~/TAM/dustbin

read -p " Please enter -a to delete all files else you will be prompted to delete one    by one : " filename

read ans
if ["filename" == "-a"]
cat ~/TAM/dustbin
   rm -rf*
else
   ls > ~/TAM/dustbin
for line in `cat ~/TAM/dustbin`
do
   echo "Do you want to delete this file" $line
   echo "Y/N"
   read ans
   case "ans" in
      Y) rm $line ;;
      N) "" ;;
esac

编辑版本

 if test ! -f ~/TAM/dustbin/*
then
echo "this directory is empty"
else
for resfile in ~/TAM/dustbin/*
do
   if test -f $resfile ; then
   echo "Do you want to delete $resfile"
   echo "Y/N"
   read ans
   if test $ans = Y ; then 
   rm $resfile
   echo "File $resfile was deleted"
   fi
   fi
done
fi

但是,这可行现在我得到两个错误之一

第 4 行需要二元运算符或第 4 行:对许多参数

4

3 回答 3

1

我看到一个明显的错误:

rm -rf*

什么时候应该

rm -rf *

被询问每次文件删除 - 添加-i

rm -rfi *
于 2012-11-21T10:16:22.247 回答
0

这里有很多问题:

  • *在in之前缺少一个空格rm。需要该空间,以便 shell 可以识别通配符并对其进行扩展。

  • 您真的要删除当前目录中的所有文件吗?如果没有,请指定路径rm -rf /path/to/files/*cd进入目录,最好使用cd /path/to/files || exit 1.

  • 我不明白脚本的逻辑。您显示一个垃圾箱,但如果用户提供-a,您将用所有非隐藏文件 ( ls > dustbin) 覆盖它。那是你要的吗?

于 2012-11-21T10:19:25.110 回答
0

首先,case "ans" of只是将一个字符串“ans”匹配到其他字符串,这显然是错误的,你需要case $ans of获取变量的值ansif ["filename" == "-a"]也是两个字符串之间的比较,这总是错误的。脚本的第一个参数可以作为$1(第二个 as$2以此类推)访问。

Please read man 1 sh to get the basics of shell programming (all of the above notes can be found there).

于 2012-11-21T10:22:18.753 回答