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)
我的问题是:
@切普纳。谢谢您的澄清。所以在一个看起来像这样的案例声明中
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 有值,则抛出错误消息。是这样吗,还是还有一些漏洞需要填补。明白了-我没有注意到“;” 。和 { } ; - 我应该能够以我想要的方式加入我的干员?
注意
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
。