그렇지 않으면 실행되지 않습니다.

그렇지 않으면 실행되지 않습니다.

내 스크립트에서는 데이터를 더 읽기 쉬운 형식으로 변환합니다. 그런데 질문이 있어요. 매개 변수를 입력하지 않고 스크립트만 입력한 경우 내가 수행한 "파일 이름을 입력하십시오"를 반환하고 싶습니다. 그러나 어떤 이유로 테스트할 때 표시되지 않습니다. 매개변수가 0보다 크면 실행하고, 그렇지 않으면 메시지를 에코하도록 시스템에 지시하여 이를 수행합니다.

*코드 교체에 대한 조언을 구하는 것이 아닙니다. 특별한 사유로 인해 변경이 불가능하므로 본 작품에 대한 제안은 자제해 주시기 바랍니다.

for myvar
do

        if [ $# -gt 0 ]
        then

                        if [ -e "$myvar" ]
                        then :
                        else
                                echo "$myvar cannot be found."
                        exit
                        fi

                echo "This is the filname:" $myvar 

                cut -f1 -d, $myvar > social_security
                cut -f2 -d, $myvar > last_name
                cut -f3 -d, $myvar > first_name
                sed 's/^ *//' last_name > last_name_draft
                sed 's/^ *//' first_name > first_name_final
                sed 's/-//' social_security > social_security_draft
                sed 's/-//' social_security_draft > social_security_final
                sed 's/$/:/' last_name_draft > last_name_final
                paste -d\  first_name_final last_name_final social_security_final  > final_draft
                sed '1d' final_draft > final
                cat final

                echo -en '\n'   

        else
                echo "Please enter a filename."
        fi
done

답변1

스크립트의 첫 번째 줄을 고려해보세요: for myvar. for이 루프는 매개변수 없이 몇 번이나 실행됩니까?

답변2

예, 계속 진행하기 전에 인수가 있는지 확인해야 합니다.

if [ $# -gt 0 ]
then
    for myvar
    do
        if ! [ -e "$myvar" ]
            echo "$myvar cannot be found."
            exit
        fi

        echo "This is the filname:" $myvar 

        cut -f1 -d, $myvar > social_security
        cut -f2 -d, $myvar > last_name
        cut -f3 -d, $myvar > first_name
        sed 's/^ *//' last_name > last_name_draft
        sed 's/^ *//' first_name > first_name_final
        sed 's/-//' social_security > social_security_draft
        sed 's/-//' social_security_draft > social_security_final
        sed 's/$/:/' last_name_draft > last_name_final
        paste -d\  first_name_final last_name_final social_security_final  > final_draft
        sed '1d' final_draft > final
        cat final

        echo -en '\n'   
    done
else 
    echo "Please enter a filename."
fi

관련 정보