1

У меня есть код, который дает [: -gt: unary operator expected , когда значение пусто.

Может кто-нибудь предложить или исправить меня, где я не прав?

if [ -e $POSFile ]; then 
  # Read last Position
  lastPosition=`cat $POSFile`
fi
fileLength=`stat -c %s $LogFile`

if [ $lastPosition -gt $fileLength ]; then
  # Log file rolled
  lastPosition=0
fi

difference=`expr $fileLength - $lastPosition`

1 ответ1

1

Существует вероятность, что при достижении этой логики:

if [ $lastPosition -gt $fileLength ]

$lastPosition или $fileLength будут пустыми:

  • $lastPosition может быть пустым, если $POSFile не существует или не может быть прочитан.
  • $fileLength может быть пустым, если $LogFile не существует или не может быть прочитан.

Попробуйте использовать кавычки, как это:

if [ "$lastPosition" -gt "$fileLength" ]

заставить каждую из этих переменных быть распознанной как единое целое, даже если она была пустой. Пустые переменные в этом случае будут считаться нулевыми (т.е. в сочетании с оператором "больше чем").

Примечание. Это предлагаемое решение не распространяется на возможность признания любой переменной не числовой.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .