不带参数的脚本应该回显一条消息,但它没有

不带参数的脚本应该回显一条消息,但它没有

我想知道为什么在没有提供参数的情况下我的脚本仍然不运行条件。我认为这可能是我的 if 语句的顺序,但我不确定。有什么建议吗?这似乎不是像错位空格这样的简单错误。

for param in "$@";
do

    if [[ -n $confirm ]]; #this is a getopts switch asking for confirmation like rm -i
    then
        #asks user whether to confirm deletion
        if [ $answer != [Yy]* ]];
        then
            continue #go to next param argument
        fi
    fi

    if [ -z "$param" ] #if no argument has been specied,
    then
         #print an error that additional operand is needed.

    elif [ -d ./$param ] #if a directory name is specified
    then
        if [[ -n $recursive]] #getops recursive switch, like rm -r
        then
            #recursively delete a directory
        fi
        #error message about deleting directory without -r switch
    elif [ ! -e ./$param ] 
    then
        #If not an existing file either then print error that there is no such file or directory
    elif [[ $param = "safe_rm" ]] || [[ $param = "safe_rm_res" ]]
    then
        #This prevents script from trying to delete itself or restore script
    fi


    if [[ -n $verbose ]] third and final getopts switch, similar to rm -v
    then
        #message confirming deletion
    fi
done

我的代码是关于制作回收站的,它基于命令rm,其中脚本也具有和使用开关,其方式与rm -i -v和相同-r。上面的 if 语句根据参数改变了我处理删除的方式。第一个 if 语句是关于参数是否是目录。第二个是是否是文件,第三个是是否为空,第四个是参数是否为自身(删除自身)

答案1

for用于迭代参数的循环将在满足其条件(列表末尾)时终止并转到其语句done。当脚本到达for不带参数的循环时,列表​​的开头与结尾相同,并且循环的条件为 false。

在原始示例中,如果给定空字符串,循环内部的命令将产生不正确的结果。如果变量“param”为空,第一个案例[ -d ./$param ]将匹配之前的当前目录./,并且脚本到达空字符串检查[ -z "$param" ]

相关内容