💻 Shell
概述:Shell 是操作系统的命令解释器,提供用户与内核交互的接口。Shell 脚本广泛用于系统管理、自动化运维、CI/CD 管道等场景,是每位开发者和运维工程师必备的技能。
概述
Shell 属于 脚本 & 运维语言 分类。常见的 Shell 类型包括 Bourne Shell (sh)、Bash、Zsh、Fish 等,其中 Bash 是 Linux 系统中最广泛使用的 Shell。
语言特点
- 系统级操作:直接调用系统命令,与操作系统无缝集成
- 管道组合:通过管道符
|将简单命令组合成强大功能 - 快速原型:无需编译,即时执行,适合快速验证想法
- 自动化利器:批量操作、定时任务、部署脚本的核心工具
- 跨平台:类 Unix 系统通用,Windows 也可通过 WSL 或 Git Bash 使用
Hello World
sh
#!/bin/sh
echo "Hello, World!"基础语法
变量
sh
# 变量赋值(等号两侧不能有空格)
NAME="Shell"
echo $NAME
# 环境变量
export PATH=$PATH:/usr/local/bin
# 特殊变量
echo "脚本名: $0"
echo "第一个参数: $1"
echo "参数个数: $#"
echo "所有参数: $@"
echo "上一条命令退出码: $?"
# 命令替换
CURRENT_DIR=$(pwd)
FILES_COUNT=`ls | wc -l`控制流
sh
# if-elif-else
if [ $age -ge 18 ]; then
echo "成年人"
elif [ $age -ge 12 ]; then
echo "青少年"
else
echo "儿童"
fi
# for 循环
for i in 1 2 3 4 5; do
echo "Number: $i"
done
# C 风格 for 循环
for ((i=0; i<10; i++)); do
echo "Count: $i"
done
# while 循环
while read line; do
echo "$line"
done < input.txt
# case 语句
case $1 in
start) echo "Starting..." ;;
stop) echo "Stopping..." ;;
restart) echo "Restarting..." ;;
*) echo "Usage: $0 {start|stop|restart}" ;;
esac函数
sh
# 函数定义
greet() {
local name=$1
echo "Hello, $name!"
}
# 调用函数
greet "Shell"
# 带返回值
add() {
echo $(($1 + $2))
}
result=$(add 3 5)
echo "3 + 5 = $result"文本处理
sh
# grep 搜索
grep -r "pattern" /path/to/files
# sed 替换
sed 's/old/new/g' file.txt
# awk 处理
awk '{print $1, $3}' data.txt
# find + xargs
find . -name "*.log" -mtime +7 | xargs rm -f应用领域
- 系统管理:服务器配置和维护脚本
- 自动化运维:批量部署、健康检查、日志清理
- CI/CD:Jenkins、GitLab CI 构建和部署管道
- 数据处理:日志分析、文本处理、数据格式转换
- 定时任务:cron 定时执行系统
- 开发工具:编译脚本、测试运行器
开发环境搭建
- Linux/Mac 系统自带 Shell
- Windows 用户:安装 WSL2 或 Git Bash
- 编辑器:VS Code + ShellCheck 扩展
- 调试:
bash -x script.sh开启调试模式
学习路线
- 入门阶段:基本命令 → 变量和参数 → 条件判断 → 循环
- 进阶阶段:函数 → 文本处理三剑客(grep/sed/awk)→ 进程管理
- 实战阶段:系统管理脚本 → 自动化部署 → CI/CD 管道
- 高级阶段:性能优化 → 安全编程 → 复杂工具链编排