所谓 Shell 内建命令,就是由 Bash 自身提供的命令,而不是文件系统中的某个可执行文件。 例如,用于进入或者切换目录的 cd 命令,虽然我们一直在使用它,但如果不加以注意很难意识
所谓 Shell 内建命令,就是由 Bash 自身提供的命令,而不是文件系统中的某个可执行文件。
例如,用于进入或者切换目录的 cd 命令,虽然我们一直在使用它,但如果不加以注意很难意识到它与普通命令的性质是不一样的:该命令并不是某个外部文件,只要在 Shell 中你就一定可以运行这个命令。
可以使用 type 来确定一个命令是否是内建命令:
[root@localhost ~]# type cd
cd is a Shell builtin
[root@localhost ~]# type ifconfig
ifconfig is /sbin/ifconfig
由此可见,cd 是一个 Shell 内建命令,而 ifconfig 是一个外部文件,它的位置是
/sbin/ifconfig
。
还记得系统变量 $PATH 吗?$PATH 变量包含的目录中几乎聚集了系统中绝大多数的可执行命令,它们都是外部命令。
通常来说,内建命令会比外部命令执行得更快,执行外部命令时不但会触发磁盘 I/O,还需要 fork 出一个单独的进程来执行,执行完成后再退出。而执行内建命令相当于调用当前 Shell 进程的一个函数。
下表列出了 Bash Shell 中直接可用的内建命令。
Bash Shell 内建命令
命令 |
说明 |
:
扩展参数列表,执行重定向操作
.
读取并执行指定文件中的命令(在当前 shell 环境中)
alias
为指定命令定义一个别名
bg
将作业以后台模式运行
bind
将键盘序列绑定到一个 readline 函数或宏
break
退出 for、while、select 或 until 循环
builtin
执行指定的 shell 内建命令
caller
返回活动子函数调用的上下文
cd
将当前目录切换为指定的目录
command
执行指定的命令,无需进行通常的 shell 查找
compgen
为指定单词生成可能的补全匹配
complete
显示指定的单词是如何补全的
compopt
修改指定单词的补全选项
continue
继续执行 for、while、select 或 until 循环的下一次迭代
declare
声明一个变量或变量类型。
dirs
显示当前存储目录的列表
disown
从进程作业表中刪除指定的作业
echo
将指定字符串输出到 STDOUT
enable
启用或禁用指定的内建shell命令
eval
将指定的参数拼接成一个命令,然后执行该命令
exec
用指定命令替换 shell 进程
exit
强制 shell 以指定的退出状态码退出
export
设置子 shell 进程可用的变量
fc
从历史记录中选择命令列表
fg
将作业以前台模式运行
getopts
分析指定的位置参数
hash
查找并记住指定命令的全路径名
help
显示帮助文件
history
显示命令历史记录
jobs
列出活动作业
kill
向指定的进程 ID(PID) 发送一个系统信号
let
计算一个数学表达式中的每个参数
local
在函数中创建一个作用域受限的变量
logout
退出登录 shell
mapfile
从 STDIN 读取数据行,并将其加入索引数组
popd
从目录栈中删除记录
printf
使用格式化字符串显示文本
pushd
向目录栈添加一个目录
pwd
显示当前工作目录的路径名
read
从 STDIN 读取一行数据并将其赋给一个变量
readarray
从 STDIN 读取数据行并将其放入索引数组
readonly
从 STDIN 读取一行数据并将其赋给一个不可修改的变量
return
强制函数以某个值退出,这个值可以被调用脚本提取
set
设置并显示环境变量的值和 shell 属性
shift
将位置参数依次向下降一个位置
shopt
打开/关闭控制 shell 可选行为的变量值
source
读取并执行指定文件中的命令(在当前 shell 环境中)
suspend
暂停 Shell 的执行,直到收到一个 SIGCONT 信号
test
基于指定条件返回退出状态码 0 或 1
times
显示累计的用户和系统时间
trap
如果收到了指定的系统信号,执行指定的命令
type
显示指定的单词如果作为命令将会如何被解释
typeset
声明一个变量或变量类型。
ulimit
为系统用户设置指定的资源的上限
umask
为新建的文件和目录设置默认权限
unalias
刪除指定的别名
unset
刪除指定的环境变量或 shell 属性
wait
等待指定的进程完成,并返回退出状态码
接下来的几节我们将重点讲解几个常用的 Shell 内置命令。