我有一个代码,[: -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" ]
强制将每个变量识别为单个实体,即使它是空的。在这种情况下,空变量将被视为零(即与“大于”运算符配对)。
注意:如果任何一个变量被识别为非数字,那么该建议的解决方案不涵盖这种可能性。