当前位置:首页>Linux>Linux 运维必学(八)|零基础吃透 Bash Shell

Linux 运维必学(八)|零基础吃透 Bash Shell

  • 2026-09-08 14:17:31
Linux 运维必学(八)|零基础吃透 Bash Shell
新手可循序渐进学习,老手可直接收藏,日常查命令、编写脚本都适用。

一、初识 Bash Shell

Shell 是用户与系统内核的交互桥梁,Bash 是 Linux 系统默认的主流命令解释器。
查看系统支持的所有 Shell/etc/shells

1. Bash 核心优势

  • 自动记录历史命令,记录文件:~/.bash_history
  • 支持 Tab 键补全,提升输入效率
  • 支持自定义命令别名,简化长指令
  • 具备前后台任务管理能力
  • 原生支持 Shell 脚本,可实现自动化运维
  • 内置通配符,快速批量匹配文件

2. 常用快捷键与基础操作

区分命令是内置指令还是外部程序
type 指令名
长命令换行写法
行尾输入 \ ,按下回车即可接续编写
编辑快捷键
Ctrl+u  向前清空整行内容
Ctrl+k  向后清空整行内容
Ctrl+a  光标跳转至行首
Ctrl+e  光标跳转至行尾

二、Shell 变量(脚本核心重点)

变量用于存储数据,分为自定义变量、环境变量,是编写 Shell 脚本的基础。

1. 变量基础用法

读取变量两种等效写法
echo$ 变量名
echo ${变量名}
示例
echo $PATH

变量赋值八大规则

