Shell基础
2026/7/24 22:33:39 网站建设 项目流程

前言:

Shell 是连接用户与 Linux 内核的命令解释器,Shell 脚本可整合命令,实现运维工作自动化。本文系统梳理 Shell 编程基础,辨析易混知识点,搭建基础知识框架。

目录

前言:

一、Shell

1.1 Shell 定义

1.2 Shell 常见类型

1.3 shell应用场景

1.4 查看 Shell 相关命令

二、Shell 脚本

2.1 基础概念

2.2 创建脚本流程

2.3 脚本四种执行方式对比

2.4 脚本编写与执行案例

三、 变量基础

3.1 变量的引用与输出

3.2 echo 命令高级用法

3.3echo命令案例

四、特殊变量赋值

4.1 引号区别

4.2 反撇号与命令替换

4.3 read 交互式输入命令

4.4各参数案例

五、变量运算

5.1 expr

5.2 $[]与$(())

5.3 let

5.4 bc

六、 变量类型与作用范围

6.1 变量分类

6.2 位置变量(脚本传参)

6.3 预定义特殊变量

6.4 export 变量导出(控制子 Shell 可见性)

七、重定向与管道

7.1 标准输入、标准输出与标准错误输出

7.2 输出重定向

7.3 输入重定向

7.4 管道操作

7.5 综合应用示例

八、总结


一、Shell

1.1 Shell 定义

命令解释器,介于用户内核之间,具备命令翻译输入输出管理编程能力

  • 命令翻译接收用户输入的指令,将人类可读的命令转换为操作系统内核能够识别执行的指令,充当用户与系统内核之间的翻译桥梁。
  • 输入输出管理统一管理程序标准输入、标准输出与错误输出,支持重定向、管道等功能,灵活控制数据流向,实现信息过滤、日志保存等操作。
  • 编程具备完整程序编写能力,支持变量、分支判断、循环、函数等语法,可将多条命令组合成自动化脚本,实现复杂运维任务批量处理。

1.2 Shell 常见类型

Shell 类型说明使用场景
/bin/bash默认 Shell,CentOS/RHEL 主流使用★Linux 系统日常、脚本开发
/bin/shbash 的 “祖先”,现代系统软链接指向 bash兼容老式 UNIX 脚本
/bin/tcshC Shell 增强版极少使用

1.3 shell应用场景

  • 自动化软件安装摒弃手动一步步下载、编译、配置、启动服务的操作,编写脚本实现软件一键部署;可统一配置 yum/apt 源、自动处理依赖、修改配置文件、设置开机自启,实现多台服务器标准化批量安装。

  • 批量用户管理面对大量服务器账号维护工作,通过脚本批量创建、删除系统用户,统一设置初始密码、分配用户权限、限定登录权限与家目录,快速完成账号生命周期管理,大幅减少逐条操作的重复工作量。

  • 数据备份自动定时打包日志、业务重要数据,支持本地备份或远程同步至备份服务器;脚本内可添加备份过期清理、备份文件完整性校验、异常失败告警机制,保障数据定期、可靠留存。

  • 服务器运维监控持续采集服务器 CPU、内存、磁盘、负载、端口、进程运行状态;当资源占用超出阈值、服务意外停止时,自动触发告警通知运维人员,实现 7×24 小时无人值守基础监控。

1.4 查看 Shell 相关命令

cat /etc/shells # 查看系统支持的所有Shell

1-1


echo $SHELL # 查看当前正在使用的Shell

1-2

二、Shell 脚本

2.1 基础概念

shell 脚本 = 命令清单(逐行执行)

脚本组成:脚本声明(解释器)+ 注释说明 + 命令语句

2.2 创建脚本流程

创建文件 → 添加执行权限 → 检查语法 → 执行脚本

2.3 脚本四种执行方式对比

表格

执行方式命令示例是否需要权限运行环境是否保留变量
路径执行./script.sh✅ 需要子 Shell
bash 执行bash script.sh❌ 不需要子 Shell
source 执行source script.sh❌ 不需要当前 Shell
重定向执行sh < script.sh❌ 不需要子 Shell

2.4 脚本编写与执行案例

编写vim file.sh

2-1

执行

1路径执行

2-2

2bash执行

2-3

3source 执行

2-4

4重定向执行

2-5

三、 变量基础

变量可以理解为数据的储物柜

3.1 变量的引用与输出

  1. 基本引用:变量前加$符号
    <figure class="image"><img alt="" height="75" src="https://i-blog.csdnimg.cn/direct/63534e7c296d4492b16b19252879f1ca.png" width="835"/>

    3-1

  2. 边界区分:变量名称边界模糊时,必须使用${变量名}界定

    3-2

3.2 echo 命令高级用法

语法:echo [选项] 内容

表格

参数作用示例效果
-n不换行输出echo -n "第一行\n第二行"
-e识别转义字符echo -e "第一行\n第二行"

3-3

常用转义符:

\n换行、\t制表符 (Tab)、\c不换行、\b退格、\\输出斜杠本身、\$输出 $ 符号

3.3echo命令案例

制作表格

3-4

四、特殊变量赋值

特殊变量是 shell 自带只读变量,存脚本 / 命令运行信息,不能直接变量=值修改

4.1 引号区别

  • 双引号"":识别变量 name输出Z
  • 单引号'':不识别变量,原样输出$name

    4-1

4.2 反撇号与命令替换

