基本上我必须在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
答案 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