我编写了一个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并通过终端
完成所有工作答案 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
。如果是,请删除所有文件,然后退出。