Linux shell脚本删除/恢复/垃圾箱

时间:2012-11-21 13:58:41

标签: shell

提前TIA提供任何帮助。这是课程作业,所以进一步阅读总是受到赞赏!

基本上我必须在bash中编写3个脚本。一个'删除'文件到我的创建目录(〜/ rubbish)。另一个需要恢复它,第三个永久删除它。

我有点困在我的垃圾剧本上。它似乎并没有实际删除任何东西,因为ls显示仍然存在的所有文件。我也遇到了为用户添加的标记(-a)一次性垃圾邮件的问题,如果没有那么它应该要求确认每个找到的文件。

这就是我现在的位置......

#!/bin/bash
if [ "$1" = "-a" ] 
then
cd ~/rubbish
rm ~/rubbish
mkdir ~/rubbish
echo "All files have been deleted"
else
cd ~/rubbish
ls > rubbish
for line in 'cat rubbish'
do
echo "Do you want to delete?" $line
echo "Y/N"
read ans
case "ans" in
Y|y ) rm $line;;
N|n ) " ";;
esac
done
fi

正如我所说的,它没有看到-a,它跳过了第一个分支,并且在第二个看起来很好的情况下运行,但是当我/〜垃圾时,所有文件仍然存在。

编辑感谢您的帮助!除了添加半冒号之外,人们还没有真正看到你在评论中改变了什么?和inductiveLoad,你的答案是王牌,但我找不到一种正确的工作方式,失去耐心和基本的优步。像这样....

#!/bin/bash

if [ "$1" = "-a" ] ;
then 
cd ~/rubbish;
rm ~/rubbish/*;
echo "All files have been deleted";
else
  rm -i ~/rubbish/* ;
fi

1 个答案:

答案 0 :(得分:1)

我会使用getopts来解析选项,因为它允许更多的灵活性,任意数量的任意排序参数,带数据的选项(而不是标志 - 请参阅下面的-d选项)和如果你给出错误的选择,也可以打印帮助。

usage()
{
cat <<EOF
usage: $0 options

This script deletes/restores/trashes files.

OPTIONS:
    -h  Show this message
    -a  Trash it all!
    -d  Rubbish directory
EOF
}

trashAll=false
rubbishDir="~/rubbish"

while getopts "ad:" OPTION; 
do
  case "$OPTION"
  in
        h)  usage
            exit 1;;
        a)  trashAll=true;;
        d)  rubbishDir=${OPTARG};;
        ?)  usage
            exit 1;;
    esac
done

if $trashAll
then
    #trash it all
    echo "Trashing all in ${rubbishDir}!"
fi