Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Shell脚本_Bash_Shell_Scripting - Fatal编程技术网

Bash Shell脚本

Bash Shell脚本,bash,shell,scripting,Bash,Shell,Scripting,我在制定以下内容时遇到困难: 我想用 echo "$var1 - $var2"|bc -l 在if语句中,如 if [$(`echo "$var1 - $var2"|bc -l`)=0] then echo "bloop" fi 然而,该语句返回数值结果加上和错误 我试着在进入循环之前回显结果,结果 ./script.sh: [2.00000: not found 有什么想法吗?提前谢谢 您的问题在于: if [$(`echo "$var1 - $var2"|bc -l`)=0] 您需

我在制定以下内容时遇到困难: 我想用

echo "$var1 - $var2"|bc -l
在if语句中,如

if [$(`echo "$var1 - $var2"|bc -l`)=0]
then 
echo "bloop"
fi
然而,该语句返回数值结果加上和错误 我试着在进入循环之前回显结果,结果

./script.sh: [2.00000: not found
有什么想法吗?提前谢谢

您的问题在于:

if [$(`echo "$var1 - $var2"|bc -l`)=0]
您需要确保
[
]
之间有一个空格,如下所示:

if [ $(($var1 - $var2)) -eq 0 ]
[
只是命令
test
的别名,因此在它之后不使用空格将使shell不会将其解释为
[
命令

此外,您正在进行的计算是错误的(或者更好的方法是如何进行计算)

if [ $(($var1 - $var2)) -eq 0 ]
这里请注意,您没有编写
=
,而是使用
-eq
参数来表示相等。
$(())
为您进行计算

查看
测试
命令的手册页:

尝试:

if [ `echo "$var1 - $var2"|bc -l` -eq 0 ]
then 
echo "bloop"
fi
正如@Nidhoegger在他的回答中解释的那样,
[
]
在开始和结束前后括号中有空格是错误的

您的was中还有一些错误:

$(`echo "$var1 - $var2"|bc -l`)
您将输出作为变量名,并尝试使用该值
$(…)

还通过以下方式:

$(`echo "$var1 - $var2"|bc -l`)=0

您是在分配值,而不是比较值。

在您来到这里之前会告诉您这个值的一些错误。空格对shell很重要。您不会编写
echo“$var1-$var2”| bc-l
,并期望它能正常工作,是吗?您需要在
[
=
]周围使用空格
在该
if
语句中。
[
是一个命令,它需要某些参数(最后一个参数必须是
]
。在bash(和大多数shell)
[
是一个可调用的程序和/或内置命令。没有空间,bash无法识别它。你也可以通过让bash自己做算术来避免管道通过
bc
,方法是将它包装在$[],一个la
$[$var1-$var2]
@JonCarter中,这是过时的Bourne语法。现代POSIX sh(以及bash)数学语法是
$((var1-var2))
。你只解决了一半的问题。将
bc
的输出作为命令运行也不正确。你是对的。只考虑了显而易见的问题。我会相应地编辑帖子!
[
几乎只是
测试的别名。
[/code>需要
]
作为最后一个参数,
test
不允许它。如果只针对bash(并且只针对整数数学),您还可以编写
if((var1-var2==0))
。@KeithThompson:您是对的。我认为
[
只是
测试的一个符号链接。ThanksCloser,但不适用于左侧为浮点变量的情况,因为bash只进行整数运算。@CharlesDuffy您有什么建议?
[[$(bc-l感谢@CharlesDuffy的更正……好吧,既然
2.000
不是有效的变量名,
2.000=0
不是有效的赋值……即使左侧是有效的变量名,shell也需要
eval
'd才能看到赋值。在
测试的上下文中d、 
2.000=0
只是一个字符串,处理字符串的默认操作是检查它是否为空。