第1章 Shell简介与环境配置
本章将带你走进Shell的世界,从概念理解到环境搭建,为后续的Shell编程学习打下坚实基础。
1.1 什么是Shell?
1.1.1 Shell的定义
Shell(贝壳/壳层)是一种命令行解释器,它是Unix/Linux操作系统中非常重要的一部分。简单来说,Shell充当了用户与操作系统内核之间的"翻译官"和"桥梁"。
当你输入一个命令时,Shell会:
- 接收你输入的命令字符串
- 解析命令的含义
- 调用系统内核执行相应操作
- 将执行结果返回给你
1.1.2 Shell在系统中的角色
┌─────────────────────────────────────┐
│ 用户界面 │
│ (图形界面GNOME/KDE/终端) │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ Shell解释器 │
│ (Bash/Zsh/Sh等) │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ Unix/Linux内核 │
│ (Linux Kernel) │
└─────────────────────────────────────┘
Shell的主要功能包括:
| 功能 | 说明 |
|---|---|
| 命令解释 | 解析并执行用户输入的命令 |
| 脚本执行 | 读取并执行Shell脚本文件 |
| 环境管理 | 管理环境变量、别名等 |
| 任务控制 | 前后台任务管理 |
| 通配符扩展 | 处理文件名通配符(*、?等) |
| 输入输出重定向 | 控制输入输出流向 |
1.1.3 为什么要学习Shell?
学习Shell编程有诸多好处:
- 自动化任务:批量处理文件、自动备份、定时执行任务
- 系统管理:服务器运维、进程管理、日志分析
- 开发辅助:编译构建、代码部署、持续集成
- 提高效率:替代重复性操作,节省时间
- 跨平台:Linux、macOS、WSL都能运行
1.2 常见Shell类型
Unix/Linux系统中有多种Shell可供选择,每种Shell都有其特点和适用场景。
1.2.1 主流Shell介绍
sh (Bourne Shell)
- 创始人:Stephen Bourne
- 年代:1977年
- 特点:最原始的Unix Shell,POSIX标准的基础
- 位置:/bin/sh
- 兼容性:所有Unix系统都支持
- 优点:简洁、兼容性强
- 缺点:功能相对基础,缺乏现代特性
bash (Bourne Again Shell)
- 创始人:Brian Fox
- 年代:1989年
- 特点:Linux默认Shell,最流行的Shell
- 位置:/bin/bash
- 优点 :
- 命令补全功能强大
- 支持历史命令查询
- 丰富的内置功能
- 良好的兼容性
- 缺点:相对臃肿
zsh (Z Shell)
- 创始人:Paul Falstad
- 年代:1990年
- 特点:功能最强大的现代Shell
- 位置:/bin/zsh
- 优点 :
- 插件系统丰富(Oh My Zsh)
- 智能补全
- 强大的主题支持
- 兼容bash
- 缺点:配置相对复杂
dash (Debian Almquist Shell)
- 特点:轻量级POSIX兼容Shell
- 位置:/bin/dash
- 优点:启动速度快,占用资源少
- 用途:系统脚本、嵌入式系统
fish (Friendly Interactive Shell)
- 特点:面向用户的友好Shell
- 优点 :
- 开箱即用的智能提示
- 语法简洁易学
- 自动建议功能
- 缺点:bash脚本兼容性稍差
1.2.2 查看当前Shell
查看当前使用的Shell:
bash
# 方法1:查看环境变量
echo $SHELL
# 方法2:查看进程
ps -p $$
# 方法3:查看当前登录的Shell
ls -l /proc/$$/exe
常见输出:
/bin/bash- Bash Shell/bin/zsh- Zsh Shell/bin/dash- Dash Shell/usr/bin/fish- Fish Shell
1.2.3 查看系统支持的Shell
bash
cat /etc/shells
典型输出:
# /etc/shells: valid login shells.
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/zsh
/usr/bin/fish
1.3 安装与配置环境
1.3.1 Linux系统
大多数Linux发行版已经默认安装了bash。如果需要安装其他Shell:
Ubuntu/Debian:
bash
# 安装Zsh
sudo apt install zsh
# 安装Fish
sudo apt install fish
# 安装Oh My Zsh(可选)
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
CentOS/RHEL/Fedora:
bash
# 安装Zsh
sudo yum install zsh
# 安装Fish
sudo yum install fish
# 安装Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Arch Linux:
bash
# 安装Zsh
sudo pacman -S zsh
# 安装Fish
sudo pacman -S fish
1.3.2 macOS系统
macOS默认使用zsh(Catalina及更新版本),但可以安装更多Shell:
bash
# 使用Homebrew安装
brew install zsh
brew install fish
brew install gnu-sed
# 设置默认Shell
chsh -s /bin/zsh
chsh -s /usr/local/bin/fish
1.3.3 Windows系统
在Windows上使用Shell有多种方案:
方案1:WSL (Windows Subsystem for Linux)
powershell
# 以管理员身份打开PowerShell,运行:
wsl --install
# 安装完成后,打开Ubuntu应用
# 自动获得Ubuntu Linux环境
安装后即可使用Linux Shell。
方案2:Git Bash
- 下载Git for Windows:https://git-scm.com/
- 安装后自带Git Bash,使用bash环境
方案3:Windows Terminal + WSL
powershell
# 在Microsoft Store下载Windows Terminal
# 安装Ubuntu/其他Linux发行版
# 在Windows Terminal中使用
1.3.4 验证安装
安装完成后,验证Shell是否正常工作:
bash
# 检查版本
bash --version
zsh --version
fish --version
# 进入交互式Shell
bash
# 或
zsh
# 或
fish
# 退出Shell
exit
1.4 第一个Shell脚本
现在让我们创建第一个Shell脚本,体验Shell编程的魅力。
1.4.1 脚本基本格式
Shell脚本是一个包含一系列命令的文本文件。创建脚本时需要注意:
- 文件扩展名 :通常使用
.sh作为扩展名(虽然不是必须的) - shebang行:第一行指定脚本解释器
- 执行权限:需要给脚本添加执行权限
1.4.2 创建Hello World脚本
bash
#!/bin/bash
# 第一个Shell脚本 - Hello World
# 作者:Shell教程
# 日期:2024
echo "Hello, World!"
echo "欢迎学习Shell编程!"
代码说明:
| 行号 | 代码 | 说明 |
|---|---|---|
| 1 | #!/bin/bash |
shebang行,指定使用bash解释器 |
| 2 | # 第一个Shell脚本 - Hello World |
注释,说明脚本用途 |
| 3 | # 作者:Shell教程 |
注释,标注作者 |
| 4 | # 日期:2024 |
注释,标注日期 |
| 5 | echo "Hello, World!" |
输出字符串到屏幕 |
| 6 | echo "欢迎学习Shell编程!" |
输出中文字符串 |
1.4.3 保存脚本
将上述内容保存为 hello.sh:
bash
# 在当前目录创建文件
cat > hello.sh << 'EOF'
#!/bin/bash
# 第一个Shell脚本 - Hello World
echo "Hello, World!"
echo "欢迎学习Shell编程!"
EOF
1.4.4 添加执行权限
bash
# 添加执行权限
chmod +x hello.sh
# 验证权限
ls -l hello.sh
权限显示类似:
-rwxr-xr-x 1 user user 123 Jan 1 12:00 hello.sh
说明:
-rwxr-xr-x:文件类型和权限- 第一个
x表示所有者可执行 - 第二个
x表示用户组可执行 - 第三个
x表示其他人可执行
1.4.5 执行脚本
bash
# 方法1:直接运行(需要执行权限)
./hello.sh
# 方法2:使用解释器运行(不需要执行权限)
bash hello.sh
sh hello.sh
# 方法3:使用绝对路径
/home/user/hello.sh
执行结果:
Hello, World!
欢迎学习Shell编程!
1.4.6 常见执行错误
错误1:Permission denied
bash: ./hello.sh: Permission denied
解决方法 :添加执行权限 chmod +x hello.sh
错误2:No such file or directory
bash: ./hello.sh: No such file or directory
解决方法 :检查文件路径是否正确,使用 ls 确认文件存在
错误3:bad interpreter
bash: ./hello.sh: /bin/bash^M: bad interpreter: No such file or directory
解决方法 :文件可能有Windows换行符,执行 sed -i 's/\r$//' hello.sh
1.5 本章小结
本章我们学习了:
- Shell是什么:命令行解释器,用户与内核之间的桥梁
- 常见Shell类型:sh、bash、zsh、dash、fish
- 环境配置:Linux、macOS、Windows不同系统的安装方法
- 第一个脚本:创建、权限设置、执行Hello World脚本
练习题
- 查看你当前系统使用的Shell是什么?
- 查看系统支持哪些Shell?
- 创建一个脚本,输出你的用户名和当前日期时间。
- 给你的脚本添加颜色输出(例如:绿色文字)。
1.6 下章预告
下一章我们将学习Shell的基础语法,包括:
- 变量的定义与使用
- 系统预定义变量
- 引号的区别
- 注释的使用
更多内容,欢迎访问南徽玉的个人博客