🚀 Day 1 of 7

基础入门与环境准备

📖 预计时长:2 小时 🎯 难度:入门 🔧 工具:bash / vim / terminal
了解 Shell 的本质与 Bash 的地位,掌握编写和运行第一个脚本的完整流程,学会用调试模式排查问题,为后续学习打好地基。
了解 Shell 与 Bash 的关系 掌握 shebang 写法 三种脚本执行方式 bash -x 调试技巧 常用基础命令回顾 规范的脚本结构

1️⃣ Shell 是什么?

Shell 是用户与 Linux 内核之间的命令解释器,它接收用户输入的命令,调用系统内核执行,并将结果返回给用户。Shell 脚本则是把一系列命令组织成文件,实现批量自动化处理。

常见 Shell 种类

Shell 名称特点配置文件
bash最流行,Linux 默认 Shell,兼容 sh~/.bashrc / ~/.bash_profile
shPOSIX 标准,多为 bash/dash 的符号链接—
zsh功能最丰富,macOS 默认~/.zshrc
dash轻量快速,Ubuntu /bin/sh 默认—
fish语法友好,自动补全强~/.config/fish/
ℹ️
本教程使用 Bash查看当前 Shell:echo $SHELL,查看系统支持的 Shell:cat /etc/shells

2️⃣ 第一个 Shell 脚本

脚本结构规范

#!/bin/bash
# ==================================================
# 脚本名称: hello.sh
# 功能描述: 第一个 Shell 脚本示例
# 作    者: 运维工程师
# 创建时间: 2026-05-21
# ==================================================

echo "Hello, Shell 脚本世界!"
echo "当前用户:$(whoami)"
echo "当前时间:$(date '+%Y-%m-%d %H:%M:%S')"
echo "主机名:$HOSTNAME"
echo "工作目录:$PWD"
bash

shebang 详解

脚本第一行 #!/bin/bash 称为 shebang(#!),告诉系统用哪个解释器执行该文件。

#!/bin/bash           # 最常用,指定 bash 解释器
#!/usr/bin/env bash   # 更可移植,从 PATH 中找 bash(推荐)
#!/bin/sh             # POSIX 兼容,功能较少
bash
💡
推荐写法生产脚本推荐用 #!/usr/bin/env bash,移植性更好,不依赖 bash 的固定路径。

3️⃣ 三种执行方式

# 方式一:赋予执行权限后直接运行(最常用)
chmod +x hello.sh
./hello.sh

# 方式二:用 bash 命令解释器执行
bash hello.sh

# 方式三:source 执行(在当前 Shell 环境中执行,会影响当前环境变量)
source hello.sh
# 或简写为
. hello.sh
bash
执行方式是否需要权限子 Shell?适用场景
./script.sh需要 +x是(子 Shell)正式运行脚本
bash script.sh不需要是(子 Shell)调试/测试
source script.sh不需要否(当前 Shell)加载配置/函数库

4️⃣ 调试技术

bash 调试选项

# -x:追踪模式,打印每条执行的命令(最常用)
bash -x hello.sh

# -n:语法检查,不执行脚本
bash -n hello.sh

# -e:遇到错误立即退出
bash -e hello.sh

# 组合使用
bash -xeuo pipefail hello.sh
bash

在脚本内部开启调试

#!/bin/bash
set -x   # 从这里开始调试
echo "这里会被追踪"
set +x   # 关闭调试
echo "这里不追踪"
bash

set 严格模式(推荐写在每个脚本顶部)

#!/bin/bash
set -euo pipefail
# -e: 命令失败时立即退出
# -u: 使用未定义变量时报错
# -o pipefail: 管道中任意命令失败则整体失败
bash
⚠️
注意set -e 在某些情况下可能导致意外退出,比如 grep 没找到匹配时返回1。初学阶段可暂不使用,理解错误处理后再启用。

5️⃣ 基础命令回顾

文件与目录操作

# 常用文件操作命令
ls -lah              # 列出详细文件列表(含隐藏文件)
pwd                  # 打印当前目录
cd /path/to/dir      # 切换目录
mkdir -p a/b/c       # 递归创建目录
cp -r src/ dst/      # 递归复制
mv old.txt new.txt   # 移动/重命名
rm -rf dir/          # 递归删除(谨慎!)
find . -name "*.sh"  # 查找文件
bash

文本查看

cat file.txt         # 查看全部内容
head -n 20 file.txt  # 查看前20行
tail -f /var/log/syslog  # 实时追踪日志
less file.txt        # 分页查看
wc -l file.txt       # 统计行数
bash

权限相关

# 文件权限说明
# -rwxr-xr-x  1 user group  size  date  filename
#  |||||||||||
#  |++++++++++ 三组权限:owner / group / others
#  r=读(4)  w=写(2)  x=执行(1)

chmod 755 script.sh  # owner:rwx, group:r-x, others:r-x
chmod +x script.sh   # 给所有人加执行权限
chown user:group file.txt
bash

6️⃣ 注释与代码风格

#!/usr/bin/env bash
# 单行注释用 #

: '
多行注释方法一:用冒号命令配合单引号
这里的内容不会被执行
注意冒号和单引号之间有空格
'

# 规范的脚本头部模板
################################################################################
# Script Name : backup.sh
# Description : 每日自动备份脚本
# Author      : 你的名字
# Date        : 2026-05-21
# Version     : 1.0
# Usage       : ./backup.sh [options]
################################################################################
bash

7️⃣ 特殊变量预览

以下变量在脚本中非常常用,今天先认识,后面详细学习:

变量含义
$0脚本自身的名称
$1 ~ $9命令行第1到第9个参数
$#命令行参数的个数
$@所有参数(推荐使用)
$?上一条命令的退出状态码(0=成功)
$$当前脚本的进程 ID(PID)
$!最近一个后台进程的 PID
$LINENO当前行号(调试用)

🏋️ 今日练习

  1. 创建目录 ~/shell-learn,在其中创建 hello.sh,输出欢迎信息、当前用户、日期时间
  2. 用三种方式分别执行该脚本,观察区别
  3. 故意写一个语法错误,用 bash -n 检测,再用 bash -x 跟踪
  4. 编写一个脚本,打印所有特殊变量($0, $#, $@, $?, $$)的值
  5. 尝试在脚本头部加入 set -euo pipefail,执行一个不存在的命令,观察结果