[:-gt:预期一元运算符

[:-gt:预期一元运算符

我有一个代码,[: -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

当达到这个逻辑时,有可能:

if [ $lastPosition -gt $fileLength ]

或将为空$lastPosition$fileLength

  • $lastPosition$POSFile如果不存在或者无法读取,则可能为空。
  • $fileLength$LogFile如果不存在或者无法读取,则可能为空。

尝试使用如下引号:

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

强制将每个变量识别为单个实体,即使它是空的。在这种情况下,空变量将被视为零(即与“大于”运算符配对)。

注意:如果任何一个变量被识别为非数字,那么该建议的解决方案不涵盖这种可能性。

相关内容