通过逻辑 && 和 || 表达 If then else

use*_*594 2 shell ksh if-statement logical-operators conditional-statements

我试图建立使用逻辑 && 和 || 的等效性 运算符到“If then else fi”条件,我想验证这种理解是否正确。考虑这个 if 条件,与我的相关

if ( flag="$value" ) then 
function1 ( p1) 
rc=$?
    if ( "$rc"=0 ) then 
    function2 ( p2)
    fi
elif (flag="$value2" ) then
function1 ( p1) 
rc=$?
    if ( "$rc"=0 ) then 
    function2 ( p2)
    fi
else 
echo "Msg"
fi
Run Code Online (Sandbox Code Playgroud)

用逻辑 && 和 || 编写 作为

 ( ( [ flag = "$value" ] && function1 (p1) ) && function2 (p2) ) || 
   ( ( [ flag = "$value2" ] && function1 (p2) ) && function2 (p2)) || 
    echo "message" 
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • 可以一直用上面的方法吗?有哪些注意事项和“注意”事项
  • 其他地方有一些关于 () 括号旋转新 shell 的讨论,其变量不可用于父级。我想看看如何对这些运算符进行分组以指示优先级(如果不是那些 () 括号)。

@切普纳。谢谢您的澄清。所以在一个看起来像这样的案例声明中

optf=false
opte=false
optp=false

case $opt in

  p ) ...
     (( $opte || $optf ) && [ -n "$s1" ] ) && echo "error message" 
Run Code Online (Sandbox Code Playgroud)

上式可以改写为

 {{ $opte || $optf } ; && [ -n "$s1" ] ; } && echo "error message" 
Run Code Online (Sandbox Code Playgroud)

它会这样翻译这个逻辑:当你遇到 p 选项时,检查 opte 或 optf 是否为 true。如果任一为 true 并且 s1 有值,则抛出错误消息。是这样吗,还是还有一些漏洞需要填补。明白了-我没有注意到“;” 。和 { } ; - 我应该能够以我想要的方式加入我的干员?

che*_*ner 6

注意

if command1; then
    command2
else
    command3
fi
Run Code Online (Sandbox Code Playgroud)

不等于command1 && command2 || command3.

  • 如果command1失败,则按预期command2跳过并运行。command3
  • 如果command1成功,则command2运行并成功command3将按预期跳过。
  • 如果command1成功,则command2运行,失败command3则运行,与语句不同if

你需要使用类似的东西:

command1 && { command2; true; } || command3
Run Code Online (Sandbox Code Playgroud)

无论 是否成功,这都会强制右侧操作数&&成功command2,因此成功command3时永远不会运行command1