-gt: script de shell esperado do operador unário

1

Obtendo este erro após os pacotes de atualização no Ubuntu.

#!/bin/bash
used=$(df -H | grep  'rootfs' | cut -d "G" -f 4 | cut -d "%" -f 1)
limit=90
if [ $used -gt $limit ]; then Or [ "$used" -gt "$limit" ] Or [ "$used" -ge 90 ]
#delete file and mail command;
fi

Erro

  

[: -gt: operador unário esperado

    
por Nullpointer 03.05.2016 / 13:39

1 resposta

5

A variável used está vazia, levando à mensagem de erro relacionada ao operador unário. O motivo provável é que não haja rootfs em df -H de saída, ou seja, em seu sistema.

$ foo=
$ [ $foo -gt 10 ] && echo OK
bash: [: -gt: unary operator expected

Você também tem alguns outros problemas no seu script, a lógica OR deve ser colocada como:

[ "$foo" -gt "$bar" ] || [ "$foo" -ge 90 ]

Também é melhor usar o comando shell keywod [[ em vez de test ( [ ) para evitar muitas armadilhas:

[[ "$foo" -gt "$bar" ]] || [[ "$foo" -ge 90 ]]

Para comparações aritméticas, você também pode usar (( e operadores aritméticos regulares:

(( "$foo" > "$bar" )) || (( "$foo" >= 90 ))

Você nem precisa colocar $ na frente do nome da variável:

(( foo > bar )) || (( foo >= 90 ))
    
por heemayl 03.05.2016 / 14:09