Bash:如果语句错误(一元运算符预期)

时间:2016-12-21 17:26:04

标签: linux bash shell

在比较bash脚本[: 2315669844: unary operator expected中的两个整数值时,我收到此错误消息。我已查找此错误,似乎没有任何内容适合我的情况。这是我的脚本

的一部分
CURR_AVAIL=`df /home2 | tail -1 | awk '{ print $4 }'`   
DIFF_AVAIL=$((CURR_AVAIL-PREV_AVAIL))

echo “---------------------------------------------“ >> sys_log
date >> sys_log
if [ "$DIFF_AVAIL" –gt 1000 ];
        then
        echo $DIFF_AVAIL >> sys_log
elif [ "$DIFF_AVAIL" –lt -1000 ];
        then
        echo $DIFF_AVAIL >> sys_log
fi;

2 个答案:

答案 0 :(得分:1)

可能发生错误的行

if [ "$DIFF_AVAIL" –gt 1000 ];

elif [ "$DIFF_AVAIL" –lt -1000 ];

如果$DIFF_AVAIL以某种方式完全为空,则[ "$DIFF_AVAIL" –lt -1000 ]将变为[ -lt -100],而-lt期望其两侧的两个参数作为二元运算符。

echo $DIFF_AVAIL Quote检查它是否由于某种原因而为空。这应该是最可能的原因。

此外,我在您的代码中看到了一些与文本编辑器相关的问题。您在代码中使用了两种不同类型的echo。其中一个(最可能是在<pre> spring: datasource: source: driver-class-name: org.sqlite.JDBC url: jdbc:sqlite::resources/db/StudentCarrer.db3 destination: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://nas4:3306/cku username: cku password: cku </pre> 行中使用的那个)应该是无效的。

答案 1 :(得分:1)

Chepner是正确的我没有意识到我的'-gt和-lt'运算符没有像我原先想象的那样使用连字符。它读起来好像我输入'--gt和--lt'。我已将我的脚本从文本编辑器复制到vim。

CURR_AVAIL=df /home2 | tail -1 | awk '{ print $4 }'  
DIFF_AVAIL=$((CURR_AVAIL-PREV_AVAIL))

echo “---------------------------------------------“ >> sys_log
date >> sys_log
if [ "$DIFF_AVAIL" -gt 1000 ];
        then
        echo $DIFF_AVAIL >> sys_log
elif [ "$DIFF_AVAIL" -lt -1000 ];
        then
        echo $DIFF_AVAIL >> sys_log
fi;

感谢您的帮助!