A chamada de stat
é útil apenas para obter informações que você não pode obter de comandos básicos do shell, como a hora ou as permissões de modificação de um arquivo. Para testar apenas a existência de um arquivo, use o comando test
, também escrito [
. Este comando é construído na maioria das shells.
if [ -e last_dump.sql ]; then mysql -D my_database < last_dump.sql; fi
O teste -e
testa se o arquivo especificado existe; o arquivo pode ser de qualquer tipo, incluindo links simbólicos quebrados. Se você quiser apenas arquivos regulares (incluindo links simbólicos para arquivos regulares), use -f
.
Usar [ … ]
é preferível a stat
por vários motivos:
- Chamar
stat
apenas para descartar sua saída é uma maneira ofuscada de testar se existe um arquivo. Pense nas pessoas que lerão o código (como você em seis meses): [ -e file ]
diz claramente que "existe file
?", Enquanto chamando stat
diz "me dê os metadados do arquivo" e testar a existência é apenas um efeito colateral.
-
[ … ]
é um comando padrão, enquanto stat
não existe em todas as variantes do Unix e possui opções de linha de comando incompatíveis onde existe. Neste caso específico, não é tão ruim porque você não está usando nenhuma opção de linha de comando.
-
stat
é mais lento, pois é um comando externo.
Você também deve evitar usar &&
quando quiser dizer "se". Isso também é marcadamente menos legível. Também é menos robusto, pois sob set -e
(dizendo ao shell para sair se algum programa quebrar), [ -e last_dump.sql ] && mysql …
aborta o script se last_dump.sql
não existir, enquanto if [ -e last_dump.sql ]; then …; fi
continua.