É possível colocar uma instrução if dentro de uma instrução If como tal?

0

Como meu título sugere, estou tentando colocar uma instrução if em uma instrução if. Parece funcionar até o último comando de eco no script que não é impresso.

Para o teste, criei um diretório com o mesmo nome do $ foldername, que é inserido por meio de um prompt. Eu estou inserindo isso durante a execução do script. Durante a execução do script eu estou escolhendo a opção para substituir o diretório, o que funciona bem. No entanto, estou confuso sobre por que, depois que a pasta foi substituída, o script não é movido para a última instrução de eco:

echo "Folder $foldername has now been created"

Isso não está sendo impresso na tela, o que sugere que o script não está saindo da seção if. Alguma idéia por quê?

#!/bin/bash
echo "Please input the folder name you would like to create then press ENTER"
read foldername

if [ -d "/home/location/test_directories/$foldername" ]
then
    echo "$foldername already exists"
    sleep 2
    echo
    echo
    echo "Do you want to overwrite this folder and start afresh?"
    read -p "Type Y overwrite the folder, or N to exit the script" -n 1 -r
    echo

    if [[ $REPLY =~ ^[Yy]$ ]]
    then
        echo "You have chosen to overwrite the folder $foldername"

        rm -rf /home/location/test_directories/$foldername; mkdir /home/location/test_directories/$foldername
        sleep 2
    else
        exit
    fi

    exit
else
    mkdir /home/location/test_directories/$foldername
fi

sleep 2
echo "Folder $foldername has now been created"
    
por neilH 28.07.2016 / 12:52

1 resposta

6

Sim, você pode aninhar if -exposições ao conteúdo do seu coração.

O problema com o seu código é, como apontado nos comentários da pergunta, as duas declarações exit . Tomar um ramo que aciona qualquer um deles terminará o script.

Tanto quanto eu posso ver, ambas as declarações exit são supérfluas e podem ser removidas.

Você também deve ter o hábito de citar duas vezes qualquer variável entregue a você pelo usuário, por exemplo, $foldername . Nesse caso, poder manipular nomes de pastas com espaços.

... ou com novas linhas, guias ou outros "separadores de campo" se você tiver modificado IFS ou com * , ? , [ que são especiais para o shell e muito mais se ativa a opção extglob em bash .

    
por 28.07.2016 / 13:06

Tags