在 Ubuntu 系统中,可以通过多种方式连续执行多条命令,常用方法包括使用命令分隔符(;
、&&
、||
)、管道(|
)或编写 shell 脚本。以下是具体示例:
一、使用分号(;
)无条件顺序执行
无论前一条命令是否执行成功,均按顺序执行后续命令。
语法:
命令1; 命令2; 命令3
示例:
-
更新系统并安装软件(不检查更新是否成功,强制安装):
sudo apt update; sudo apt install -y python3-pip; pip3 --version
- 先更新软件源,再安装
python3-pip
,最后查看版本。
- 先更新软件源,再安装
-
文件操作组合(创建目录、进入目录、新建文件):
mkdir -p ~/demo; cd ~/demo; touch example.txt
- 在用户目录下创建
demo
目录(-p
确保父目录存在),进入该目录,创建空文件example.txt
。
- 在用户目录下创建
二、使用逻辑与(&&
)仅前一条成功时执行下一条
语法:
命令1 && 命令2 && 命令3
示例:
-
安全更新与安装(仅当更新成功时才安装):
sudo apt update && sudo apt install -y nginx && systemctl start nginx
- 若
apt update
失败(如网络问题),后续的apt install
和启动 Nginx 命令不会执行。
- 若
-
条件文件操作(仅当文件存在时删除并备份):
test -f ~/data.csv && rm ~/data.csv && cp /backup/data.csv ~/
- 先检查
data.csv
是否存在(test -f
返回真),再删除旧文件并恢复备份。
- 先检查
三、使用逻辑或(||
)仅前一条失败时执行下一条
语法:
命令1 || 命令2 || 命令3
示例:
-
错误处理(若命令失败,输出提示):
sudo service nginx start || echo "Nginx 启动失败,请检查服务状态"
- 若启动 Nginx 失败,打印错误信息(不影响后续流程)。
-
备选命令执行(根据系统版本选择安装方式):
apt install -y docker.io || snap install docker
- 若通过
apt
安装 Docker 失败,尝试通过snap
安装。
- 若通过
四、使用管道(|
)传递命令输出
将前一条命令的输出作为后一条命令的输入,适用于数据处理场景。
语法:
命令1 | 命令2 | 命令3
示例:
-
过滤日志文件(查找包含“error”的行并统计数量):
cat /var/log/app.log | grep "error" | wc -l
cat
读取日志文件,grep
过滤含“error”的行,wc -l
统计行数。
-
实时监控进程(筛选指定进程并排序):
ps -ef | grep python | grep -v grep | sort -k 8
- 列出所有 Python 进程(排除
grep
自身),按 CPU 使用率排序。
- 列出所有 Python 进程(排除
五、在 shell 脚本中组合多条命令
将多条命令写入 .sh
文件,通过 bash 脚本名.sh
执行,适合复杂流程自动化。
示例脚本(deploy.sh
):
#!/bin/bash
# 停止旧服务
sudo systemctl stop myapp.service || echo "旧服务不存在,跳过停止"
# 拉取最新代码
git pull origin main && echo "代码更新成功" || echo "代码拉取失败"
# 重启服务
sudo systemctl start myapp.service && systemctl status myapp.service
执行:
chmod +x deploy.sh && ./deploy.sh
六、高级用法:子shell 与后台执行
-
在子shell 中执行多条命令(不影响当前终端环境):
(cd ~/project; make clean; make install)
- 在子shell 中进入项目目录,清理并安装,执行完后回到当前目录。
-
后台异步执行(用
&
结尾,适用于耗时任务):(sudo apt update && sudo apt upgrade -y) &
- 在后台更新系统,前台可继续操作(用
jobs
查看后台任务,fg
切回前台)。
- 在后台更新系统,前台可继续操作(用
总结
;
:无条件顺序执行,不检查前序命令状态。&&
:仅前序命令成功时执行后续命令,用于依赖关系。||
:仅前序命令失败时执行后续命令,用于错误处理。|
:传递数据到下一条命令,用于流式处理。- 脚本:适合复杂流程,可添加注释、变量和逻辑判断(如
if
语句)。
根据场景选择合适的分隔符,可大幅提升命令行操作效率,尤其在自动化脚本、服务器运维和数据处理中广泛应用。