(1)赋值符号 = 左右(严禁添加空格)
正确示例:myname=test
错误示例:myname = test
(2)变量名仅可使用字母、数字、下划线,不能以数字开头
(3)内容包含空格时,必须用引号包裹
双引号:解析\(等特殊字符

单引号:内容视为纯文本,特殊字符不生效

示例

var1="lang is\)LANG"
var2='lang is $LANG'
(4)空格、特殊字符使用 \ 转义
示例
myname=VBird\ Tsai
(5)嵌套执行命令,推荐使用$(指令) 格式

示例

version=$(uname -r)
(6)变量追加内容
PATH="$PATH":/home/bin或PATH=${PATH}:/home/bin
(7)自定义变量转为环境变量,可供子进程调用
export 变量名
(8)删除已定义变量
unset 变量名

2. 变量查看与特殊变量

env  仅查看系统环境变量
set  查看全部变量,包含环境变量、自定义变量、内置变量
常用特殊变量
(1)$  查看当前 Shell 进程 PID
用法:echo $
(2)$?  查看上一条命令执行状态,成功返回 0,失败返回非 0 数字
(3)PS1  自定义命令行提示符

3. 系统语系配置(解决中文乱码)

核心控制变量:LANG、LC_ALL系统配置文件:/etc/locale.conf
查看系统所有支持语系
locale -a
修改系统默认语系
localectl set-locale en_US.utf8

4. 变量作用范围

通过 export 导出的环境变量,可被子 Shell 读取。未导出的自定义变量,仅在当前会话生效。

5. 交互式录入变量

read [-pt] 变量名

6. 定义变量类型

Bash 变量默认格式为字符串,使用 declare 手动指定类型
declare [-aixr] 变量名
(1)-a  定义数组类型
(2)-i  定义整数类型,支持数学运算
(3)-x  功能等同于 export
(4)-r  设为只读变量,无法修改、删除

7. 变量内容处理

内容删除

${变量 #关键字}  从头最短匹配删除
${变量关键字}  从头最长匹配删除
${变量 % 关键字}  从尾最短匹配删除
${变量 %% 关键字}  从尾最长匹配删除

内容替换

${变量 / 旧串 / 新串}  替换第一个匹配内容
${变量 // 旧串 / 新串}  全局替换所有匹配内容
变量判空语法(高频实用)
记忆口诀:
${var:-def} 空就用默认(不改变原变量)
${var:=def} 空就赋值def(会改变原变量)
${var:+txt} 有值才显示txt
${var:?msg} 空就报错

三、命令别名 & 历史命令(效率工具)

1. 命令别名 alias

设置别名
alias 别名 =' 原命令'
示例
alias rm='rm -i'
取消别名
unalias 别名
示例
unalias rm

2. 历史命令 history

history -c  清空当前会话历史命令
history -w  将历史命令保存至文件
快速调用历史指令
! 数字  执行对应序号的历史命令
! 关键词  执行最近匹配的历史命令
!!  重复执行上一条命令

四、通配符与特殊符号(命令行基础语法)

避坑提醒:不要使用特殊符号命名文件,容易导致命令执行异常。

1. 通配符(批量匹配文件)

  • *  匹配 0 个或多个任意字符
  • ?  匹配单个任意字符
  • [abc]  匹配括号内任意一个字符
  • [0-9]、[a-z]  分别匹配数字、小写字母
  • ^[abc]  反向匹配,匹配括号以外的字符

2. 常用特殊符号(“文件名”不要使用到这些字符)

# 注解符号:这个最常被使用在 script 当中,视为说明,在后的数据均不执行

\ 跳脱符号:将“特殊字符或万用字符”还原成一般字符
| 管线 (pipe):分隔两个管线命令的界定;
; 连续指令下达分隔符号:连续性命令的界定 (注意!与管线命令并不相同)
~ 使用者的主文件夹
$ 取用变量前置字符:亦即是变量之前需要加的变量取代值
& 工作控制 (job control):将指令变成背景下工作
! 逻辑运算意义上的“非” not 的意思!
/ 目录符号:路径分隔的符号
>, >> 数据流重导向:输出导向,分别是“取代”与“累加”
<, << 数据流重导向:输入导向
' ' 单引号,不具有变量置换的功能 ($ 变为纯文本)
" " 具有变量置换的功能! ($ 可保留相关功能)
` 两个“ ` ”中间为可以先执行的指令,亦可使用 $( )
( ) 在中间为子 shell 的起始与结束
{ } 在中间为命令区块的组合!

五、多命令执行判断符

  1. ;  依次执行所有命令,不判断执行结果
  2. &&  前一条命令执行成功,才执行后一条命令
  3. ||  前一条命令执行失败,才执行后一条命令
经典组合用法
命令 1 && 命令 2 || 命令 3
释义:命令 1 执行成功则运行命令 2,命令 1 执行失败则运行命令 3。

六、Bash 运行环境

1. 命令执行优先级(从高到低)

  • 通过绝对路径、相对路径执行命令
  • 命令别名
  • Bash 内置命令
  • 通过 $PATH 检索外部命令
查看命令完整检索顺序
type -a 指令名

2. 登录提示文件

/etc/issue  本地终端登录提示
/etc/远程登录提示
/etc/motd  系统全局公告

3. 环境配置文件

login shell(账号密码登录终端)

系统全局配置文件:/etc/profile
用户配置文件读取顺序
~/.bash_profile → ~/.bash_login → ~/.profile
重载配置,无需重启终端
source 配置文件

non-login shell(直接打开终端)

仅加载用户配置文件~/.bashrc

4. 终端快捷键与设置

查看终端所有按键定义stty -a
自定义删除按键stty erase ^h
高频终端快捷键
Ctrl+C  终止当前运行进程
Ctrl+D  结束输入、退出终端
Ctrl+S  暂停屏幕输出
Ctrl+Q  恢复屏幕输出
Ctrl+Z  暂停进程,转入后台运行
补充说明:Ctrl+C 彻底杀死进程,Ctrl+Z 仅暂停进程。

七、数据流重定向

Linux 包含三大标准数据流
标准输入 stdin  代号 0
标准输出 stdout  代号 1
标准错误 stderr  代号 2

1. 基础用法

>

功能:覆盖写入文件
>>
功能:追加内容到文件
2>
功能:单独重定向错误输出
/dev/null功能:黑洞设备,丢弃所有写入的数据

2. 进阶用法

2>&1
功能:将错误输出合并至标准输出,统一管理日志
<< EOF
功能:多行输入,脚本场景常用写法

3. 符号 - 特殊用途

在 tar、管道类命令中,- 可替代标准输入、标准输出,实现数据流传递。

八、管道命令 pipe

管道符 |作用:将前一条命令的输出内容,作为后一条命令的输入内容
注意:管道仅处理标准输出,会忽略错误输出。

配套常用命令

1. 内容截取

cut  拆分文本字段
grep  筛选包含关键字的行

2. 排序与统计

sort  对文本内容排序
uniq  去除连续重复行全局去重写法:sort 文件 | uniq
uniq -c  统计内容重复次数
wc -l  统计文本行数
wc -w  统计文本单词数
wc -m  统计文本字符数

3. 双向重定向

tee  内容同时输出到屏幕与文件
tee -a 文件  以追加模式写入文件

4. 字符转换

tr  字符替换、删除
示例:tr 'a-z' 'A-Z' 实现大小写转换
col -x  将 Tab 转换为空格
join  合并文件(使用前必须先排序)
paste  按行拼接文件内容
expand  将 Tab 转换为空格

5. 文件分割

split -b 大小 原文件 前缀  按照文件大小分割
split -l 行数 原文件 前缀  按照行数分割
文件还原写法cat 分割文件 * > 合并文件

6. 参数替换 xargs

作用:将管道输出内容转为命令参数,适配不支持管道的指令
实操案例
查找目录下所有日志文件,并移动到 /tmp 目录
find . -name "*.log" | xargs -I {} mv {} /tmp

九、全文总结

  1. 入门优先掌握:Tab 补全、历史命令、别名、基础快捷键,满足日常操作
  2. 核心重点:吃透变量规则、引号用法、变量处理语法,是脚本编写根基
  3. 语法规范:牢记通配符与特殊符号,规避文件命名踩坑问题
  4. 进阶能力:重定向、多命令符、管道,实现日志处理与批量运维(5)环境配置:区分两类 Shell 登录模式,优先修改用户配置,不改动系统文件
  5. 高阶工具:xargs、join、split,适配复杂批量处理场景

本文知识点精炼全面,建议收藏方便随时查阅。使用过程中有问题,欢迎在评论区留言交流。后续会持续更新 Linux 运维、Shell 脚本实战内容,记得关注!

最新文章

随机文章