[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] test
From: |
Herbert Alexander Faleiros |
Subject: |
Re: [shell-script] test |
Date: |
Wed, 23 Nov 2005 01:20:06 -0200 |
User-agent: |
KMail/1.8.2 |
On Tuesday 22 November 2005 21:01, barsaabc wrote:
[cut]
> se for um arquivo ele fala que e um arquivo se for um diretorio ele fala que
> e um diretório se não exite ele fala que não existe. usando o test. tem
> como?
Sim, olha só (existem várias maneiras de se efetuar isto):
$ ./teste .
. é um diretório
$ ./teste teste
teste é um arquivo regular
Agora o código do script:
$ cat teste
#!/bin/sh
test -f $1 && echo $1 é um arquivo regular || \
(test -d $1 && echo $1 é um diretório || echo não encontrado)
Explicando:
test -f arquivo -> verifica se o parâmetro passado ao test é um arquivo
regular (se ele existir, claro). já o test -d diretorio -> o mesmo, só que
agora testa se é o arquivo existe e ele é um diretório.
Mais detalhes: man test
Os operadores lógicos encadeados && (e) e || (ou) trabalham com a saída do
test controlando qual mensagem será exibida, ou seja, seria algo como:
test -f $1
if [ $? = 0 ]; then
echo $1 é uma arquivo regular.
exit 0
fi
test -d $1
if [ $? = 0 ]; then
echo $1 é um diretório.
exit 0
else
echo $1 não encontrado.
exit 1
fi
Ou ainda (fazendo da maneira correta):
if [ -f $1 ]; then
echo $1 é uma arquivo regular.
elif [ -d $1 ]; then
echo $1 é um diretório.
else
echo $1 não encontrado.
exit 1
fi
Se quiser fazer sem o test, (um exemplo) poderia ser também:
$ ./teste teste
teste provavelmente é um arquivo regular.
$ ./teste .
. é um diretório.
O código neste caso é o seguinte:
$ cat teste
#!/bin/sh
file $1 | grep -q dir && echo $1 é um diretório. || \
echo $1 provavelmente é um arquivo regular.
Até,
Herbert.
- test, barsaabc, 2005/11/22