Getopts选项仅在执行函数后回显

时间:2018-12-27 01:00:12

标签: linux bash unix

我正在创建一个称为“删除”的命令,该命令的基本功能与rm命令相同,但实际上并未删除文件,而是将它们存储在回收站文件夹中。

我正在研究“删除”命令的选项,并且在使用-v选项时遇到了一些困难。 -v选项应该具有与rm命令相同的功能;它回显一条消息,指出该文件已被删除。

我的脚本如下:

flag=0


mainprocess(){

for filename in $*

mv $filename ~/deleted/$(basename $filename)"_"$(stat -c%i $filename)
flag=1

done

脚本的getopts部分如下所示

while getopts v opt
do
shift
case $opt in

v)
for file in $*
do
if [ $flag -eq 1 ] 
then
echo "The file $file has been deleted" 
fi
done
 ;;
esac

if [ $flag -eq 0 ]
then
mainprocess $*
fi

我对-v选项的处理方式是,一旦运行mainprocess函数,它将把flag变量设置为1,然后它会回显该文件已被删除的消息。 每当我使用-v选项运行命令时,就永远不会回显“文件已删除”消息。我尝试同时显示标志变量的值,即使我运行mainprocess命令,该值始终为0。

1 个答案:

答案 0 :(得分:1)

与其添加代码来告诉用户正在执行的操作,不如使用mv本身的-v选项。像这样:

VERBOSE=
while getopts v opt
do
    shift
    case $opt in

        v) VERBOSE=-v ;;
    esac
done

for filename in $*
do
    mv $VERBOSE $filename '~/deleted/$(basename $filename)"_"$(stat -c%i $filename)'
done