name: bash-linux
description: Bash/Linux终端模式。关键命令、管道、错误处理、脚本编写。在macOS或Linux系统上工作时使用。
allowed-tools: Read, Write, Edit, Glob, Grep, Bash
Bash Linux模式
Bash在Linux/macOS上的基本模式。
1. 操作符语法
命令链
| 操作符 |
含义 |
示例 |
; |
顺序运行 |
cmd1; cmd2 |
&& |
如果前一个成功则运行 |
npm install && npm run dev |
|| |
如果前一个失败则运行 |
npm test || echo "Tests failed" |
| |
管道输出 |
ls | grep ".js" |
2. 文件操作
关键命令
| 任务 |
命令 |
| 列出所有文件 |
ls -la |
| 查找文件 |
find . -name "*.js" -type f |
| 文件内容 |
cat file.txt |
| 前N行 |
head -n 20 file.txt |
| 后N行 |
tail -n 20 file.txt |
| 跟随日志 |
tail -f log.txt |
| 在文件中搜索 |
grep -r "pattern" --include="*.js" |
| 文件大小 |
du -sh * |
| 磁盘使用情况 |
df -h |
3. 进程管理
| 任务 |
命令 |
| 列出进程 |
ps aux |
| 按名称查找 |
ps aux | grep node |
| 通过PID终止 |
kill -9 <PID> |
| 查找端口用户 |
lsof -i :3000 |
| 终止端口 |
kill -9 $(lsof -t -i :3000) |
| 后台运行 |
npm run dev & |
| 作业列表 |
jobs -l |
| 带到前台 |
fg %1 |
4. 文本处理
核心工具
| 工具 |
用途 |
示例 |
grep |
搜索 |
grep -rn "TODO" src/ |
sed |
替换 |
sed -i 's/old/new/g' file.txt |
awk |
提取列 |
awk '{print $1}' file.txt |
cut |
切割字段 |
cut -d',' -f1 data.csv |
sort |
排序行 |
sort -u file.txt |
uniq |
唯一行 |
sort file.txt | uniq -c |
wc |
计数 |
wc -l file.txt |
5. 环境变量
| 任务 |
命令 |
| 查看所有 |
env 或 printenv |
| 查看一个 |
echo $PATH |
| 临时设置 |
export VAR="value" |
| 在脚本中设置 |
VAR="value" command |
| 添加到PATH |
export PATH="$PATH:/new/path" |
6. 网络
| 任务 |
命令 |
| 下载 |
curl -O https://example.com/file |
| API请求 |
curl -X GET https://api.example.com |
| POST JSON |
curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' URL |
| 检查端口 |
nc -zv localhost 3000 |
| 网络信息 |
ifconfig 或 ip addr |
7. 脚本模板
#!/bin/bash
set -euo pipefail # 错误时退出,未定义变量时退出,管道失败时退出
# 颜色(可选)
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'
# 脚本目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# 函数
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1" >&2; }
# 主函数
main() {
log_info "启动中..."
# 你的逻辑在这里
log_info "完成!"
}
main "$@"
8. 常见模式
检查命令是否存在
if command -v node &> /dev/null; then
echo "Node 已安装"
fi
默认变量值
NAME=${1:-"default_value"}
逐行读取文件
while IFS= read -r line; do
echo "$line"
done < file.txt
遍历文件
for file in *.js; do
echo "处理 $file"
done
9. 与PowerShell的差异
| 任务 |
PowerShell |
Bash |
| 列出文件 |
Get-ChildItem |
ls -la |
| 查找文件 |
Get-ChildItem -Recurse |
find . -type f |
| 环境变量 |
$env:VAR |
$VAR |
| 字符串连接 |
"$a$b" |
"$a$b"(相同) |
| 空值检查 |
if ($x) |
if [ -n "$x" ] |
| 管道 |
基于对象 |
基于文本 |
10. 错误处理
设置选项
set -e # 错误时退出
set -u # 未定义变量时退出
set -o pipefail # 管道失败时退出
set -x # 调试:打印命令
陷阱用于清理
cleanup() {
echo "清理中..."
rm -f /tmp/tempfile
}
trap cleanup EXIT
记住: Bash是基于文本的。使用 && 进行成功链,set -e 提高安全性,并引用你的变量!