shell:当你运行while true的时候,你实际在做什么?

shell当你运行while true的时候,你在做什么?

在写shell死循环时,可能会经常用到下面的方式

while true
do
    do something here
done

其实,这里的true是一个/bin下面的可执行文件,同样的,false也是。 true什么也不做,返回一个表示成功的值。false什么也不做,返回一个表示错误的值:
qingsong@db2a:/tmp$ which true
/bin/true
qingsong@db2a:/tmp$ which false
/bin/false
qingsong@db2a:/tmp$ true
qingsong@db2a:/tmp$ echo $?
0
qingsong@db2a:/tmp$ false
qingsong@db2a:/tmp$ echo $?
1

详细一点说明如下:
NAME
   true - do nothing, successfully
SYNOPSIS
   true [ignored command line arguments]
   true OPTION
DESCRIPTION
Exit with a status code indicating success.
=====
NAME
   false - do nothing, unsuccessfully
SYNOPSIS
   false [ignored command line arguments]
   false OPTION
DESCRIPTION
   Exit with a status code indicating failure.

所以,每执行一次while true,就会调用true命令,生成一个新的进程,完成之后,再销毁这个进程,由可能导致性能的损失。为了避免,可以使用shell内置命令“:”,它总是返回0退出码:
qingsong@db2a:/tmp$ :
qingsong@db2a:/tmp$ echo $?
0
### 如何在 Shell 脚本中创建一个无限循环 在 Shell 编程中,`while` 循环是一种常用的控制结构。通过设置条件始终为真,可以轻松实现一个无限循环。以下是具体方法: #### 使用 `while true` 创建无限循环 最简单的方式是利用布尔值 `true` 来构建循环条件。Shell 中的 `true` 是一个内置命令,它总是返回成功状态(退出码为0)。因此,基于此特性,可以通过以下方式编写脚本: ```bash #!/bin/bash while true; do echo "This will run forever unless interrupted." sleep 5 # 延迟5秒以减少CPU占用率 done ``` 上述代码中的 `sleep` 命令用于暂停执行一段时间,从而降低 CPU 的负担[^1]。 #### 利用其他条件表达式的变体 除了直接使用 `true` 外,还可以采用 `[ 1 ]` 或者 `:`, 这些都是等效于永远成立的条件判断语句: ```bash #!/bin/bash while [ 1 ]; do echo "Running indefinitely..." sleep 3 done ``` 或者更简洁的形式如下所示: ```bash #!/bin/bash while : ; do echo "Infinite loop example" sleep 2 done ``` 这里冒号(`:`)代表的是no-op (无操作),即什么都不的命令,但它同样会持续返回成功的结果[^2]。 需要注意,在实际应用过程中应当小心设计此类程序逻辑,因为如果不加以适当处理可能会引发资源耗尽等问题。如果存在可能阻塞线程的操作比如同步网络请求,则应该格外注意避免造成死锁或者其他不可预期的行为。 另外值得注意的一点是在启动任何长期运行的服务之前最好确认环境变量以及配置文件已经正确加载完毕。这通常涉及到读取特定初始化文件如 `.bashrc` 和 `.profile` ,它们定义了用户的默认工作目录、路径以及其他一些个性化设定[^3]。 最后提醒一下开发者们关于项目依赖管理的重要性。当涉及多个模块协作完成复杂任务的时候,合理运用像npm这样的工具连同其配套描述文档package.json可以帮助团队成员快速理解整个系统的架构并方便后续维护升级等工作流程自动化程度提升不少[^4]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值