在bash shell脚本中使用复合条件

San*_*ero 14 bash shell comparison

我想在bash脚本中执行类似下面的操作.我如何在bash语法中实现.

if !((a==b) && (a==c))
then 
do something
end if
Run Code Online (Sandbox Code Playgroud)

Pau*_*ce. 27

对于数字比较,您可以:

if ! (( (a == b) && (a == c) ))
Run Code Online (Sandbox Code Playgroud)

用于字符串比较:

if ! [[ "$a" == "$b" && "$a" == "$c" ]]
Run Code Online (Sandbox Code Playgroud)

在Bash中,双括号设置了一个算术上下文(顺便说一下,美元符号主要是可选的)用于比较(也用于for ((i=0; i<=10; i++))$(())算术扩展),用于区分序列和一组创建的单个括号.子壳.

例如,这会执行命令true,因为它始终为true,它执行操作:

if (true); then echo hi; fi 
Run Code Online (Sandbox Code Playgroud)

这是一样的

if true; then echo hi; fi
Run Code Online (Sandbox Code Playgroud)

除了创建子shell.但是,if ((true))测试名为"true"的变量的值.

如果你要包含一个美元符号,那么"$ true"将明确地成为一个变量,但是if单个括号(或没有括号)的行为会改变.

if ($true)
Run Code Online (Sandbox Code Playgroud)

要么

if $true
Run Code Online (Sandbox Code Playgroud)

将执行变量的内容作为命令,并根据命令的退出值执行条件操作(如果内容不是有效命令,则给出"未找到命令"消息).

if (($true)) 
Run Code Online (Sandbox Code Playgroud)

做与上述相同的事情if ((true)).


wil*_*ell 6

if [ "$a" != "$b" -o "$a" != "$c" ]; then
  # ...
else
  # ...
fi
Run Code Online (Sandbox Code Playgroud)