我正在将依赖项检查编写到程序中,并且我要求特定程序至少是特定版本。
这是我到目前为止所拥有的......
gtkdialog_v=`gtkdialog --version | sed -e "s| |\n|g" -e "/^$/d" | grep "[0-9]\."`
if [ "$gtkdialog_v" -lt "0.8.3" ]; then echo "gtkdialog must be version 0.8.3 or higher"; exit; fi
“ - lt”是问题,如果我插入“=”然后它按预期运行,如果我使用“<”它的错误与“-lt”
相同我的错误
[: 0.8.3: integer expression expected
我在这里缺少什么?
答案 0 :(得分:2)
您可以使用Natural Sort执行此操作:
#!/bin/sh
min=0.8.3
ver=0.8.2
if shuf -e $min{,} $ver | sort -V | awk '{getline b;exit$0==b?0:1}'
then
echo 'good'
else
echo 'gtkdialog must be version 0.8.3 or higher'
exit
fi
答案 1 :(得分:1)
-lt
只能应用于整数表达式。但是你用它来比较字符串表达式。 bash不支持浮点运算。
而是比较字符串:
if [[ "$gtkdialog_v" < "0.8.3" ]];
注意这将进行ASCII比较(不是整数比较)。例如,
if [[ "0.12.3" < "0.8.3" ]]; then
echo yes
fi
将打印“是”,这不是预期的。
答案 2 :(得分:0)
-lt
期望一个整数表达式,而不是包含浮点格式值的字符串。所以它错了。我认为您可以稍微调整一下并删除.
以便0.8.3
成为083
,然后您可以查看0.8.5 => 085
。但是,如果版本seq是直接的,这将有效。或者另一种方法是切割它们并开始比较每个字段