news 2026/2/12 8:34:13

shell命令复习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
shell命令复习

一、Shell 与基础概念

1. Shell 的作用

  • Shell 是命令解释器

  • 功能:

    • 接收用户输入的命令
    • 解析命令
    • 调用内核执行程序
  • 支持:

    • 变量
    • 管道
    • 重定向
    • 条件执行

二、Shell 变量

1. 变量的定义

name=string
  • 等号两边不能有空格

  • 变量名规则:

    • 字母或下划线开头
    • 由字母、数字、下划线组成

2. 变量的引用

echo$name
  • $name→ 变量替换

  • 引号规则:

    • 双引号" ":允许变量替换
    • 单引号' ':不允许变量替换

3. 变量的作用域

  • 局部变量

    • 只在当前 shell 有效
  • 全局变量

    • 当前 shell + 子 shell
    • 使用export导出
exportvar

三、环境变量

1. 什么是环境变量

  • 由 shell 预定义并赋值

  • 决定系统行为,如:

    • PATH
    • HOME
    • SHELL
  • 全部是全局变量

2. 查看与设置

set# 查看所有环境变量echo$PATH# 引用环境变量

3. 修改 PATH

PATH=/tmp:$PATH

4. 环境配置文件

  • 系统级

    • /etc/profile
  • 用户级

    • 登录 shell:~/.bash_profile
    • 非登录 shell:~/.bashrc

四、命令执行逻辑控制

1. 分号;

  • 顺序执行
  • 不判断前一条命令是否成功
cmd1;cmd2

2. 命令返回值$?

  • 0→ 成功
  • 非 0→ 失败

3. 与、或逻辑

符号含义
&&前成功,才执行后
``前失败,才执行后
常见组合(非常重要)
lsdir||mkdirdir&&touchdir/file

👉 实现:

  • 目录不存在 → 创建目录 → 创建文件
  • 目录存在 → 直接创建文件

五、grep 高级用法

1. 基本格式

grep[选项]'模式'文件

2. 常用选项

选项作用
-n显示行号
-i忽略大小写
-v反向匹配
-A n显示后 n 行
-B n显示前 n 行
--color=auto关键字高亮

3. 管道配合 grep

dmesg|grepIPv6

六、基础正则表达式(重点 + 考点)

1. 字符匹配

符号含义
.任意一个字符
*前一个字符重复 0~∞ 次

2. 字符集合

[abc]# a 或 b 或 c[a-z]# 小写字母[^a-z]# 非小写字母

3. 行首 / 行尾

符号含义
^行首
$行尾
^$空行

4. 重复次数限定

o\{2\}# 正好 2 个 oo\{2,5\}# 2~5 个 oo\{2,\}# 至少 2 个 o

5. 常见实用模式

需求正则
包含数字[0-9]
任意数字串[0-9][0-9]*
g 开头 g 结尾g.*g

七、重定向(I/O)

1. 三种重定向

类型描述
输入<
输出>
追加>>
错误2>
全部&>

2. 常见用法

ls>filels2>err cmd&>all.log

3./dev/null

  • 空设备(黑洞)
  • 丢弃不需要的输出
grepIPv6 /etc/*2>/dev/null

八、管道|

1. 管道的本质

  • 前一个命令的输出 → 后一个命令的输入
  • 每个命令是独立进程
  • 单向、从左到右

2. 常见组合

catfile|grepkeywordls/etc|moretail-15file|head-3rpm-qa|grepssh

九、整体逻辑框架(建议记住)

Shell ├── 变量 │ ├── 普通变量 │ ├── 作用域 │ └── 环境变量 ├── 命令控制 │ ├── ; │ ├── && │ └── || ├── 文本处理 │ ├── grep │ └── 正则表达式 ├── I/O 控制 │ ├── 重定向 │ └── 管道


案例:批量统计当前目录下每个.txt文件的行数

场景说明

你有很多.txt文件,想快速知道每个文件有多少行,并按行数从小到大排序。


命令

wc-l *.txt|sort-n

命令拆解说明

  • wc -l
    👉 统计行数(word count 的 line 模式)

  • *.txt
    👉 匹配当前目录下所有.txt文件

  • |(管道)
    👉 把前一个命令的输出,传给下一个命令作为输入

  • sort -n
    👉 按数字大小排序(而不是按字符串)


示例输出

12 a.txt 58 b.txt 134 c.txt

表示:

  • a.txt有 12 行
  • b.txt有 58 行
  • c.txt有 134 行

进阶一点(只看前 3 个最小的)

wc-l *.txt|sort-n|head-3


1️⃣ 查找包含关键词的文件内容(日志常用)

grep"error"*.log

👉 在当前目录所有.log文件中查找包含error的行

常用变体:

grep-i"error"*.log# 忽略大小写grep-n"error"*.log# 显示行号

2️⃣ 统计某个目录下文件数量

ls|wc-l

👉 统计当前目录文件数(不含隐藏文件)

包含隐藏文件:

ls-a|wc-l

3️⃣ 批量重命名文件(很常用)

.txt改成.md

forfin*.txt;domv"$f""${f%.txt}.md"done

👉${f%.txt}是 Shell 的字符串截取


4️⃣ 查看占用磁盘空间最大的文件/目录

du-sh *|sort-h|tail-5

👉 找出当前目录下最大的 5 个文件/目录


5️⃣ 统计某个文件中每个单词出现的次数

catfile.txt|tr' ''\n'|sort|uniq-c|sort-nr

👉 常用于文本分析、面试题


6️⃣ 判断文件是否存在(脚本必备)

if[-f"test.txt"];thenecho"文件存在"elseecho"文件不存在"fi

7️⃣ 一行 Shell:找出 CPU 占用最高的进程

psaux|sort-nrk3|head-5

👉 第 3 列是 CPU 使用率


8️⃣ 定时执行命令(crontab 示例)

每 5 分钟执行一次脚本:

*/5 * * * * /path/to/script.sh

