1

提前 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 ,它跳过第一个分支并运行第二个似乎很好,但是当我 ls ~/rubbish 时,所有文件仍然存在。

编辑感谢您的帮助!Sputnik,erm 除了添加分号之外,真的看不出您在评论中所做的更改?而inductiveLoad,你的答案是王牌,但我找不到正确工作的方法,失去了耐心,变得超级基本。像这样......

#!/bin/bash

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

1 回答 1

2

我会用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
于 2012-11-21T14:09:41.057 回答