shell-script-pt
[Top][All Lists]
Advanced

[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.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]