Loading... ## Ubuntu系统Bash脚本执行多命令方法全解 🚀 ### 一、基础命令连接机制 Bash通过**元字符**实现多命令组合执行,核心逻辑如下: ```mermaid graph LR A[命令1] -->|连接符| B[命令2] B --> C[最终结果] ``` #### 1. **分号连接符 (`;`)** * **特性**:顺序执行,无论前命令是否成功 ```bash apt update ; apt upgrade -y # 更新源后立即升级 ``` 📌 适用场景:无依赖关系的连续操作 #### 2. **逻辑与 (`&&`)** * **特性**:前命令成功(退出码0)才执行后续命令 ```bash mkdir /backup && cp -r /data /backup # 创建目录成功才拷贝 ``` ⚠️ 关键点:任一命令失败则终止执行链 #### 3. **逻辑或 (`||`)** * **特性**:前命令失败(非0退出码)才执行后续命令 ```bash ping -c1 google.com || echo "网络故障" # 无法连通时输出警告 ``` --- ### 二、高级组合执行技巧 🔥 #### 1. **命令分组** ```bash # 子Shell分组 ( ) (cd /tmp && touch test.txt) # 目录切换不影响主Shell # 当前Shell分组 { } { date; df -h; } > system_report.txt # 多条命令输出重定向 ``` 📌 **区别**: * `( )` 创建子进程执行 * `{ }` 在当前Shell执行(需注意空格:`{`后需空格,`}`前需分号) #### 2. **管道连接符 (`|`)** ```bash grep "error" /var/log/syslog | mail -s "警报" admin@example.com ``` ⚡ **数据流**:前命令输出作为后命令输入 #### 3. **后台执行 (`&`)** ```bash compress_data.sh & # 后台运行脚本 monitor_logs.sh # 前台继续执行其他任务 ``` --- ### 三、流程控制结构 🧩 #### 1. 条件判断执行 ```bash if systemctl is-active nginx; then echo "Nginx运行中" else systemctl start nginx fi ``` #### 2. 循环执行 ```bash # 遍历文件处理 for file in *.log; do gzip "$file" done # 条件循环 while ! ping -c1 db-server; do sleep 5 done ``` --- ### 四、命令组合性能优化 ⚡ #### 并发执行模型 ```bash # 并行处理(使用&和wait) compress_logs.sh & backup_database.sh & wait # 等待所有后台任务完成 echo "所有任务完成" ``` #### 性能对比表 | 执行方式 | 命令示例 | 适用场景 | | -------------- | ---------------------- | ---------------- | | **串行** | `cmd1 && cmd2` | 强依赖任务 | | **并行** | `cmd1 & cmd2 & wait` | 独立IO密集型任务 | | **管道** | \`cmd1 | cmd2\` | --- ### 五、错误处理与日志记录 📝 #### 1. 统一错误捕获 ```bash { apt install -y package1 config_service.sh } 2>&1 | tee /var/log/operation.log # 同时输出到屏幕和文件 ``` #### 2. 退出码检查 ```bash tar -czf backup.tar.gz /data if [ $? -ne 0 ]; then echo "备份失败!退出码: $?" >&2 exit 1 fi ``` --- ### 六、实战案例:系统初始化脚本 💻 ```bash #!/bin/bash # 1. 基础配置 hostnamectl set-hostname node01 && \ echo "192.168.1.10 db-server" >> /etc/hosts # 2. 安全加固 { ufw allow 22/tcp ufw --force enable } && echo "防火墙已启用" # 3. 软件安装(并行下载) apt update & wget -q https://tool.com/pkg.deb & wait # 等待并行任务结束 # 4. 验证安装 dpkg -i pkg.deb && \ systemctl start myservice || \ echo "服务启动失败" | mail -s "警报" admin@site # 5. 清理工作 rm pkg.deb ; apt autoremove -y ``` **关键技巧解析**: * 使用 `&&` 确保关键步骤顺序执行 * 后台下载加速资源获取 * 组合 `&&` 和 `||` 实现成功/失败分支处理 --- ### 七、调试与排错 🐞 #### 1. 脚本调试模式 ```bash bash -x script.sh # 打印每条执行命令 ``` #### 2. 分段调试技巧 ```bash # 在脚本中插入调试点 set -x # 开启调试 critical_operation set +x # 关闭调试 ``` --- ### 结语 掌握Bash多命令执行方法,能显著提升运维自动化效率: 1. **基础连接符** (`;&&``||`) 构建命令逻辑链 2. **进程控制** (`&wait`) 实现并发执行 3. **错误处理** (`$?trap`) 保障脚本健壮性 > 附:命令执行流程图 > > ```mermaid > graph TB > A[开始] --> B{命令类型} > B -->|串行| C[cmd1 ; cmd2] > B -->|条件| D[cmd1 && cmd2] > B -->|并行| E[cmd1 & cmd2 & wait] > C --> F[结束] > D --> F > E --> F > ``` > 合理组合这些技术,可构建高效可靠的自动化运维体系!✨ 最后修改:2025 年 07 月 04 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