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
只是一个字符串,处理字符串的默认操作是检查它是否为空。