Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Getopts选项,仅在执行函数时回显_Linux_Bash_Unix - Fatal编程技术网

Linux Getopts选项,仅在执行函数时回显

Linux Getopts选项,仅在执行函数时回显,linux,bash,unix,Linux,Bash,Unix,我正在创建一个名为“remove”的命令,该命令的功能基本上与rm命令相同,但它不是实际删除文件,而是将文件存储到回收站文件夹中 我正在处理“remove”命令的选项,并且在使用-v选项时遇到了一些困难。v选项应该具有与rm命令相同的功能;它回显一条消息,表示文件已被删除 我的脚本如下所示: flag=0 mainprocess(){ for filename in $* mv $filename ~/deleted/$(basename $filename)"_"$(stat -c%i

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

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

我的脚本如下所示:

flag=0


mainprocess(){

for filename in $*

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

done
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
脚本的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选项运行命令时,“文件已被删除”消息将永远不会回显。我还尝试显示flag变量的值,即使我运行mainprocess命令,它也始终为0。

不要添加代码来告诉用户正在做什么,只需使用mv本身的-v选项即可。大概是这样的:

flag=0


mainprocess(){

for filename in $*

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

done
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

您应该双引号引用变量引用(如果使用wef建议,则“$VERBOSE”除外),并使用“$@”而不是“$*”。将指出问题所在。