9️⃣ 一行脚本:批量杀死包含关键词的进程(慎用⚠️)

psaux|grepjava|grep-vgrep|awk'{print$2}'|xargskill-9

🔟 一个完整小脚本示例

#!/bin/bashforfin*.log;doecho"$f行数:$(wc-l<"$f")"done

运行前记得:

chmod+x count.sh ./count.sh


1️⃣ 判断参数并打印(入门必会)

print.sh

#!/bin/bashif[$#-eq0];thenecho"用法:$0参数"exit1fiecho"你输入的参数是:$1"

运行:

./print.sh hello

2️⃣ 批量备份文件(实战常用)

backup.sh

#!/bin/bashSRC_DIR=/data/logsBACKUP_DIR=/data/backupDATE=$(date+%Y%m%d)mkdir-p"$BACKUP_DIR"tar-czf"$BACKUP_DIR/logs_$DATE.tar.gz""$SRC_DIR"echo"备份完成: logs_$DATE.tar.gz"

3️⃣ 循环读取文件内容(处理配置/名单)

readfile.sh

#!/bin/bashwhilereadline;doecho"读取到:$line"done<users.txt

4️⃣ 统计目录下文件类型数量

count_file_type.sh

#!/bin/bashtxt=0log=0forfin*;docase"$f"in*.txt)((txt++));;*.log)((log++));;esacdoneecho"txt 文件:$txt"echo"log 文件:$log"

5️⃣ 检测服务是否运行(运维高频)

check_service.sh

#!/bin/bashSERVICE=nginxifpgrep"$SERVICE">/dev/null;thenecho"$SERVICE正在运行"elseecho"$SERVICE未运行"fi

6️⃣ 自动清理 7 天前的日志

clean_log.sh

#!/bin/bashLOG_DIR=/var/log/myappfind"$LOG_DIR"-type f -mtime +7 -name"*.log"-execrm-f{}\;echo"7 天前日志已清理"

7️⃣ 简单菜单脚本(交互式)

menu.sh

#!/bin/bashecho"1) 查看磁盘"echo"2) 查看内存"echo"3) 退出"read-p"请选择: "choicecase$choicein1)df-h;;2)free-h;;3)exit;;*)echo"无效选择";;esac

8️⃣ Shell 脚本模板(推荐收藏)

#!/bin/bashset-e# 变量定义# 函数定义# 主逻辑

💡 常见执行问题

chmod+x xxx.sh# 没权限bashxxx.sh# 直接用 bash 运行

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/9 7:52:37

如何快速解密Pyarmor加密脚本的完整指南

如何快速解密Pyarmor加密脚本的完整指南 【免费下载链接】Pyarmor-Static-Unpack-1shot ✅ No need to run ✅ Pyarmor 8.0 - latest 9.1.1 ✅ Universal ✅ Statically convert obfuscated scripts to disassembly and (experimentally) source code. 项目地址: https://git…

作者头像 李华
网站建设 2026/2/11 3:03:13

14、探索Kubernetes:Hue平台扩展与存储管理

探索Kubernetes:Hue平台扩展与存储管理 1. 利用Kubernetes扩展Hue平台 Hue平台借助Kubernetes可实现多方面的扩展,以服务更多市场和社区。以下是几个不同场景下的应用: - 企业级应用 :企业因安全合规或性能问题,无法将系统部署在云端,Hue企业版需支持本地集群或裸机…

作者头像 李华
网站建设 2026/2/12 4:52:44

16、网络编程基础与实践:从套接字到嵌入式Web服务器

网络编程基础与实践:从套接字到嵌入式Web服务器 1. 网络套接字基础 网络套接字(Network Sockets)是一种服务标识符,由“点分十进制”的互联网地址(如192.168.1.11)和协议端口号组成。客户端使用这个名称来访问服务。 服务器端的工作流程如下: 1. 使用 listen() 服…

作者头像 李华
网站建设 2026/2/6 14:59:54

RFC 3550 - RTP:实时应用的传输协议 标准文档完整中文文档

前言 本文档是 RFC 3550 - RTP: A Transport Protocol for Real-Time Applications完整标准文档的中文翻译。技术术语保持与IETF官方翻译一致&#xff0c;代码示例和语法保持原样&#xff0c;包含所有关键技术和实现细节&#xff0c;格式和结构遵循原RFC文档 注意&#xff1a…

作者头像 李华
网站建设 2026/2/9 1:09:35

24、Git 版本控制与 Linux 实时性优化

Git 版本控制与 Linux 实时性优化 1. Git 版本控制操作 1.1 文件修改与提交 在进行文件修改和提交时,可按以下步骤操作: 1. 对一个或多个文件进行更改。只需双击工作目录下的文件条目,即可在编辑器中打开它们。 2. 右键单击已更改的条目,将其添加到暂存区。 3. 右键单…

作者头像 李华