Como usar negação de um comando em um loop while com grep no shell script?

2

Existe alguma maneira de usar enquanto loop e grep todos juntos? Veja meu exemplo:

while  [[  !(grep -R -h "${text}" ${path}) ]];
do
    ...
done

Diz:

./test_script.sh: line 1: conditional binary operator expected
./test_script.sh: line 1: expected ')'
./test_script.sh: line 1: syntax error near '-R'
./test_script.sh: line 1: 'while  [[  !(grep -R -h "${text}" ${path}) ]];'
    
por Byakugan 02.03.2016 / 04:10

1 resposta

5
  1. Não coloque comandos dentro de colchetes. Para fazer um loop enquanto grep é bem-sucedida (ou seja, até falhar), apenas faça

    while grep ...
    do
        ︙
    done
    
  2. Para fazer um loop enquanto grep falhar (ou seja, até que seja bem-sucedido), faça

    while ! grep ...
    do
        ︙
    done
    

    com espaço em branco (ou seja, um ou mais espaços e / ou tabulações) entre o ! e o comando.

  3. Você deve sempre citar suas referências de variáveis de shell (por exemplo, "$path" ) a menos que você tenha uma boa razão para não e você tem certeza de que sabe o que está fazendo. Por outro lado, enquanto chaves podem ser importantes, eles não são tão importantes quanto as citações então "$text" e "$path" são bons o suficiente (você não precisa usar "${text}" e "${path}" , neste contexto).

    … a menos que path possa ser definido para uma lista de nomes de arquivos, nesse caso, veja Implicações de segurança do esquecimento de citar uma variável em shells bash / POSIX - Mas e se…?

  4. Você não precisa do ponto-e-vírgula ( ; ) no final da linha while (a menos que você coloque o do depois dele). Em outras palavras, a linha while e o do devem ser separados por um ponto e vírgula e / ou uma ou mais novas linhas.

por 02.03.2016 / 04:27