【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 的选项标志(如 hB、xu、himBHs)
$? 上一条命令的退出状态码(0 成功,非 0 失败)
$$ 当前 Shell 的 PID,常用于临时文件(如 tmp.$$)
$! 最后一个后台进程的 PID(配合 & 使用)
$_ 上一条命令的最后一个参数

四、变量展开(Parameter Expansion)

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

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

元字符 含义 示例
. 匹配任意单个字符(除换行符) a.c → abc、a1c、a c
* 匹配前一个字符 0 次或多次 ab*c → ac、abc、abbc
^ 匹配行首 ^root → 以 root 开头的行
$ 匹配行尾 bash$ → 以 bash 结尾的行
[] 匹配方括号中任意一个字符 [0-9] → 包含数字的行
[^] 匹配不在方括号中的字符(取反) [^0-9] → 匹配包含非数字字符的行(即不全是数字的行)
\ 转义特殊字符 \$5 → 匹配 $5
\? 匹配前一个字符 0 次或 1 次 colou\?r → color 或 colour
\+ 匹配前一个字符 1 次或多次 [0-9]\+ → 匹配数字串
\{} 匹配前一个字符指定次数 a\{2,4\} → aa、aaa、aaaa
` ` 或(匹配多个模式之一)
\(\) 分组 `(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 表格对齐
相关推荐
夜听莺儿鸣5 小时前
502-003_Linux 中断与异常(一):从Linux角度理解中断与异常
linux·中断与异常·linux中断
杨云龙UP6 小时前
TDengine 3.4.2.8 Community 三节点三副本生产集群部署实战(DNode/MNode/taosAdapter/Explorer)
大数据·linux·运维·数据库·tdengine·时序库
向成科技7 小时前
XC3576H工控主板|深度适配Ubuntu 26.04 LTS,释放边缘AI与工业开发新潜能
linux·人工智能·ubuntu·机器人·硬件·主板·边缘ai
Fcy6487 小时前
Linux下 进程间关系与守护进程
linux·运维·服务器·守护进程
码农小韩8 小时前
Linux驱动理论(二)——Linux字符设备驱动
linux·嵌入式软件开发·linux操作系统·linux应用开发·linux驱动理论
well06128 小时前
Linux粘滞位与Makefile机制深度解析
linux·运维·服务器
再写一行代码就下班8 小时前
linux sh脚本在windows修改导致无法使用解决方式
java·linux·centos
额额额对了8 小时前
SPI通信
linux·c语言·汇编·单片机·嵌入式硬件·arm
子木HAPPY阳VIP9 小时前
Ubuntu 关闭防火墙操作步骤
linux·运维·ubuntu
王振超wzc9 小时前
嵌入式开发环境搭建--WM软件安装,Ubuntu操作系统安装
linux·运维·ubuntu