Linux删除脚本

时间:2010-11-11 12:54:50

标签: linux macos bash shell

我编写了一个shell脚本(名为Trash.sh),在运行时会显示我的'dustbin'目录中的所有文件,并询问用户是否希望逐个删除每个文件。脚本如下:

#if directory is empty, display message
if test ! -f ~/dustbin/* 
then
echo "Directory is empty"
#if directory is not empty, then display each item and ask to delete
else
for resfile in ~/dustbin/* #for each file in directory, store it in resfile variable
do
    if test -f $resfile ; then #if a file exists
    echo "Do you want to delete $resfile?"
    echo "Enter y or n"
    read ans #store user input in ans variable
    if test $ans = y ; then
    rm $resfile
    echo "File $resfile was deleted"
    fi
    fi
done
fi

这对我来说很好。当用户键入sh Trash.sh脚本运行正常时,将显示每个文件,并且将要求用户删除它。但是,我想添加的是用户输入sh Trash.sh -a的选项,以及目录中的所有文件在没有确认的情况下自动删除。

我对如何实现这一点感到有些困惑。有什么想法吗?

ps - 我正在使用Mac OS X 10.6.4并通过终端

完成所有工作

5 个答案:

答案 0 :(得分:2)

尝试:

if [ x"$1" = x"-a" ]; then
  rm -rf ~/dustbin/*;
  exit 0;
fi

位于脚本顶部

答案 1 :(得分:2)

我建议使用getopts捕获-a选项。然后测试它并使用rm -f(强制,参见手册页)。 Mac OS上的shell与我习惯的有点不同,但Linux上bash中的处理选项看起来像这样:

force_all='f';
while getopts "ahv" arg
do
    case $arg in
        a) force_all='t';;
        v) echo "$SCRIPT: $VERSION"; exit;;
        h|*) echo "$SCRIPT: $HELP"; exit;;
    esac
done

此示例显示如何为版本实现-v,为-h实现-h。

答案 2 :(得分:2)

首先要学习如何在bash脚本中进行参数解析。

简短的回答是使用变量$ 1,$ 2,$ N($ 0是您正在执行的bash脚本的名称)。 $ *是包含所有参数的字符串。这是您在bash脚本和自定义bash函数中获取参数的方法。在您的情况下,像

这样的简单测试
if [[ $1 == "-a" ]]
then
  #profit!
fi

很长的答案是使用和学习getopts:http://www.mkssoftware.com/docs/man1/getopts.1.asp

答案 3 :(得分:2)

我还建议使用纯rm来要求删除:

rm -riv ~/dustbin/*

如其他答案中所述,毫无疑问地删除:

rm -rfv ~/dustbin/*

答案 4 :(得分:1)

检查$1是否为-a。如果是,请删除所有文件,然后退出。