【Shell 知识速查表】

Shell 知识速查表

    • 一、符号与括号
    • 二、重定向操作符
    • 三、特殊变量速查
    • [四、变量展开(Parameter Expansion)](#四、变量展开(Parameter Expansion))
    • [五、sed / grep 正则表达式元字符](#五、sed / grep 正则表达式元字符)
    • [六、POSIX 字符组](#六、POSIX 字符组)
    • [七、输出命令:echo 与 printf](#七、输出命令:echo 与 printf)
      • [echo 常用](#echo 常用)
      • [printf 常用](#printf 常用)

一、符号与括号

符号 名称 / 说明 示例
() 进程列表,生成子 Shell 执行命令 (pwd ; (echo $BASH_SUBSHELL))
$() 命令替换,将命令输出赋给变量 var01=$(date "+%F %T.%3N")
{} 命令分组,coproc、函数定义用到 { ls; sleep 10; }
(()) 整数算术表达式,支持算术和逻辑 if (( a < b && b < 30 )); ...
$(( )) 整数算术并返回结果 var02=$(( -7 / 2 ))
[] 旧式 test 条件判断 [ $value1 -gt 5 ][ -n var03 ][ -f $file_name ]
[[]] Bash 增强条件判断,支持模式匹配和正则 [[ $file == *.txt ]][[ ! $username =~ ^[a-zA-Z0-9]+$ ]][[ -f $file ]]
$[] ⚠️ 旧式整数运算,已过时(deprecated) ,建议统一用 $(( )) var04=$(( var0 + 1 ))

一句话记忆 :数字用 (( )),字符串用 [[]],兼容老脚本才用 []


二、重定向操作符

符号 名称 作用
> 覆盖重定向 将 stdout 写入文件,覆盖原有内容
>> 追加重定向 将 stdout 追加到文件末尾
< 输入重定向 将文件内容作为命令的 stdin
<< Here-Document 多行文本作为 stdin(sh/bash 通用)
<<< Here-String 单行字符串作为 stdin(Bash 独有)

常用重定向写法

写法 说明
cmd > file stdout 写入 file,stderr 输出到屏幕
cmd 2> file stderr 写入 file,stdout 输出到屏幕
cmd > file 2>&1 stdout + stderr 都写入 file(通用写法)
cmd &> file stdout + stderr 都写入 file(Bash 简写)
cmd 2>&1 > file ❌ 顺序错误,stderr 仍输出到屏幕
cmd >&1 输出送到标准输出 fd1
cmd < file file 作为命令输入(fd0)

三、特殊变量速查

变量 说明
$0 脚本名称;若 source 加载,则为当前 Shell 名称
$1 ... $9 第 1 到第 9 个位置参数
${10} ${11} 第 10 个及以上位置参数,必须加大括号
$# 位置参数总个数(不含 $0
$* 所有参数合并为一个字符串(受 IFS 影响)
$@ 所有参数保持独立(推荐用于循环遍历)
$- 当前 Shell 的选项标志(如 hBxuhimBHs
$? 上一条命令的退出状态码(0 成功,非 0 失败)
$$ 当前 Shell 的 PID,常用于临时文件(如 tmp.$$
$! 最后一个后台进程的 PID(配合 & 使用)
$_ 上一条命令的最后一个参数

四、变量展开(Parameter Expansion)

写法 作用 是否修改变量
${var:-default} 变量为空/未定义 → 返回 default;否则返回变量本身 ❌ 不修改
${var:=default} 变量为空/未定义 → 赋值为 default 并返回 ✅ 会修改
${var:+alt} 变量非空 → 返回 alt;为空 → 返回空 ❌ 不修改
${var:?error_msg} 变量为空/未定义 → 打印错误并退出脚本 ❌ 不修改

五、sed / grep 正则表达式元字符

元字符 含义 示例
. 匹配任意单个字符(除换行符) a.cabca1ca c
* 匹配前一个字符 0 次或多次 ab*cacabcabbc
^ 匹配行首 ^root → 以 root 开头的行
$ 匹配行尾 bash$ → 以 bash 结尾的行
[] 匹配方括号中任意一个字符 [0-9] → 包含数字的行
[^] 匹配不在方括号中的字符(取反) [^0-9] → 匹配包含非数字字符的行(即不全是数字的行)
\ 转义特殊字符 \$5 → 匹配 $5
\? 匹配前一个字符 0 次或 1 次 colou\?rcolorcolour
\+ 匹配前一个字符 1 次或多次 [0-9]\+ → 匹配数字串
\{} 匹配前一个字符指定次数 a\{2,4\}aaaaaaaaa
` ` 或(匹配多个模式之一)
\(\) 分组 `(error

六、POSIX 字符组

POSIX 字符组 含义 等价 ASCII
[[:alnum:]] 字母 + 数字 [a-zA-Z0-9]
[[:alpha:]] 大小写字母 [a-zA-Z]
[[:digit:]] 数字 0--9 [0-9]
[[:lower:]] 小写字母 [a-z]
[[:upper:]] 大写字母 [A-Z]
[[:blank:]] 空格、制表符(不含换行) [ \t]
[[:space:]] 所有空白字符:空格、tab、换行、回车、垂直制表、换页 [ \t\n\r\v\f]
[[:punct:]] 标点符号 `!"#$%&'()*+,-./:;<=>?@\[\]^_{}|``
[[:graph:]] 可见图形字符(不含空格) alnum + punct
[[:print:]] 可打印字符(含空格) graph + 空格
[[:cntrl:]] 控制字符(不可打印) ASCII 0--31、127 DEL
[[:xdigit:]] 十六进制字符 [0-9a-fA-F]

七、输出命令:echo 与 printf

echo 常用

用法 说明
echo "Hello World" 基本输出
echo 'Hello $USER' 单引号不展开变量
echo "Hello $name" 双引号展开变量
echo -e "Line1\nLine2" 启用转义字符(换行)
echo -n "No newline" 不换行输出

printf 常用

示例 说明
printf "%s\n" "Hello" 输出字符串并换行
printf "%d\n" 42 输出整数
printf "%.2f\n" 3.1415 输出浮点数,保留 2 位小数
printf "%-10s" "text" 左对齐,宽度 10
printf "%10s" "text" 右对齐,宽度 10
printf "%05d" 7 输出 00007(补零)
printf "%-15s %5d\n" "Name" 123 表格对齐
相关推荐
风哥2号1 小时前
数据库教程FGMT04‑生产环境Linux+Oracle19c RAC集群安装配置与项目实战
linux·数据库
qetfw1 小时前
Debian Postfix + Dovecot 基础配置:DNS、Maildir、IMAP 与邮件队列验证
linux·服务器·网络·debian
吴声子夜歌1 小时前
Shell脚本——数组
linux·运维·shell
whysoft2 小时前
创意新用法-把老磁带转录成mp3-第2部分
linux·计算机外设
道尔柯南2 小时前
【Linux】进程信号----1
linux·运维·服务器
新时代牛马2 小时前
嵌入式设备驱动开发完整篇:从platform/字符设备到probe、DT 与排障
linux
Mortalbreeze2 小时前
深入理解 Linux IO 模型(四):多路复用 —— epoll
linux·运维·服务器·网络·tcp/ip
CedarQR2 小时前
LubanCat-2 (RK3568) Debian 下让 H3C Magic USB 无线网卡(AIC8800)联网全记录
linux·网络·单片机·嵌入式硬件·debian·3568·h3c
卷土重去4 小时前
第 6 章 Linux 实操篇-Vi 和 Vim 编辑器
linux·编辑器·vim