매개변수가 제공되지 않은 경우에도 내 스크립트가 조건을 실행하지 않는 이유가 궁금합니다. 내 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" ]
.