Existem alguns problemas com a sua pergunta e com a sua função.
Primeiro, o erro [: : integer expression expected
não é gerado pela sua função . O teste [[ ... -gt ... ]]
na função não gera esse erro (teste-o na linha de comando com [[ "hello" -gt "world" ]]
). Você tem outro teste em algum lugar, usando colchetes únicos, que gera esse erro (teste isso na linha de comando com [ "hello" -gt "world" ]
). Procure um teste de aritmética [ ... ]
em outro lugar em seu código.
Você pode ver isso na própria mensagem de erro, pois bash
diz a você que é o utilitário [
que produz um erro e que a coisa que tentou fazer um teste aritmético é uma cadeia vazia.
Você disse em comentários que a alteração de print (0+$0)
para print 0+$0
em seu código awk
fez com que funcionasse. Duvido que essa mudança tenha feito alguma diferença, pois as declarações são equivalentes. É mais provável que a entrada para o script tenha sido alterada de tal forma que o erro não foi acionado.
Em seguida, você comentou que alterou -gt
para >
no teste. Isso altera o teste para um teste de ordem de seqüência lexicográfica. Esse teste seria verdadeiro se a sequência do lado esquerdo fosse ordenada após a sequência do lado direito, portanto, por exemplo, 20 > 100
seria verdadeiro .
Isso também está perdendo o ponto de que o erro não está na função que você está apresentando.
Minha sugestão é escrever seu script e testar cada componente do script enquanto você o escreve, para que você saiba que cada adição ao script faz o que você quer que ele faça.
Quanto à função em si, ela tem vários problemas.
Por exemplo, a variável PID
provavelmente deve conter o ID do processo cassandra
, mas você não inicia cassandra
como uma tarefa em segundo plano (usando &
no final do processo). comando), PID
não será o que você acha que deveria ser, e o wait $PID
subseqüente não irá esperar pelo processo que você acha que está esperando.
Não está claro o que você deseja alcançar com a variável PID
e a chamada wait
. Meu palpite é que você pode simplesmente remover a atribuição para PID
e a chamada para wait
.
O $(( ... ) | ... )
é melhor escrito como $( ... | ... )
. Em primeiro lugar, executar systemctl | awk
em um subshell é desnecessário e, em segundo lugar, é confuso ler porque $(( ... ))
é uma avaliação aritmética .
O código
awk'/(Active:failed)/ {print $10}' | awk '{print ($0+0)}'
pode ser combinado em
awk'/(Active:failed)/ { print 0+$10 }'