0

我有一个脚本可以找到 pdb 中两个原子之间的距离。

bash 不识别小数,所以我用 printf 脚本来四舍五入小数。

并且 echo $b 工作正常并给我一个整数值。

但是我的过滤系统的 if 行不起作用。

我得到并错误说明

 [: -ge: unary operator expected

下面是我正在处理的脚本的一部分。

 a=$(awk '$2=='91'{x1=$6;y1=$7;z1=$8} $2=='180' {x2=$6;y2=$7;z2=$8} END{print sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) + (z1-z2)*(z1-z2))}' ${names}.pdb.$i)
b= printf %.0f $a
echo $b
if [ $b -ge 1 ] &&[ $b -le 9 ]; then

任何帮助将不胜感激。提前谢谢你。

4

1 回答 1

1
b= printf %.0f $a

此行在bprintf 命令期间将值设置为空,该命令将其输出发送到 stdout

echo $b

这将打印一个空行。

您不能=在赋值中放置空格,并且要将命令的输出存储到变量中,请使用以下语法:

b=$( printf %.0f $a )

您收到错误是因为$b它是空的,这就是 bash 所看到的:

if [  -ge 1 ] &&[  -le 9 ]; then

-ge期待左侧和右侧的操作数,但它没有看到一个。

使用 bash,您应该(几乎)总是更喜欢[[ ... ]]--[ ... ]双括号形式不会被包含空字符串的变量所欺骗。

您应该始终引用您的"$variables"-- 除非您确切知道何时不引用它们。

于 2014-02-07T01:21:44.257 回答