引言
在编写Shell脚本时,确保命令按顺序执行、前一个命令完全结束后才执行下一个命令,是保证脚本逻辑正确性和可靠性的关键。本文将详细介绍Shell中命令顺序执行的机制、常见误区以及如何显式控制执行顺序。
顺序阻塞执行
在Shell脚本中,默认情况下所有命令都是顺序执行且阻塞的。也就是说,Shell会等待当前命令执行完毕(包括成功或失败),才会继续执行下一条命令。
#!/bin/bash
echo "第一步:开始执行"
sleep 3 # 第一步执行后,休眠三秒,再执行第二步
echo "第二步:上一步已完成"使用ouput=[order] 强行等待执行完毕
#!/bin/zsh
echo '==================拉取最新代码================='
output=`git pull origin main`
echo '==================代码拉取完成================='
echo ''
echo '==================执行文件编译================='
output=`npm run build`
echo '==================文件编译完成================='
echo ''
echo '==================执行文件删除================='
output=`rm -rf /usr/share/nginx/xxx`
echo '==================文件删除完成================='
echo ''
echo '==================执行文件迁移================='
output=`mv xxx/ /usr/share/nginx/`
echo '==================文件迁移完成================='
echo ''
echo '==================开始重启服务================='
output=`nginx -s reload`
echo '==================重启服务完成================='显式检查并等待服务启动
例如启动一个Web服务后等待其就绪:
#!/bin/bash
./start_server.sh &
SERVER_PID=$!
# 等待服务监听端口
while ! nc -z localhost 8080; do
sleep 1
done
echo "服务已就绪,继续后续操作"
# 执行测试或部署等操作