当前位置:首页>Linux>Shell 基础全攻略:从变量到管道,Linux 命令行的灵魂一次讲透

Shell 基础全攻略:从变量到管道,Linux 命令行的灵魂一次讲透

  • 2026-10-11 06:00:00
Shell 基础全攻略:从变量到管道,Linux 命令行的灵魂一次讲透

一、 Shell 变量

定义变量:name=string,等号两边不能有空格。

引用变量:在变量名前加 $,如 $name。

引号区别:"" 内允许变量替换,'' 内完全原样输出。

# 引号区别演示

$ echo who are you

who are you

$ echo Je t'aime

# 报错:单引号不匹配,shell 认为命令未结束

$ echo "Je t'aime"

Je t'aime

局部变量 vs 全局变量

局部变量:仅在当前 shell 有效,子 shell 无法访问。

全局变量:使用 export 将其提升为全局变量,子 shell 也能访问。

# export 演示

$ var1=Linux

$ var2=unix

$ export var2

$ bash

$ echo $var1

# 空:var1未export,子shell中无值

$ echo $var2

unix

环境变量:使用 set 命令查看所有环境变量(如 PATH、HOME、SHELL)。修改 PATH 时注意拼接:PATH=/tmp:$PATH。

工作环境配置文件:

系统级:/etc/profile(登录时加载)

用户级:$HOME/.bash_profile(登录) | $HOME/.bashrc(非登录)

二、 命令执行逻辑:;、&&、||

cmd1 ; cmd2 不论 cmd1 成功与否,cmd2 都会执行(常用于 sync;sync;shutdown)

cmd1 && cmd2 cmd1 成功($?=0)才执行 cmd2

cmd1 || cmd2 cmd1 失败($?≠0)才执行 cmd2

经典用法:不管目录存在与否,都要创建文件:

ls /tmp/abc || mkdir /tmp/abc && touch /tmp/abc/hehe

解释:不存在就创建目录,然后创建文件。存在则跳过mkdir,直接touch。

条件判断输出:

ls /tmp/bobbying && echo "exist" || echo "not exist"

文件存在打印 exist,不存在打印 not exist。

三、 grep 高级用法

常用选项速查:

-n 显示行号   -i 忽略大小写   -v 反向选择-A n 显示匹配行后面 n 行   -B n 显示匹配行前面 n 行--color=auto 高亮匹配内容

# 基础搜索

$ dmesg | grep 'IPv6'

# 从内核日志中过滤包含 IPv6 的行

# 带颜色 + 行号 + 上下文

$ dmesg | grep -n -A1 -B1 --color=auto 'IPv6'

# 高亮关键字,显示前后各 1 行,带行号

# 忽略大小写

$ grep -in 'the' /root/sample.txt

# -i 让 the/The/THE 全部匹配,-n 显示行号

四、 基础正则表达式

[] 字符集 匹配括号中任意一个字符

t[ae]st → 匹配 tast 或 test[^g]oo → oo 前面不能是 g[a-z] → 任意小写字母   [0-9] → 任意数字

^ 行首 / $ 行尾

^the → 以 the 开头的行\.$ → 以点号结尾的行(注意 . 要用 \ 转义)^$ → 匹配空白行

. 任意字符 / * 重复

g..d → g 开头 d 结尾,中间任意 2 个字符ooo* → 至少 2 个 o(oo、ooo…)g.*g → 以 g 开头且以 g 结尾,中间任意内容[0-9][0-9]* → 匹配任意数字

{} 限定范围(注意:{ } 在 shell 中需要转义!)

o\{2\} → 恰好 2 个 ogo\{2,5\}g → g + 2~5 个 o + ggo\{2,\}g → g + 至少 2 个 o + g

正则表达式特殊字符速查表

字符
含义
示例
^word
匹配行首为 word
grep '^the'
word$
匹配行尾为 word
grep '\.$'
.
任意一个字符
grep 'g..d'
*
重复前一个字符 0~∞ 次
grep 'ooo*'
[list]
字符集,匹配任一字符
grep '[aeiou]'
[n1-n2]
范围字符集
grep '[a-z0-9]'
[^list]
反向选择
grep '[^0-9]'
\{n,m\}
重复前字符 n~m 次
grep 'o\{2,5\}'

五、 重定向

重定向符
说明
>
标准输出重定向(覆盖)
>>
标准输出重定向(追加)
<
输入重定向(不常用)
2>
错误输出重定向(覆盖)
2>>
错误输出重定向(追加)
&>
标准输出 + 错误输出同时重定向
/dev/null
"黑洞"设备,数据写入即丢弃

# 重定向示例

$ ls -l /tmp > dir

# 将 /tmp 目录列表写入 dir 文件(覆盖)

$ ls -l /etc >> dir

# 将 /etc 目录列表追加到 dir 文件末尾

$ myprogram 2>err_file

# 仅将错误信息保存到 err_file

$ myprogram &>output_file

# 标准输出和错误信息都保存到 output_file

$ grep IPv6 /etc/* 2>/dev/null

# 丢弃所有错误信息,"眼不见为净"

防止误覆盖:set -o noclobber 开启后,重定向不会覆盖已存在的文件。

六、 管道命令

管道符 | 将前一条命令的标准输出作为后一条命令的标准输入。

格式:命令1 | 命令2 | ... | 命令n 从左到右顺序执行,单向流动。

# 管道常用组合

$ ls -Rl /etc | more

# 分屏显示目录列表

$ cat /etc/passwd | wc

# 统计文件行数、字数、字符数

$ cat /etc/passwd | grep yangyun

# 查找是否存在 yangyun 用户

$ rpm -qa | grep ssh

# 查看是否安装了 ssh 软件包

$ tail -15 /etc/passwd | head -3

# 显示倒数15行中的前3行

理解管道本质:管道将多个独立的进程串联成一条流水线。每一条命令作为一个单独进程运行,前一个进程的输出直接流向下一进程的输入,无需中间文件,效率极高。

总结 命令速查表

分类
命令 / 写法
作用
变量
name=string ; export name
定义变量 / 提升为全局变量
环境
set ; set | grep PATH=
查看所有环境变量 / 过滤PATH
串联
cmd1 && cmd2 ; cmd1 || cmd2
成功才执行 / 失败才执行
搜索
grep -n -A1 -B1 --color=auto str
带行号+上下文+高亮的搜索
正则
grep '^[a-z].*[0-9]$'
小写字母开头+数字结尾的行
重定向
cmd > file 2>&1
标准输出+错误都写入文件
管道
命令1 | 命令2 | 命令3
多个进程串联,单向流水线

你还想了解 Shell 的哪些内容?

条件判断、循环语句、函数……留言告诉我,下篇安排上!

- END -

🌿 七七不吃糖

最新文章

随机文章