if语句错误bash

时间:2010-01-21 00:06:31

标签: bash

请帮我找问题

t1=$(sort -k 2,2 f.txt|head -1|cut -d" " -f3)
while read x
do
t2=$(echo $x|cut -d" " -f2)
if [ $t2 -ge $t1 ] ; then
  p=$(echo $x|cut -d" " -f1)
  echo -n $p " "
fi
done <f.txt

f.txt
F1 13
G 13
H 0
我正在跟踪错误

-sbash: [: 13: unary operator expected
-sbash: [: 13: unary operator expected


没有H 0行,它的工作正确

3 个答案:

答案 0 :(得分:1)

当使用只有一个操作数的二元运算符时,

'一元运算符预期'是错误。

这意味着t2或t1为空。要使空变量不会消失,请使用默认表示法${VARIABLE:-DEFAULT}为它们提供默认值:

if [ ${t2:-0} -ge ${t1:-0} ]; then

答案 1 :(得分:1)

你正在使用bash,所以使用bash的内部。使用[]

时,无需调用外部剪切等也引用变量
set -- $(sort -k 2,2 f.txt|head -1)
t1=$3
while read f1 f2 f3
do
t2="$f2"
if [ "$t2" -ge "$t1" ] ; then
  p=$f1
  echo -n $p " "
fi
done <f.txt

答案 2 :(得分:0)

我想你想要

t1=$(sort -k 2,2 f.txt|head -1|cut -d" " -f2)

而不是

t1=$(sort -k 2,2 f.txt|head -1|cut -d" " -f3)

您的f.txt只有两个字段,因此cut命令无效,然后您将其传递给[ ]

关于没有H 0行的原因,我怀疑您的F行是

F 1 13

而不是

F1 13

(这只是猜测。)