Linux Getopts选项,仅在执行函数时回显
我正在创建一个名为“remove”的命令,该命令的功能基本上与rm命令相同,但它不是实际删除文件,而是将文件存储到回收站文件夹中 我正在处理“remove”命令的选项,并且在使用-v选项时遇到了一些困难。v选项应该具有与rm命令相同的功能;它回显一条消息,表示文件已被删除 我的脚本如下所示: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
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”除外),并使用“$@”而不是“$*”。将指出问题所在。