<Anterior | Conteúdo | Próxima>
Expressões de arquivo
As seguintes expressões são usadas para avaliar o status dos arquivos:
Tabela 27-1: Expressões de arquivo de teste
A expressão é verdadeira se:
A expressão é verdadeira se:
file1 -E se file2 arquivo1 e arquivo2 têm os mesmos números de inode (os dois
nomes de arquivos referem-se ao mesmo arquivo por meio de links físicos).
file1 -nt file2 o arquivo1 é mais recente que o arquivo2.
file1 -ot file2 o arquivo1 é mais antigo que o arquivo2.
-b lima lima existe e é um arquivo de bloco especial (dispositivo).
-c lima lima existe e é um arquivo de caractere especial (dispositivo).
-d lima lima existe e é um diretório.
-e lima lima existe.
-f lima lima existe e é um arquivo normal.
-g lima lima existe e é set-group-ID.
-G lima lima existe e pertence ao ID de grupo efetivo.
-k lima lima existe e tem seu "sticky bit" definido.
-L lima lima existe e é um link simbólico.
-O lima lima existe e pertence ao ID do usuário efetivo.
-p lima lima existe e é um pipe nomeado.
-r lima lima existe e é legível (tem permissão de leitura para o usuário efetivo).
-s lima lima existe e tem um comprimento maior que zero.
-S lima lima existe e é um soquete de rede.
-t fd fd é um descritor de arquivo direcionado de / para o terminal. Isso pode ser usado para determinar se a entrada / saída / erro padrão está sendo redirecionado.
-u lima lima existe e é setuid.
-w lima lima existe e é gravável (tem permissão de gravação para o usuário efetivo).
-x lima lima existe e é executável (tem permissão para executar / pesquisar para o usuário efetivo).
Aqui, temos um script que demonstra algumas das expressões de arquivo:
#! / Bin / bash
# test-file: Avalie o status de um arquivo FILE = ~ / .bashrc
if [-e "$ FILE"]; então
if [-f "$ FILE"]; então
echo "$ FILE é um arquivo normal."
fi
if [-d "$ FILE"]; então
echo "$ FILE é um diretório."
fi
if [-r "$ FILE"]; então
echo "$ FILE está legível."
fi
if [-w "$ FILE"]; então
echo "$ FILE é gravável."
fi
if [-x "$ FILE"]; então
echo "$ FILE é executável / pesquisável."
#! / Bin / bash
# test-file: Avalie o status de um arquivo FILE = ~ / .bashrc
if [-e "$ FILE"]; então
if [-f "$ FILE"]; então
echo "$ FILE é um arquivo normal."
fi
if [-d "$ FILE"]; então
echo "$ FILE é um diretório."
fi
if [-r "$ FILE"]; então
echo "$ FILE está legível."
fi
if [-w "$ FILE"]; então
echo "$ FILE é gravável."
fi
if [-x "$ FILE"]; então
echo "$ FILE é executável / pesquisável."
fi mais
echo "$ FILE não existe" saída 1
fi
saída
fi mais
echo "$ FILE não existe" saída 1
fi
saída
O script avalia o arquivo atribuído à constante ARQUIVO e exibe seus resultados conforme a avaliação é realizada. Há duas coisas interessantes a serem observadas sobre esse script. Primeiro, observe como o parâmetro $ FILE é citado nas expressões. Isso não é necessário para completar sintaticamente a expressão, mas é uma defesa contra o vazio do parâmetro. Se a expansão do parâmetro de $ FILE se resultasse em um valor vazio, causaria um erro (os operadores seriam interpretados como strings não nulas em vez de operadores). O uso de aspas ao redor do parâmetro garante que o operador seja sempre seguido por uma string, mesmo se a string estiver vazia. Em segundo lugar, observe a presença do saída comando próximo ao final do script. o saída comando aceita um único argumento opcional, que se torna o status de saída do script. Quando nenhum argumento é passado, o status de saída é padronizado para o status de saída do último comando executado. Usando saída desta forma, permite que o script indique falha se $ FILE expande-se para o nome de um arquivo inexistente. o saída o comando que aparece na última linha do script existe como uma formalidade. Quando um script “sai do fim” (chega ao fim do arquivo), ele termina com um status de saída do último comando executado.
Da mesma forma, as funções do shell podem retornar um status de saída, incluindo um argumento inteiro para o retorno comando. Se convertêssemos o script acima em uma função shell para incluí-lo em um programa maior, poderíamos substituir o saída comandos com retorno declarações e obter o comportamento desejado:
arquivo_teste() {
# test-file: Avalie o status de um arquivo FILE = ~ / .bashrc
if [-e "$ FILE"]; então
if [-f "$ FILE"]; então
echo "$ FILE é um arquivo normal."
fi
if [-d "$ FILE"]; então
echo "$ FILE é um diretório."
fi
if [-r "$ FILE"]; então
arquivo_teste() {
# test-file: Avalie o status de um arquivo FILE = ~ / .bashrc
if [-e "$ FILE"]; então
if [-f "$ FILE"]; então
echo "$ FILE é um arquivo normal."
fi
if [-d "$ FILE"]; então
echo "$ FILE é um diretório."
fi
if [-r "$ FILE"]; então
echo "$ FILE está legível."
fi
if [-w "$ FILE"]; então
echo "$ FILE é gravável."
fi
if [-x "$ FILE"]; então
echo "$ FILE é executável / pesquisável."
fi
outro
echo "$ FILE não existe" return 1
fi
}
echo "$ FILE está legível."
fi
if [-w "$ FILE"]; então
echo "$ FILE é gravável."
fi
if [-x "$ FILE"]; então
echo "$ FILE é executável / pesquisável."
fi
outro
echo "$ FILE não existe" return 1
fi
}