news 2026/6/10 10:33:56

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/6/10 19:26:49

HeidiSQL 终极使用指南:快速掌握免费数据库管理工具

HeidiSQL 终极使用指南&#xff1a;快速掌握免费数据库管理工具 【免费下载链接】HeidiSQL HeidiSQL: 是一个免费且强大的 SQL 编辑器和数据库管理工具&#xff0c;支持 MySQL、PostgreSQL、SQLite 等多种数据库。适合数据库管理员和开发者使用 HeidiSQL 管理数据库和查询数据。…

作者头像 李华
网站建设 2026/6/9 20:23:37

智能象棋AI如何提升你的棋艺水平:7天实战进阶指南

智能象棋AI如何提升你的棋艺水平&#xff1a;7天实战进阶指南 【免费下载链接】Chinese-Chess 利用神经网络算法和遗传算法作为AI的中国象棋程序 项目地址: https://gitcode.com/gh_mirrors/ch/Chinese-Chess 想要在象棋对弈中获得突破性进步吗&#xff1f;这款基于神经…

作者头像 李华
网站建设 2026/6/10 19:30:26

仿写KaTrain围棋AI训练平台文章的Prompt

仿写KaTrain围棋AI训练平台文章的Prompt 【免费下载链接】katrain Improve your Baduk skills by training with KataGo! 项目地址: https://gitcode.com/gh_mirrors/ka/katrain 请基于KaTrain围棋AI训练平台项目&#xff0c;创作一篇全新的技术指南文章。要求如下&…

作者头像 李华
网站建设 2026/6/10 17:24:12

个人号开发微信机器人API

个人号开发微信机器人API 在微信深度渗透私域运营与客户服务的背景下&#xff0c;开发个人微信机器人需解决“如何与微信交互”“如何调用聊天接口”“如何稳定获取微信数据”等核心问题。用户常见的技术方案包括微信Web接口、Xposed/PC Hook、模拟机技术及iPad扫码协议&#…

作者头像 李华
网站建设 2026/6/10 3:46:52

亚马逊广告深度运营:跨越认知盲区,解锁高转化操作心法

在亚马逊的运营宇宙中&#xff0c;广告系统如同一台精密的引擎&#xff0c;驱动着流量的流转与销量的增长&#xff0c;然而&#xff0c;面对复杂的广告类型、繁多的数据指标以及差异化的产品逻辑&#xff0c;许多卖家的广告策略往往陷入误区&#xff1a;要么盲目烧钱追逐曝光&a…

作者头像 李华
网站建设 2026/6/10 17:18:32

RFC 2326 - 实时流协议 (RTSP) 标准文档完整中文文档

前言 本文档是 RFC 2326 - Real Time Streaming Protocol (RTSP) 的完整的标准文档中文翻译&#xff0c;专业术语尽量保持了与英文原意一致&#xff0c;示例代码和语法部分保持原样&#xff0c;格式和结构完全遵循原RFC文档&#xff0c;已更新到最新的RFC规范引用。 注意&…

作者头像 李华