Bash Linux

bash-linux
分类编程
作者Agentic Awesome Skills 社区
许可MIT
评分4.50/5
使用3.7K

Bash Linux 模式

> Linux/macOS 上 Bash 的核心模式。

---

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. 环境变量

| 任务 | 命令 |
|------|---------|
| 查看全部 | envprintenv |
| 查看单个 | 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 |
| 网络信息 | ifconfigip addr |

---

7. 脚本模板

bash
#!/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 "Starting..." # 在此处编写逻辑 log_info "Done!" }

main "$@"

---

8. 常用模式

检查命令是否存在

bash
if command -v node &> /dev/null; then
    echo "Node is installed"
fi

变量默认值

bash
NAME=${1:-"default_value"}

逐行读取文件

bash
while IFS= read -r line; do
    echo "$line"
done < file.txt

遍历文件

bash
for file in *.js; do
    echo "Processing $file"
done

---

9. 与 PowerShell 的区别

| 任务 | PowerShell | Bash |
|------|------------|------|
| 列出文件 | Get-ChildItem | ls -la |
| 查找文件 | Get-ChildItem -Recurse | find . |
Get-ChildItem -Recurse | find . -type f |
| 环境 | $env:VAR | $VAR |
| 字符串拼接 | "$a$b" | "$a$b" (相同) |
| 空值检查 | if ($x) | if [ -n "$x" ] |
| 管道 | 基于对象 | 基于文本 |

---

10. 错误处理

设置选项

bash
set -e          # 出错时退出
set -u          # 使用未定义变量时退出
set -o pipefail # 管道命令失败时退出
set -x          # 调试:打印执行的命令

使用 Trap 进行清理

bash
cleanup() {
    echo "Cleaning up..."
    rm -f /tmp/tempfile
}
trap cleanup EXIT

---

> 记住: Bash 是基于文本的。请使用 && 构建成功链,使用 set -e 确保安全性,并务必为变量加上引号!

适用场景

此技能适用于执行概览中所描述的工作流或操作。

局限性

  • 仅在任务明确符合上述范围时使用此技能。
  • 不要将输出结果视为针对特定环境的验证、测试或专家评审的替代方案。
  • 如果缺少必要的输入、权限、安全边界或成功标准,请停止并请求澄清。