`反撇号``:把命令输出存入变量;等价写法$(命令)

4-2

4.3 read 交互式输入命令

4.3.1基本用法

4-3

4-4

read 参数功能示例
-p输出提示文字read -p "输入姓名:" name
-n限制输入字符数量read -n 3 age
-s静默输入(密码,不回显)read -s -p "密码:" passwd
-t设置输入超时秒数read -t 5 input

4.4各参数案例

read -p "输入姓名:" name

4-5

read -n 3 age

4-6

read -s -p "密码:" passwd

4-7

read -t 5 input

4-8

五、变量运算

Shell 原生只支持整数运算;浮点运算依赖bc工具,下表是一些常用的变量运算方式.

运算方式特点示例
expr运算符两侧必须空格;* 需要转义expr $X \* $Y
$[]仅计算不输出,只支持整数echo $[2 * 3]
$()仅计算不输出,只支持整数echo $((2/3))
let直接修改变量,整数运算,支持自增自减let num++ ; let num=num*2
bc计算器,支持浮点、乘方、开方、逻辑运算`echo "scale=2;10/3"bc`

5.1 expr

expr 是一款表达式计算工具,它能完成表达式的求值操作。

5-1

5.2 $[]与$(())

expr更简洁:乘法不用转义!

5-2

5.3 let

let命令可以直接修改变量

5-3

5.4 bc

bc计算器——浮点运算

5-4

bc也可以进行逻辑运算,真返回1,假返回0

5-5

六、 变量类型与作用范围

6.1 变量分类

  1. 自定义变量:用户自行定义,默认私有 例:name="小赵"
    <figure class="image"><img alt="" height="80" isbindedload="true" src="https://i-blog.csdnimg.cn/direct/ea82c44a9efe4aa7b6218f2fd1159146.png" width="620"/>

    6-1

  2. 环境变量:系统预定义,公共变量
  3. 例:
    变量名含义示例输出
    $USER当前登录用户名root
    $HOME当前用户家目录/root
    $PWD当前所在工作目录/etc / /usr/local
    $SHELL用户默认登录 Shell/bin/bash /
    $LANG系统语言编码zh_CN.UTF-8
    $RANDOM随机整数(范围 0~32767)15623
    $UID当前用户数字 ID0 (root) / 1000 (普通用户)
  4. 只读变量readonly修饰,无法修改
  5. 6-2

6.2 位置变量(脚本传参)

变量含义
$0脚本本身名称
$1-$9第 1~9 个参数
$#参数总个数
$*所有参数(整体视为 1 段)
$@所有参数(参数相互独立)

6-3

运行:

6-4

案例:创建用户脚本

#!/bin/bash # 创建用户脚本 # 用法:bash user.sh 用户名 密码 useradd $1 echo "$2" | passwd --stdin $1

执行验证:

6-5

6.3 预定义特殊变量

变量含义
$?上一条命令返回状态,0 = 成功,非 0 = 失败
$$当前进程 PID
$!最后 1 个后台进程 PID

测试脚本:

#!/bin/bash # 测试上一条命令返回值 ls /etc > /dev/null echo "ls /etc 的返回值:$?" ls /abc > /dev/null 2>&1 echo "ls /abc 的返回值:$?" echo echo "当前Shell进程PID:$$" sleep 100 & echo "后台进程PID:$!"

执行:

6-6

6.4 export 变量导出(控制子 Shell 可见性)

默认变量只在当前Shell有效
验证:

6-7

三种用法:

方式1:先定义变量,再导出
name="小赵"
export name

6-8


方式2:定义同时直接导出
export city="邯郸"

6-9


方式3:取消导出,子Shell无法读取该变量
export -n city

6-10

七、重定向与管道

7.1 标准输入、标准输出与标准错误输出

Linux 三大基础数据流(三条数据流水线)

文件描述符标准名称默认绑定设备核心作用说明
0STDIN(标准输入)键盘程序读取输入数据的通道
1STDOUT(标准输出)显示器程序正常运行结果的输出通道
2STDERR(标准错误输出)显示器程序报错、异常信息的输出通道

7.2输出重定向

> 覆盖:把输出保存到文件(覆盖原有内容)
>> 追加:把输出追加到文件末尾

7-1

7.3 输入重定向

从文件读取:cat <file.txt 等价于cat file.txt
# 输出到文件
cat << EOF > file.txt
这里自己写内容
EOF

7-2

7.4 管道操作

管道=把多个命令串联起
常见的几个管道命令
命令功能示例
grep过滤cat file.txt | grep "4"
sort排序cat file.txt | sort
uniq去重 / 统计cat file.txt | uniq -c
wc统计行 / 字 / 字符cat file.txt | wc -l
cut提取列cat file.txt | cut -d: -f1

示例:

7-3

7.5综合应用示例

1自动化备份脚本:

7-4

2服务器健康检查脚本:

7-5

3批量用户管理:

7-6

八、总结

本文系统梳理 Shell 编程基础,完整覆盖 Shell 基础定义、脚本运行、变量、运算、重定向与管道核心内容。

  • Shell 是用户与 Linux 内核的命令解释器,主流为 /bin/bash,可通过 cat /etc/shells、echo $SHELL 查看系统支持及当前使用的 Shell。
  • Shell 脚本有四种执行方式,核心差异在于是否需要执行权限、运行环境及变量是否保留。
  • 变量是 Shell 核心,引用用 $ 变量名,边界模糊用 ${变量名};echo -n 不换行,-e 识别转义字符。
  • 双引号识别变量,单引号原样输出;命令替换用反撇号或 $(命令),可存储命令执行结果。
  • Shell 变量运算:expr 需注意空格和转义,\([]、\)(())、let 仅支持整数,浮点运算依赖 bc。
  • 变量分自定义、环境、只读三类,位置变量用于传参,export 可控制变量在子 Shell 的可见性。
  • Linux 有 0、1、2 三条标准数据流,重定向用 >(覆盖)、>>(追加),/dev/null 可丢弃输出。
  • 管道符 | 串联命令,常用管道命令有 grep、sort 等,可实现复杂文本处理。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询