主流 Shell(如 Bash)的内置命令数量通常在 几十个(而非 80 个)。
以下以最常用的 Bash 为例,分类整理其核心内置命令,并说明功能。
**NAME
   bash,  :,  .,  [, alias, bg, bind, break, builtin, caller, cd, command, compgen,
   complete, compopt, continue, declare, dirs, disown, echo, enable, eval, 
   exec, exit, export, false, fc, fg, getopts,hash, help, history, jobs, kill,
   let, local, logout, mapfile, popd, printf, pushd, pwd, read, readonly, 
   return, set, shift, shopt, source, suspend, test, times, trap, true, 
   type, typeset,  ulimit,umask, unalias, unset, wait - bash built-in commands, 
   see bash(1)
一、Bash 内置命令分类及详解
Bash 的内置命令可分为以下几类,覆盖 Shell 自身管理、流程控制、变量操作、进程管理等场景。
1. Shell 自身管理与元命令
这类命令用于控制 Shell 的运行状态、解析规则或调试。
| 命令 | 功能描述 | 
|---|---|
: | 空命令(Null Command),仅返回状态码 0(常用于条件语句占位或循环体)。示例: while :; do sleep 1; done(无限循环)。 | 
.(或 source) | 在当前 Shell 环境中执行指定脚本文件(而非子 Shell),脚本中对变量/函数的修改会影响当前 Shell。 示例: . ./config.sh 或 source ./config.sh。 | 
alias | 定义或查看别名(Alias)。 示例: alias ll='ls -l'(定义别名);alias(查看所有别名)。 | 
unalias | 删除已定义的别名。 示例: unalias ll。 | 
bash | 启动一个新的 Bash 子 Shell(可通过参数调整行为,如 bash -c 'echo hello')。 | 
exit | 终止当前 Shell 或子 Shell,并返回指定的退出状态码(默认 0)。示例: exit 1(终止并返回错误码 1)。 | 
exec | 用指定命令替换当前 Shell 进程(不创建新进程)。 示例: exec ./app(当前 Shell 变为 app 进程)。 | 
getopts | 解析命令行选项(用于脚本处理参数)。 示例: while getopts "a:b:" opt; do ... done(处理 -a val -b val 格式参数)。 | 
hash | 管理 Shell 的命令路径缓存(加速命令查找)。 示例: hash(查看缓存);hash -r(清空缓存)。 | 
pwd | 打印当前工作目录(Print Working Directory)。 示例: pwd(输出 /home/user)。 | 
times | 显示 Shell 及其子进程的累计执行时间。 示例: times(输出用户时间和系统时间)。 | 
trap | 设置信号捕获(当 Shell 收到指定信号时执行自定义命令)。 示例: trap 'echo 退出' EXIT(Shell 退出时执行 echo 退出)。 | 
umask | 设置或查看文件权限掩码(控制新建文件的默认权限)。 示例: umask 022(默认文件权限 644,目录 755)。 | 
unset | 删除变量或函数。 示例: unset var(删除变量 var);unset -f func(删除函数 func)。 | 
2. 流程控制与结构化命令
用于实现条件判断、循环等程序逻辑。
| 命令 | 功能描述 | 
|---|---|
if | 条件判断(配合 then/elif/else/fi)。示例: if [ $a -gt 10 ]; then echo "大"; elif [ $a -eq 10 ]; then echo "等于"; else echo "小"; fi。 | 
case | 多分支匹配(类似 switch-case)。示例: case $var in<br> "start") echo "启动" ;;<br> "stop") echo "停止" ;;<br> *) echo "未知" ;;<br>esac。 | 
for | 循环遍历列表(或命令输出)。 示例: for i in {1..5}; do echo $i; done(遍历 1-5);for file in *.txt; do cat $file; done(遍历所有 .txt 文件)。 | 
while | 当条件为真时循环执行。 示例: while read line; do echo $line; done < file.txt(逐行读取文件并输出)。 | 
until | 当条件为假时循环执行(与 while 相反)。示例: until [ $count -ge 5 ]; do echo $count; ((count++)); done(输出 0-4)。 | 
select | 生成交互式菜单(从列表中选择选项)。 示例: select opt in "苹果" "香蕉" "退出"; do<br> if [ "$opt" = "退出" ]; then break; fi<br> echo "选择了:$opt"<br>done。 | 
break | 终止当前循环(for/while/until)。示例: for i in {1..10}; do if [ $i -eq 5 ]; then break; fi; echo $i; done(输出 1-4)。 | 
continue | 跳过当前循环的剩余代码,进入下一次迭代。 示例: for i in {1..5}; do if [ $i -eq 3 ]; then continue; fi; echo $i; done(输出 1-2,4-5)。 | 
3. 变量与参数操作
用于管理 Shell 变量、位置参数(如 $1, $@)或特殊参数(如 $#)。
| 命令 | 功能描述 | 
|---|---|
declare | 声明变量类型(如整数、只读、数组等)。 示例: declare -i num=10(声明整数变量);declare -r const=5(声明只读变量);declare -a arr=(1 2 3)(声明数组)。 | 
typeset | declare 的同义词(兼容旧版本)。 | 
export | 将变量导出为环境变量(子进程可继承)。 示例: export PATH=$PATH:/usr/local/bin(将路径加入环境变量)。 | 
local | 在函数内部声明局部变量(避免污染全局作用域)。 示例: func() { local x=10; echo $x; }(函数内 $x 不影响外部)。 | 
readonly | 声明只读变量(不可修改或取消)。 示例: readonly PI=3.14(尝试修改 PI=3 会报错)。 | 
test | 测试条件表达式(返回状态码 0 或 1)。示例: test -f file.txt(判断是否为普通文件);test $a -gt $b(判断 $a 是否大于 $b)。 | 
[ ] | test 的同义词(需注意方括号内的空格)。示例: [ -z "$var" ](判断变量是否为空)。 | 
[[ ]] | 增强版条件测试(支持正则匹配、逻辑运算符 &&/` | 
4. 输入输出与重定向
用于控制数据输入来源或输出目标(部分命令需配合重定向符号 >/< 使用)。
| 命令 | 功能描述 | 
|---|---|
read | 从标准输入读取一行数据到变量。 示例: read name(读取用户输入到 name);read -t 5 -p "请输入:" input(5 秒超时提示输入)。 | 
printf | 格式化输出(类似 C 语言的 printf)。示例: `printf “姓名:%s,年龄:%d  | 
” “张三” 20(输出 姓名:张三,年龄:20`)。 | |
echo | 输出字符串(支持转义字符)。 示例:`echo “Hello  | 
World”(输出两行);echo -e “启用转义:\ | |
\t””(-e启用转义,输出启用转义:\ “`)。 | 
5. 进程与作业管理
用于控制后台任务、前台任务切换或进程终止。
| 命令 | 功能描述 | 
|---|---|
bg | 将暂停的作业(Job)放到后台继续运行。 示例: bg %1(将作业 1 后台运行)。 | 
fg | 将后台作业切换到前台运行。 示例: fg %2(将作业 2 前台运行)。 | 
jobs | 查看当前 Shell 中的后台作业状态。 示例: jobs -l(显示作业编号、PID、状态)。 | 
kill | 终止指定进程或作业。 示例: kill 1234(终止 PID 为 1234 的进程);kill %1(终止作业 1)。 | 
wait | 等待所有或指定后台作业完成。 示例: wait %1(等待作业 1 完成);wait(等待所有后台作业)。 | 
二、Bash 内置命令的数量统计
compgen -b | wc -l  # 统计内置命令数量(输出约 60-70)
root# compgen  -b|wc -l
61
三、内置命令 vs 外部命令
- 内置命令:由 Shell 直接执行,无需启动子进程(速度快),可访问 Shell 内部状态(如变量、作业)。
 - 外部命令:独立可执行文件(如 
/bin/ls、/usr/bin/grep),需通过fork()+exec()启动子进程(速度较慢),无法直接修改 Shell 内部状态(如无法用ls定义变量)。 
总结
实际主流 Shell(如 Bash)的内置命令数量约为 60-70 个,覆盖 Shell 自身管理、流程控制、变量操作等核心场景。掌握这些内置命令是编写高效 Shell 脚本的基础。