標準語法
#!/bin/sh
while :; do
# 執行任務
# ...
done
關鍵點解析
: 是 Shell 內建的空命令,永遠回傳成功(exit code 0),相當於 C 的 ; 或 true。
while : 條件永真,形成無限迴圈。
do ... done 包裹迴圈本體。
常見變體
1. 使用 true(可讀性較佳)
while true; do
# ...
done
2. 使用 for 迴圈
for (( ; ; )); do
# ...
done
3. 單行寫法(互動測試用)
while :; do echo "Running..."; sleep 1; done
控制迴圈
break:跳出迴圈。
continue:跳過本次剩餘指令,進入下一次迭代。
trap 'break' SIGINT SIGTERM:捕捉 Ctrl+C 等信號優雅退出。
實用範例:監控服務並自動重啟
#!/bin/sh
SERVICE="./my_server"
while :; do
if ! pgrep -x "my_server" >/dev/null; then
echo "$(date): 服務異常退出,重啟中..."
$SERVICE &
fi
sleep 5
done
注意事項
- 無限迴圈必須包含
sleep 或阻塞式 I/O,否則會佔滿 CPU。
- 生產環境建議加入日誌輪轉、PID 檔案管理、信號處理,或直接使用
systemd、supervisord 等程序管理工具。
#!/bin/sh 宣告 POSIX sh 相容,若使用 Bash 特有語法(如 for ((;;)))請改 #!/bin/bash。