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

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

Re: [shell-script] Dúvida na Sentença do IF


From: Julio C. Neves
Subject: Re: [shell-script] Dúvida na Sentença do IF
Date: Thu, 2 Aug 2012 23:21:48 -0300

Jefferson, vc fez:
if [ `grep -e "accessed" -e "acessado" "$ARQ_TEMP"` ]

No shell, a função do if é testar uma instrução e o [...] é a instrução
test que esta sendo testada. O problema é que o test é para testar
arquivos, numéricos e cadeias, mas nunca instrução.

A forma correta de fazer isso seria:

if grep -q ...
then
    cmds se grep for bem sucedido.
else
    cmds caso grep mal sucedido
fi

Não entendi bem o que vc queria fazer com seu grep, já que a opção -e é
muito pouco usada. Se vc deseja testar uma condição *ou* outra, é melhor
usar uma construção do tipo:

grep -E "accessed|acessado"

o | significando OU e
o -E para usar reg exp expandida (por causa do OU)

Mudando de assunto, é muito comum (e isso é o que vc mais vê na internet)
as pessoas fazerem:

grep ...
retcod=$?
if [ $retcod -eq 0 ]
then
    cmds se grep for bem sucedido.
else
    cmds caso grep mal sucedido
fi

Isso é feito por pessoas que não procuram estudar shell. A função do if é
testar direto um cmd, baseado em seu código de retorno. Experimente fazer:

$ Usu=root
$ if grep -q ^$Usu: /etc/passwd
then
    echo Usuário cadastrado
else
    echo Usuário ñ cadastrado
fi
Usuário cadastrado
$ Usu=Ximelesquete
$ if grep -q ^$Usu: /etc/passwd
then
    echo Usuário cadastrado
else
    echo Usuário ñ cadastrado
fi
Usuário ñ cadastrado

Abcs,
Julio

*
*



Em 2 de agosto de 2012 13:08, Jefferson Aranha
<address@hidden>escreveu:

> **
>
>
> Pessoal estou com uma dúvida, ao montar uma sentença IF, recebo a
> menssagem de erro: line 49: [: too many arguments
>
> if [ `grep -e "accessed" -e "acessado" "$ARQ_TEMP"` ]; then
> faz algo
> fi
>
> Suponhamos que a variável $ARQ_TEMP possui o valor de um dir que aponta
> paraum arquivo e que ao se dar o comando: grep -e "accessed" -e "acessado"
> "$ARQ_TEMP"
> eu tenho o retorno da variavél "$?" igual a 0 ou seja o comando funciona.
> Porque dentro do if não?
>
> Obrigado.
>
> [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]