news 2026/4/17 16:39:41

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/17 12:15:16

【保姆级教程】GPT-5.2极速接入指南:3步上手专家级多模态AI能力

一、3步极速接入GPT-5.2&#xff0c;零门槛上手专家级AI OpenAI最新发布的GPT-5.2模型&#xff0c;凭借在专业知识工作、多模态处理、代码开发等领域的突破性表现&#xff0c;成为当前最受开发者青睐的AI模型之一。本文将提供GPT-5.2模型的完整接入流程&#xff0c;包含API Key…

作者头像 李华
网站建设 2026/4/18 9:33:58

如何零门槛上手GPT-5.2?3步保姆级接入教程,解锁专家级多模态能力

一、3步极速接入GPT-5.2&#xff0c;零门槛上手专家级AI OpenAI最新发布的GPT-5.2模型&#xff0c;凭借在专业知识工作、多模态处理、代码开发等领域的突破性表现&#xff0c;成为当前最受开发者青睐的AI模型之一。本文将提供GPT-5.2模型的完整接入流程&#xff0c;包含API Key…

作者头像 李华
网站建设 2026/4/18 9:33:58

2025年国内精细化、可交互、轻量级的泛监测体系产品推荐

一、概要&#xff08;提示&#xff1a;本节从宏观视角概括行业趋势&#xff0c;为后续的评估框架与厂商推荐奠定基础。&#xff09;2025年国内数据安全平台正从“堆叠式安全工具”向“精细化、可交互、轻量级的泛监测体系”转型。随着《数据安全法》《个人信息保护法》及《网络…

作者头像 李华
网站建设 2026/4/17 22:26:43

QMC5883P传感器在ArduPilot飞控系统中的完整集成指南

你是否曾经在构建无人机项目时&#xff0c;面对QMC5883P传感器的连接问题感到困惑&#xff1f;作为广泛应用于消费级无人机和机器人系统的三轴磁阻传感器&#xff0c;QMC5883P以其出色的性价比和性能表现赢得了众多开发者的青睐。然而&#xff0c;在ArduPilot这一成熟的飞控生态…

作者头像 李华
网站建设 2026/4/17 20:56:27

【centos】安装python3.12

一行命令安装 wget https://mirrors.tuna.tsinghua.edu.cn/python/3.12.7/Python-3.12.7.tgz;tar -xf Python-3.12.7.tgz;cd Python-3.12.7;mkdir -p /usr/local/python3.12;./configure --enable-optimizations --prefix/usr/local/python3.12;make -j $(nproc);sudo make alt…

作者头像 李华
网站建设 2026/4/17 18:07:25

IndexTTS2语音合成终极指南:从入门到精通的完整教程

IndexTTS2语音合成终极指南&#xff1a;从入门到精通的完整教程 【免费下载链接】index-tts An Industrial-Level Controllable and Efficient Zero-Shot Text-To-Speech System 项目地址: https://gitcode.com/gh_mirrors/in/index-tts 你是否曾经在制作视频配音时&…

作者头像 李华