Estações de trabalho on-line OnWorks Linux e Windows

Logotipo

Hospedagem online grátis para estações de trabalho

<Anterior | Conteúdo | Próxima>

Programação Defensiva

É importante verificar as suposições ao programar. Isso significa uma avaliação cuidadosa do status de saída de programas e comandos usados ​​por um script. Aqui está um exemplo, baseado em uma história verídica. Um infeliz administrador de sistema escreveu um script para realizar uma tarefa de manutenção em um servidor importante. O script continha as seguintes duas linhas de código:


cd $ dir_name rm *

cd $ dir_name rm *


Não há nada intrinsecamente errado com essas duas linhas, desde que o diretório nomeado na variável, nome_dir, existe. Mas o que acontece se isso não acontecer? Nesse caso, o cd o comando falha e o script continua para a próxima linha e exclui os arquivos do diretório de trabalho atual. Não é o resultado desejado! O infeliz administrador destruiu uma parte importante do servidor por causa dessa decisão de design.

Vejamos algumas maneiras pelas quais esse design pode ser aprimorado. Primeiro, pode ser sábio fazer a execução de rm dependente do sucesso de cd:


cd $ dir_name && rm *

cd $ dir_name && rm *


Desta forma, se o cd comando falha, o rm comando não é executado. Isso é melhor, mas ainda deixa em aberto a possibilidade de que a variável, nome_dir, não está definido ou está vazio, o que resultaria na exclusão dos arquivos do diretório pessoal do usuário. Isso também pode ser evitado verificando se nome_dir na verdade contém o nome de um diretório existente:



[[-d $ dir_name]] && cd $ dir_name && rm *

[[-d $ dir_name]] && cd $ dir_name && rm *


Freqüentemente, é melhor incluir lógica para encerrar o script e relatar um erro quando uma situação como a acima ocorrer:



# Exclua arquivos no diretório $ dir_name if [[! -d "$ dir_name"]]; então

echo "Não existe tal diretório: '$ dir_name'"> & 2 exit 1

fi

E se ! cd $ dir_name; então

echo "Não é possível fazer cd para '$ dir_name'"> & 2 saída 1

fi

E se ! rm *; então

echo "Falha na exclusão do arquivo. Verifique os resultados"> & 2 saída 1

fi

# Exclua arquivos no diretório $ dir_name if [[! -d "$ dir_name"]]; então

echo "Não existe tal diretório: '$ dir_name'"> & 2 exit 1

fi

E se ! cd $ dir_name; então

echo "Não é possível fazer cd para '$ dir_name'"> & 2 saída 1

fi

E se ! rm *; então

echo "Falha na exclusão do arquivo. Verifique os resultados"> & 2 saída 1

fi


Aqui, verificamos o nome, para ver se é o de um diretório existente, e o

Erros Lógicos


cesso do cd comando. Se qualquer um deles falhar, uma mensagem de erro descritiva será enviada ao erro padrão e o script será encerrado com um status de saída um para indicar uma falha.


Top OS Cloud Computing na OnWorks: