【发布时间】:2014-03-21 17:35:24
【问题描述】:
我正在尝试建立使用逻辑 && 和 || 的等价性操作员到“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
用逻辑 && 和 || 写成作为
( ( [ flag = "$value" ] && function1 (p1) ) && function2 (p2) ) ||
( ( [ flag = "$value2" ] && function1 (p2) ) && function2 (p2)) ||
echo "message"
我的问题是:
- 是否可以始终使用上述方法。有哪些注意事项和需要“注意”的事项
- 在其他地方有一些关于 () 括号旋转的新外壳的讨论,该外壳的变量对父级不可用。我想看看如何将这些运算符分组以指示优先级,如果不是那些 () 括号。
@切普纳。谢谢你的澄清。 所以在一个看起来像这样的case语句中
optf=false
opte=false
optp=false
case $opt in
p ) ...
(( $opte || $optf ) && [ -n "$s1" ] ) && echo "error message"
上面可以改写为
{{ $opte || $optf } ; && [ -n "$s1" ] ; } && echo "error message"
它会这样翻译这个逻辑:当你遇到 p 选项时,检查 opte 或 optf 是否为真。如果其中一个为真并且 s1 有一个值,则抛出错误消息。 是这样吗,还是还有一些孔要塞。 Gotcha-我没有注意到“;” .和 { } ; - 我应该可以随心所欲地加入我的运营商?
【问题讨论】:
-
请从有效的shell开始。你的
if...else声明不是。 -
您好,谢谢。它的 KSH
-
(和)必须放在整个命令周围。当它们作为命令参数出现时,它们通常会导致语法错误。
标签: shell if-statement ksh conditional-statements logical-operators