Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/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
bash中if语句中的多个条件不起作用_Bash_Conditional Statements - Fatal编程技术网

bash中if语句中的多个条件不起作用

bash中if语句中的多个条件不起作用,bash,conditional-statements,Bash,Conditional Statements,我创建了这个小bash脚本来为我下载repos。然而,若语句并没有正确地评估它……我尝试了许多不同的变体,但它就是不起作用 os=$(lsb_release -si) version=$(lsb_release -sr) arch = `getconf LONG_BIT` if [[$os = 'CentOs' && $version >= '6.0' && $arch = '64']] then echo "Works fine" echo

我创建了这个小bash脚本来为我下载repos。然而,若语句并没有正确地评估它……我尝试了许多不同的变体,但它就是不起作用

os=$(lsb_release -si)
version=$(lsb_release -sr)
arch = `getconf LONG_BIT`
if [[$os = 'CentOs' && $version >= '6.0' && $arch = '64']]
then
    echo "Works fine"
    echo $version 
    echo $os 
fi
正如信息一样:
echo$os
echo$version
在if语句之外都可以正常工作

更新:bash-x test.sh的输出

++ lsb_release -si
+ os=CentOS
++ lsb_release -sr
+ version=6.4
++ getconf LONG_BIT
+ arch=64
+ [[ CentOS = \C\e\n\t\O\s ]]
这:

应该是:

arch=`getconf LONG_BIT`
或者更好:

arch=$(getconf LONG_BIT)
bash
中,不能在赋值周围使用空格。您编写的代码执行了一个名为
arch
的命令,其中包含参数
=
,以及
getconf LONG\u BIT
的输出(可能是32或64)

通常,您还需要将命令名(如
[[
)与参数分开。因此,您需要更改此项:

if [[$os = 'CentOs' && $version >= '6.0' && $arch = '64']]
因此,在“command”名称周围有空格(在
[[
之后和
]
之前):

我可能会用双引号将变量括起来,但这并不是100%必需的。还有一个问题是
[
不支持
=
运算符(有人知道为什么不支持吗?)。因此,必须使用否定逻辑:

if [[ $os = 'CentOs' && ! ($version < '6.0') && $arch = '64' ]]

要在Bash中比较浮点数,请尝试以下操作:

- if [[$os = 'CentOs' && $version >= '6.0' && $arch = '64']]
+ if [[ $os = 'CentOs' ]] && [[ "$(echo "if (${version} >= 6.0 1 else 0" | bc)" -eq 1 ]] && [[ $arch = '64' ]]

请参阅:

test.sh:第5行:在
'6.0''test附近出现语法错误。sh:第5行:
如果[[$os='CentOs'&&&$version>='6.0'&&&&$arch='64']]“我对缺少字符串“=”的猜测:除了版本号之外,您几乎不需要这些条件。我复制了您在上面给我的代码段,并删除了版本,这样我可以工作,但仍然没有输出(没有错误消息)我建议您将正在运行的版本中的代码添加到问题中,并显示
bash-xyourscript.sh
的输出。给定:
os=CentOs;version=6.0;arch=64;if[[$os='CentOs'&&!($version<'6.0')&$arch='64'];然后echo Hi;fi
,我得到“Hi”回音。你呢?我在主要帖子中添加了
bash-x yourscript.sh的输出。不要通过重写问题来破坏它,使其仅包含答案。具有多个字段的版本号(例如6.0.1)不能被视为浮点数。
if [[ $os = 'CentOs' && ! ($version < '6.0') && $arch = '64' ]]
os=$(lsb_release -si)
version=$(lsb_release -sr)
arch=$(getconf LONG_BIT)
if [[ $os = 'CentOs' && ! ($version < '6.0') && $arch = '64' ]]
then
    echo "Works fine"
    echo "Version $version; OS $os; Arch $arch"
fi
- if [[$os = 'CentOs' && $version >= '6.0' && $arch = '64']]
+ if [[ $os = 'CentOs' ]] && [[ "$(echo "if (${version} >= 6.0 1 else 0" | bc)" -eq 1 ]] && [[ $arch = '64' ]]