Fala Leonardo, O problema ocorreu qdo vc fechou as aspas logo após o tr. No seu raciocínio, vc queria inibir a interpretação do espaço, mas o que vc fez foi justamente expor o espaço para o cmd test. (aqueles colchetes que vc usou são o cmd test) e por isso o erro (que vc deveria ter mostrado para facilitar o pessoal que ajuda) deve ter sido algo como "too many operands". Troque as aspas internas por apóstrofos que o peograma funcionará.
De qq forma vc está usando o if na forma das linguagens convencionais, ou seja, vc o está usando de uma forma não otimizada. vc poderia fazer o mesmo da seguinte forma: if tr " " "\n" < temp.html |grep -iE "href.*\[^<>\].*jpg"; then Para vc entender o uso do if, que em shell é cmd muito poderoso, dê uma lida rápida neste texto<http://wiki.softwarelivre.org/TWikiBar/TWikiBarPapo003#O_Comando_if>e em sua continuação<http://wiki.softwarelivre.org/TWikiBar/TWikiBarPapo004#O_Comando_test>. Tenho certeza que será um excelente investimento em know how, que não te tomará mais de 10 minutos. -- Abraços, Julio Cursos de Shell e Zenity? - Em SP ligue (11) 2125-4747 (dias 29-30/08 e 12-13/09); - Em DF ligue (61) 3223-3000; - No RJ ligue (21) 2561-0867; - Turmas fechadas em outras cidades ligue (21) 8112-9988. 2009/8/15 Leonardo Bernardes <inmo...@gmail.com> > > > Olá amigos, > > Tenho o seguinte código > > if [ -n "$(cat temp.html |tr " " "\n" |grep -iEo "href.*\[^<>\].*jpg")" ]; > then > echo cat temp.html |tr " " "\n" |grep -iEo "href.*jpg" |grep -v "[?/]" |tr > \' \" |cut -d\" -f2 |grep -v \' > templ.txt > elif [ -n "$(cat temp.html |tr " " "\n" |grep -iEo "[[:alnum:]]+.jpg" |grep > -vi "http")" ]; then > echo cat temp.html |tr " " "\n" |grep -iEo "[[:alnum:]]+.jpg" > templ.txt > else > exit > fi > > Usei o echo jogando o comando pra um arquivo porque se eu uso uma variável, > ele não funciona. Em ambos os casos, ele lê apenas a primeira parte do > comando. A solução seria: usar aspas duplas ou simples pra formar um BLOCO. > Mas se eu faço isso, depois, quando chamo o eval ou quando peço pra ler o > arquivo templ.txt, ele simplesmente dá erro. Como se as aspas duplas ou > simples não funcionassem dentro do IF > > Fora do IF, se eu uso uma variável assim > templ='cat temp.html |tr " " "\n" |grep -iEo "[[:alnum:]]+.jpg"' > Ela funciona perfeitamente, mas se eu fizer o mesmo dentro do IF > > if [ -n "$(cat temp.html |tr " " "\n" |grep -iEo "href.*\[^<>\].*jpg")" ]; > then > varib='cat temp.html |tr " " "\n" |grep -iEo "href.*jpg" |grep -v "[?/]" > |tr \' \" |cut -d\" -f2 |grep -v \'' > elif [ -n "$(cat temp.html |tr " " "\n" |grep -iEo "[[:alnum:]]+.jpg" |grep > -vi "http")" ]; then > varib='cat temp.html |tr " " "\n" |grep -iEo "[[:alnum:]]+.jpg"' > else > echo -e "\e[32mNenhum dos dois\e[0m" > fi > > Dá erro (em outro lugar que não tem nada a ver com esse código): > : unexpected EOF while looking for matching `'' > : line 150: syntax error: unexpected end of file > > O que eu faço? Há mesmo algum uso especial das aspas dentro do IF? > > > [As partes desta mensagem que não continham texto foram removidas]