前言
前面我们掌握了文件、权限、进程等独立命令,而 Shell 是 Linux 的命令解释器,也是连接用户与系统的桥梁。它不仅提供便捷操作快捷键、别名、历史命令,还支持特殊字符、变量、重定向、管道等高级用法,更是编写自动化脚本的基础。
本篇完整讲解 Shell 类型、实操快捷键、特殊符号、别名、历史命令、变量、输入输出重定向、管道及脚本基础参数,从日常提效操作到简单脚本语法全覆盖,帮你跳出 “单条命令执行” 的局限。
一、Shell 种类查看
Linux 系统支持多种 Shell 解释器,不同版本语法略有差异,日常默认使用 bash。查看系统内所有 Shell:
ls /bin/*sh
常见类型:bash、sh、csh、tcsh 等,Ubuntu、CentOS 主流默认使用 bash。
二、Shell 高频快捷键(日常必备,大幅提升效率)
终端操作熟记以下快捷键,告别重复敲命令、反复删字符:
Ctrl + c:终止当前正在运行的前台进程Ctrl + d:退出当前 Shell 终端,等价于执行exit命令Ctrl + l:清空当前屏幕,等价于clear命令Ctrl + z:将前台运行的进程暂停并挂起至后台Ctrl + u:删除光标左侧所有字符Ctrl + k:删除光标右侧所有字符Ctrl + s:暂停屏幕内容输出(终端卡住)Ctrl + q:解除暂停,恢复屏幕正常输出
三、Shell 特殊字符与通配符
Shell 内置大量特殊字符,用于注释、匹配、运算、命令嵌套、逻辑判断等,是进阶使用的核心。
1. 基础符号
#:注释符,#后面的内容不会被系统执行,多用于脚本、配置文件备注~:代表当前用户的家目录;:命令分隔符,一行内执行多条独立命令
2. 通配符(文件批量匹配)
*:匹配 0 个或多个 任意字符?:匹配 单个 任意字符[]/[-]/[!]:匹配括号内单个字符[0-9]:匹配任意数字[a-z]:匹配任意小写字母[!a]:匹配除字母 a 以外的任意单个字符
{,,,}:批量匹配大括号内的字符串,支持批量创建、操作文件
3. 算术运算
$[] 或 $(()):用于整数算术运算示例:
echo $[10+5]
echo $((20*3))
4. 逻辑判断符号
&&:逻辑与,左侧命令执行成功,才会执行右侧命令||:逻辑或,左侧命令执行失败,才会执行右侧命令
5. 命令替换
`(反引号)、$():将一个命令的执行结果,作为另一个命令的参数示例:
# 以当前日期为名创建文件
touch `date +%y%m%d`
ls -l $(date +%y%m%d)
6. 引号与转义符
\:转义符,屏蔽紧跟其后字符的特殊含义,使其作为普通字符使用''单引号:原样输出内容,屏蔽所有特殊字符功能""双引号:保留大部分字符原有含义,仅不屏蔽$、!、`等符号
四、命令别名 alias
别名可以用简短名称替代冗长的命令,简化日常操作。
- 查看当前系统所有已设置别名
alias
2.自定义别名:alias 别名='原命令'
alias ll='ls -l'
3.取消已定义的别名
unalias ll
补充规则:如果别名和系统原生命令重名,优先执行别名。
五、命令历史 history
Shell 会自动记录所有执行过的命令,借助历史功能可快速复用旧命令。
history:查看全部历史命令;history n:仅查看最后 n 条历史命令
history
history 10
!!:重复执行上一条命令!字符:重复执行最近一条以该字符开头的命令!编号:重复执行历史列表中对应编号的命令Ctrl + r:搜索历史命令,输入关键词快速匹配对应指令
历史命令文件规则
- Shell 启动时,自动从历史文件读取命令到内存列表;退出时,将内存中的命令写入文件保存。
- 环境变量
$HISTFILE指定历史命令文件路径,默认路径:~/.bash_history - 环境变量
$HISTSIZE限制可保存的命令条数,默认最多保存 1000 条。
历史命令文件读写
# 从指定文件读取命令到历史列表
history -r filename
# 将当前历史列表写入文件,不指定文件则默认使用 $HISTFILE
history -w filename
六、Bash 变量基础
变量是 Shell 脚本的核心,用于存储字符串、数字、路径等数据。
- 变量命名规则:由字母、数字、下划线组成,不能以数字开头
- 查看系统所有变量:
set或declare - 定义空变量:
name=或declare name - 变量赋值:
变量名=值(等号两侧不能加空格)
name="linux"
读取变量值:$变量名
echo $name
删除变量:unset 变量名
unset name
七、系统内置常用变量
系统预设了大量全局变量,存放路径、用户信息、进程 ID 等关键数据,日常高频使用:
HOME:当前用户的家目录PWD:当前所在工作目录OLDPWD:上一次所在的工作目录PS1:一级命令行提示符(终端最左侧的标识)PS2:二级命令行提示符(命令换行续行时的标识)PATH:最重要变量,命令搜索路径,系统根据该路径查找可执行文件$$:当前 Shell 进程的 PID(进程号)
查看变量值示例:
echo $HOME
echo $PATH
八、标准输入输出与重定向
每个进程默认绑定三类文件描述符,对应输入、输出、错误输出,重定向就是重新绑定数据流的目标位置。
- 文件描述符定义
- 标准输入 stdin:编号
0,默认来源为键盘 - 标准输出 stdout:编号
1,默认输出到屏幕 - 错误输出 stderr:编号
2,默认输出到屏幕
- 标准输入 stdin:编号
- 重定向作用:将原本输出到屏幕、从键盘读取的数据,改为读写文件。
1. 标准输入重定向 <(描述符 0)
把文件内容作为命令的输入数据。
# 从文件file中读取内容赋值给tmp
read tmp < file
echo $tmp
2. 标准输出重定向 > / >>(描述符 1,可省略 1)
>(覆盖输出):将命令执行结果写入文件,清空文件原有内容后写入>>(追加输出):将命令执行结果写入文件,在文件末尾追加,不覆盖原有内容
ls -l > file
ls -l >> file
3. 错误输出重定向 2> / 2>>(描述符 2,不可省略)
仅将命令执行的错误信息输出到文件,正常输出不受影响。常用场景:屏蔽错误信息(/dev/null 是空设备,相当于 “垃圾桶”)
# 错误信息覆盖写入文件
testcmd 2> file
# 错误信息直接丢弃
testcmd 2> /dev/null
4. 合并标准输出与错误输出
将正常输出、错误输出统一重定向到同一位置,四种常用写法:
# 写法1:>&
(ls; wrongcmd) >& file
# 写法2:&>(最简洁,推荐)
(ls; wrongcmd) &> file
# 写法3:标准输出定向到文件,错误输出跟随标准输出
(ls; wrongcmd) > file 2>&1
# 写法4:错误输出定向到文件,标准输出跟随错误输出
(ls; wrongcmd) 2> file 1>&2
九、管道符 |
管道作用:将前一个命令的执行结果,作为后一个命令的输入,实现命令组合、数据筛选。基础语法:命令1 | 命令2
示例:
# 列出目录内容并给所有行编号
ls -l | cat -n
# 筛选历史命令中包含find的记录
history | grep find
# 搭配find与xargs批量处理文件
find . -type f | xargs ls -l
十、脚本位置参数与返回值
多用于 Shell 脚本编写,获取脚本传入参数、判断命令执行结果。
- 位置参数
$0:代表当前脚本名称$1、$2...$n:脚本传入的第 1、2...n 个参数$*:获取脚本所有传入参数$#:统计脚本传入参数的总个数
- 命令返回值
$?:获取上一条命令的退出状态码,0代表执行成功,非 0 代表执行失败exit n:主动退出脚本 / 终端,并指定退出状态码n
示例:
# 查看上一条命令是否执行成功
ls
echo $?
十一、source 与 . 、export
1. source / .
二者功能完全一致,用法:source 文件名 或 . 文件名作用:在当前 Shell 环境中执行脚本文件,不会新建子 Shell,常用于加载配置文件。
2. export
作用:将普通变量升级为环境变量,让当前 Shell 的所有子进程、子 Shell 都可以读取该变量。
# 定义变量并导出为环境变量
name="test"
export name
本篇小结
- Shell 是命令解释器,
ls /bin/*sh可查看系统支持的 Shell 类型,默认使用 bash。 - 熟记终端快捷键、通配符、引号、逻辑符等特殊字符,是高效使用 Shell 的基础。
alias简化命令、history复用历史指令,都是日常提效必备功能。- 变量分为自定义变量和系统内置变量,
PATH是核心搜索路径变量。 - 重定向分为输入、输出、错误输出,
&>可合并两类输出,常配合/dev/null屏蔽日志。 - 管道
|实现命令串联,位置参数、export、source是编写 Shell 脚本的基础。
下期预告
下一篇我们学习 grep/sed/awk 文本处理三剑客,学会筛选、编辑、格式化文本与日志,搞定日常日志分析、文本批量处理场景。

1702

被折叠的 条评论
为什么被折叠?



