跳转至

Shell 脚本基础(教学完整版 · 详细版)

本章定位:从 0 到能写脚本
适用:教学 / 自学 / 面试 / 实战
默认解释器:bash


1. 什么是 Shell 与 Shell 脚本

1.1 Shell 是什么

Shell 是 命令解释器,作用是:

  • 接收用户命令
  • 解析并交给 Linux 内核执行
  • 输出执行结果

常见 Shell:

  • sh
  • bash(默认)
  • zsh
  • fish

1.2 什么是 Shell 脚本

Shell 脚本就是:

把一系列 Linux 命令写进文件,由 Shell 自动执行

常见用途:

  • 自动化运维
  • 批处理任务
  • 定时任务
  • 部署脚本

2. 第一个 Shell 脚本(必须会)

2.1 基本结构

#!/bin/bash
echo "Hello Shell"

2.2 说明

  • #!/bin/bash:指定解释器(shebang)
  • 第一行必须写
  • 决定脚本用哪个 Shell 执行

2.3 执行方式

方式一(推荐)

chmod +x hello.sh
./hello.sh

方式二

bash hello.sh

3. 变量(重点)

3.1 定义变量

name="Tom"

⚠️ 等号两边 不能有空格


3.2 使用变量

echo $name
echo "${name}"

3.3 只读变量

readonly age=18

3.4 删除变量

unset name

4. 脚本参数(位置参数)

4.1 基本参数

参数 含义
$0 脚本名
$1 第一个参数
$2 第二个参数
$# 参数个数
$@ 所有参数

4.2 示例

#!/bin/bash
echo "脚本名:$0"
echo "第一个参数:$1"
echo "参数个数:$#"

执行:

./test.sh hello world

5. 输入(read)

5.1 基本语法

read name
echo "Hello $name"

5.2 带提示

read -p "请输入用户名:" user

6. 条件判断(if)

6.1 基本语法

if [ 条件 ]; then
  命令
fi

⚠️ 中括号 必须有空格


6.2 数值判断

运算符 含义
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于

示例:

if [ $age -ge 18 ]; then
  echo "成年"
fi

6.3 字符串判断

if [ "$name" = "Tom" ]; then
  echo "Hello Tom"
fi

6.4 文件判断(非常常用)

判断 含义
-f 是否普通文件
-d 是否目录
-e 是否存在

示例:

if [ -f app.log ]; then
  echo "日志存在"
fi

7. case 分支判断

7.1 基本语法

case $var in
  1)
    echo "one"
    ;;
  2)
    echo "two"
    ;;
  *)
    echo "other"
    ;;
esac

7.2 使用场景

  • 菜单
  • 参数分发

8. 循环结构(重点)

8.1 for 循环

for i in 1 2 3
do
  echo $i
done

8.2 for + 范围

for i in {1..5}
do
  echo $i
done

8.3 while 循环

i=1
while [ $i -le 3 ]
do
  echo $i
  i=$((i+1))
done

9. 函数(基础)

9.1 定义函数

hello() {
  echo "Hello $1"
}

9.2 调用函数

hello Tom

10. 常用内置变量

变量 含义
$? 上一条命令返回值
$$ 当前脚本 PID
$! 上一个后台进程 PID

11. 重定向与管道(基础)

11.1 输出重定向

echo "test" > a.txt
echo "append" >> a.txt

11.2 错误重定向

command 2> error.log

11.3 管道

grep ERROR app.log | wc -l

12. 实战示例(教学重点)

示例:统计日志错误数

#!/bin/bash

if [ ! -f app.log ]; then
  echo "日志不存在"
  exit 1
fi

count=$(grep ERROR app.log | wc -l)
echo "ERROR 数量:$count"

13. 常见错误总结

  • 变量等号有空格
  • if 中括号无空格
  • 忘记执行权限
  • Windows 换行符问题

14. 本章小结

你现在应该已经能够:

  • 理解 Shell 脚本结构
  • 使用变量、判断、循环、函数
  • 编写简单但实用的自动化脚本

15. 教学建议

Shell 不追求复杂,追求稳定和可读

推荐原则:

  • 50 行以内
  • 清晰注释
  • 明确退出码