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.