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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Comando no teste do if


From: Julio C. Neves
Subject: Re: [shell-script] Comando no teste do if
Date: Fri, 14 Sep 2012 15:54:05 -0300

Leonardo, o cmd if do shell é muito forte e seu uso é totalmente diferente
dos ifs caretas que vc vê por ai. Se vc quiser entendê-lo (e acho que vc
deveria), leia o final do Papo de Botequim
3<http://wiki.softwarelivre.org/TWikiBar/TWikiBarPapo003#O_Comando_if>e
o Papo
de Botequim 
4<http://wiki.softwarelivre.org/TWikiBar/TWikiBarPapo004#O_Comando_test>
.

Lá vc verá que o if testa instruções e não condições e por isso fazer if [
$? ... ] em 99% dos casos e desnecessário (no entanto é o que vc mais vê na
vida real). Verá tb que a construção [...] no duro é o cmd test então qdo
vc usa if [...], o que vc está fazendo é usando o if para testar a saída co
cmd test.

Ora, se vc deseja testar o ls, é só fazê-lo direto, isto é,

if ls -l *.[c,C][s,S][v,V]; then

Só que se houver algum arquivo, este arquivo será listado e se não houver,
será dado um errpo. Então essa linha deveria ser:

if ls -l *.[c,C][s,S][v,V] > /dev/null 2>&1; then

Recomendo no entanto, que a solução seja algo como:

ls * | grep -qi \.csv$ || echo não existem arquivos csv

Abcs,
Julio

*
*



Em 14 de setembro de 2012 09:24, Leonardo Bacha Abrantes <
address@hidden> escreveu:

> **
>
>
> Bom dia pessoal,
>
> estou fazendo um script e preciso testar se existem arquivos .csv em uma
> pasta, então fiz o seguinte teste:
>
> if [ `ls -l *.[c,C][s,S][v,V]` -ne 0 ] ; then
>
> isso não funcionou, retornando sempre o erro:
> /etc/scripts/csv.sh: line 12: [: too many arguments
>
> então resolvi da forma abaixo, mas queria saber pq o teste acima não
> funcionou.
>
> ls -l *.[c,C][s,S][v,V] 2> /dev/null
> if [ $? -ne 0 ] ; then
>
> --
>
> outra pergunta, ao invés de -ne não poderia ser != ?
>
> obrigado!
> []'s
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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