否则不执行

否则不执行

在我的脚本中,我将数据转换为更易读的格式。但我有一个问题。如果没有输入参数,只输入脚本,我希望它返回我已经完成的“请输入文件名”。但由于某种原因,测试时不会显示。我通过告诉系统如果参数大于 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 myvarfor如果没有参数,这个循环会执行多少次?

答案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

相关内容