news 2026/4/23 13:54:39

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/4/18 11:25:56

EmotiVoice助力无障碍阅读:为视障用户定制专属声音

EmotiVoice助力无障碍阅读&#xff1a;为视障用户定制专属声音 在数字信息爆炸的时代&#xff0c;我们每天通过屏幕获取新闻、阅读小说、浏览社交媒体。但对于全球超过3亿的视障人士而言&#xff0c;这些看似平常的行为却充满障碍。尽管屏幕阅读器早已存在&#xff0c;但冰冷、…

作者头像 李华
网站建设 2026/4/20 8:33:01

高效记忆:告别无效学习

您是否经常看到孩子熬夜背单词、记公式&#xff0c;第二天却忘得一干二净&#xff1f;明明花了大量时间在学习上&#xff0c;效果却总是不尽如人意。其实&#xff0c;这并非孩子不够努力&#xff0c;而是记忆方法出了问题。科学研究表明&#xff0c;人的大脑在不同状态下吸收信…

作者头像 李华
网站建设 2026/4/19 11:00:17

猫狗识别数据集:34,441张高质量标注图像,深度学习二分类任务训练数据集,计算机视觉算法研发,CNN模型训练,图像识别分类,机器学习实践项目完整数据资.md

引言与背景 在计算机视觉和深度学习领域&#xff0c;图像分类任务一直是最基础也是最重要的研究方向之一。随着卷积神经网络&#xff08;CNN&#xff09;技术的快速发展&#xff0c;以及迁移学习、数据增强等方法的广泛应用&#xff0c;图像分类模型的性能不断提升。然而&#…

作者头像 李华
网站建设 2026/4/16 17:57:46

14、嵌入式开发中的远程连接、调试与多线程编程

嵌入式开发中的远程连接、调试与多线程编程 1. 远程连接设置 在进行远程开发时,首先要建立与远程机器的连接。以下是具体步骤: 1. 可以将连接名称修改为你想要的,例如“BeagleBone”,描述也可以随意设置。 2. 点击“Next”,显示远程机器上可用的文件服务,此处无需更改…

作者头像 李华
网站建设 2026/4/23 13:31:49

19、深入探究 Linux 内核的配置与构建

深入探究 Linux 内核的配置与构建 1. 内核 Makefile 配置 在 kernel/kernel 目录下存在一个标准的 Makefile 文件,其中包含大量的 make 目标。默认情况下,内核会基于运行 Makefile 的架构进行构建,大多数情况是 x86 架构的某种变体。但我们要为 ARM 目标板进行交叉编译。…

作者头像 李华