Else not Executing

0

No meu script, eu transformo os dados para um formato mais legível. Mas estou tendo um problema. Se nenhum argumento for digitado, apenas o script, eu quero que ele volte "Por favor, digite um nome de arquivo" que eu fiz. Mas, por algum motivo, não será exibido quando testado. Eu fiz isso dizendo ao sistema se o argumento é maior que 0, execute, caso contrário, ecoar a mensagem.

* Não estou procurando conselhos sobre o código de substituição. Por motivos específicos, não pode ser alterado, por isso, não dê conselhos sobre essa peça.

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
    
por Tanner Di Bella 19.07.2015 / 18:59

2 respostas

2

Pense na primeira linha do seu script: for myvar . Quantas vezes esse for loop será executado se não houver argumentos?

    
por 19.07.2015 / 19:35
-1

Yes, you should first check if there are any arguments or not and then proceed.

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
    
por 19.07.2015 / 21:12