매개변수가 없는 스크립트는 메시지를 에코해야 하지만 [닫혀지지 않습니다]

매개변수가 없는 스크립트는 메시지를 에코해야 하지만 [닫혀지지 않습니다]

매개변수가 제공되지 않은 경우에도 내 스크립트가 조건을 실행하지 않는 이유가 궁금합니다. 내 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 ]이전 현재 디렉터리와 일치 ./하고 스크립트는 빈 문자열 check 에 도달합니다 [ -z "$param" ].

관련 정보