Como saber se o comando encontra algum resultado?

0
#!/bin/sh

LOOK_FOR="NTLMAuthenticationFilter"

for i in 'find ./ -name "*jar"'
do
echo "Looking in $i ..."
grepjar -e $LOOK_FOR $i
done

Eu escrevi o script acima, e tentei descobrir se existe algum nome de arquivo LOOK_FOR naqueles jar, minha missão é:     grepjar -e $ LOOK_FOR $ i aqui como posso verificar se existe algum resultado bem-sucedido e gerá-los?

a propósito, o que significa $? no script de shell? Obrigado !

    
por Foolish 21.10.2010 / 06:49

2 respostas

4

Tente a seguinte alteração:

#!/bin/bash

LOOK_FOR="NTLMAuthenticationFilter"

find ./ -name "*.jar" -print | while read -r FILE
do
echo "Looking in ${FILE} ..."
grepjar -e "${LOOK_FOR}" "${FILE}" 2>/dev/null >/dev/null
RETCODE=${?}
if [ ${RETCODE} -eq 0 ]; then
  echo "Found ${LOOK_FOR} in ${FILE}"
fi
done

A variável ? armazena o valor de retorno do último comando. Isso normalmente será 0 para sucesso e qualquer outro valor para falha.

Você também notará que eu coloquei o comando for em um comando while . Isso permite um conjunto maior de resultados retornados.

Quebrando esse comando find ./ -name "*.jar" -print | while read -r FILE :

find ./ - iniciando no diretório atual ...
-name "*.jar" - localizar arquivos terminados em .jar ...
-print - e imprimir seus nomes em | - redirecionar essa saída para o próximo comando while read -r FILE - e enquanto houver saída do comando anterior, atribua-a à variável FILE e execute os comandos entre do e done .

Em outras palavras, ele pega a saída do comando find (a lista de arquivos terminando em jar ) e executa o bloco de código no loop. Para uma lista curta, ela se comporta exatamente como sua versão usando o loop for i in . A vantagem é que ele suporta listas longas, já que há um limite superior para o que você pode passar na linha de comando, como você fazia com o loop for i in .

Editar: Alterado para o script bash, mudou o estilo de cotação variável, incluiu sugestões de comentários e algumas outras mudanças de estilo.

    
por 21.10.2010 / 08:42
1

Você deve poder usar $ ?.

Em bash $? armazena o valor de retorno de um comando. Você poderia verificar este valor após o comando grepjar e ecoar $ i se for o que você está procurando.

    
por 21.10.2010 / 07:11