jos*_*ain 119 shell scripting bash control-flow
我正在浏览一个/etc/rc.d/init.d/sendmail
文件(我知道这几乎从未使用过,但我正在为考试而学习),并且我对&&
和||
运算符感到有些困惑。我已经阅读了它们可以在以下语句中使用的地方:
if [ test1 ] && [ test2 ]; then
echo "both tests are true"
elif [ test1 ] || [ test2 ]; then
echo "one test is true"
fi
Run Code Online (Sandbox Code Playgroud)
但是,此脚本显示单行语句,例如:
[ -z "$SMQUEUE" ] && SMQUEUE="QUEUE"
[ -f /usr/sbin/sendmail ] || exit 0
Run Code Online (Sandbox Code Playgroud)
这些似乎使用&&
and||
运算符来根据测试得出响应,但我无法挖掘有关这些运算符的这种特殊用途的文档。任何人都可以解释这些在这种特定情况下的作用吗?
Sha*_*off 183
&&
只有当左侧的退出状态为零(即真)时,才会评估右侧的。||
恰恰相反:只有当左侧退出状态为非零(即假)时,它才会评估右侧。
你可以认为[ ... ]
是一个有返回值的程序。如果内部的测试结果为真,则返回零;否则返回非零。
例子:
$ false && echo howdy!
$ true && echo howdy!
howdy!
$ true || echo howdy!
$ false || echo howdy!
howdy!
Run Code Online (Sandbox Code Playgroud)
额外说明:
如果你这样做了which [
,你可能会看到它[
实际上指向了一个程序!不过,它实际上通常不是在脚本中运行的。运行type [
以查看实际运行的内容。如果WAN上使用该程序的尝试,只是给的完整路径,像这样:/bin/[ 1 = 1
。
use*_*073 84
这是我的备忘单:
Tim*_*edy 31
从上面扩展@Shawn-j-Goff 的答案,&&
是逻辑与,||
是逻辑或。
请参阅高级 Bash 脚本指南的这一部分。部分内容来自以下链接供用户参考。
&& 和
if [ $condition1 ] && [ $condition2 ]
# Same as: if [ $condition1 -a $condition2 ]
# Returns true if both condition1 and condition2 hold true...
if [[ $condition1 && $condition2 ]] # Also works.
# Note that && operator not permitted inside brackets
#+ of [ ... ] construct.
Run Code Online (Sandbox Code Playgroud)
|| 或者
if [ $condition1 ] || [ $condition2 ]
# Same as: if [ $condition1 -o $condition2 ]
# Returns true if either condition1 or condition2 holds true...
if [[ $condition1 || $condition2 ]] # Also works.
# Note that || operator not permitted inside brackets
#+ of a [ ... ] construct.
Run Code Online (Sandbox Code Playgroud)
小智 15
根据我的经验,我使用 && 和 || 将 if 语句缩减为一行。
假设我们正在寻找一个名为 /root/Sample.txt 的文件,那么传统的迭代在 shell 中如下所示:
if [ -f /root/Sample.txt ]
then
echo "file found"
else
echo "file not found"
fi
Run Code Online (Sandbox Code Playgroud)
这 6 行可以简化为一行:
[[ -f /root/Sample.txt ]] && echo "file found" || echo "file not found"
Run Code Online (Sandbox Code Playgroud)
当运行几次迭代来设置变量或创建文件等时,使用单行 if 函数会更轻松,脚本看起来更流畅,唯一的缺点是从一次迭代中实现多个命令变得有点困难,但是你可以使用函数。
归档时间: |
|
查看次数: |
411494 次 |
最近记录: |