paulo1205
(usa Ubuntu)
Enviado em 04/06/2013 - 20:42h
O shell permite encadear vários comandos numa linha de comando só por meio de cinco diferentes operadores colocados entre tais comandos: ";", "&", "|", "&&" e "||".
";" faz com que os comando sejam executados em sequência. "&", com que sejam executados em paralelo. "|" também faz com que a execução seja simultânea, mas direcionando a saída do comando que estiver à esquerda na entrada do comando que vier à direita (o famoso
pipe). "&&" e "||" executam comandos em sequência (como o ";"), mas o comando à direita de "&&" só é executado se o resultado do comando à esquerda tiver sido verdadeiro (código de terminação igual a zero), ao passo que "||" faz exataemnte o oposto, executando o comando à direita se o resultado do comando à esquerda tiver sido falso (código de terminação diferente de zero).
No caso de
[ -d $BKPQUALIDADE ] || mkdir -p $BKPQUALIDADE
, o que se tem é uma forma (burra) de executar o comando de criação de diretório (à direita) se o diretório não existir (quando o resultado do comando de teste, à esquerda, for falso). É uma forma curta de fazer o equivalente ao seguinte bloco.
if [ -d $BKPQUALIDADE ]; then
mkdir -p $BKPQUALIDADE
fi
E por que eu disse que é burra? Porque a opção "-p" de
mkdir serve justamente para dispensar o teste de existência que foi colocando antes do comando. Tal teste faria sentido se tal opção tivesse sido omitida. Mesmo assim, seria ineficiente pois, assim como
mdir,
[ também é um comando externo; logo seriam necessários dois comandos externos para criar o diretório, quando um seria plenamente suficiente.
Uma solução parecida com a original, ligeiramente mais eficiente (em particular se o diretório já existir), seria substituir o comando externo
[ com
[[, que é interno ao shell. Obviamente a opção "-p" também poderia ser suprimida de
mkdir nesse caso.
[[ -d $BKPQUALIDADE ]] || mkdir $BKPQUALIDADE