前言
在 Shell 中,有许多内置命令可用于执行各种任务,包括文件操作、进程管理、环境变量设置等。本文将详细介绍一些常见的Shell内置命令及其示例用法。
命令 | 描述 |
alias | 创建命令别名,用于将命令或命令组合关联到用户自定义名称 |
bg | 将作业放入后台运行 |
bind | 显示或修改键盘绑定 |
break | 用于跳出循环语句 |
builtin | 用于运行内置Shell命令而不是外部命令 |
caller | 显示当前/调用子例程的函数调用信息 |
case | 在条件语句中使用模式匹配进行多路分支 |
cd | 更改当前工作目录 |
command | 在不启动新进程的情况下执行命令 |
compgen | 生成与已输入的文本匹配的命令及其参数的列表 |
complete | 用于定义自动完成的规则 |
compopt | 用于更改自动完成的行为选项 |
continue | 在循环中跳过当前迭代 |
coproc | 同时创建I/O重定向的子进程对(协程) |
declare | 声明变量的属性和赋值 |
dirs | 显示当前目录堆栈中的目录 |
disown | 从作业列表中移除作业,使其在后台运行且与Shell无关联 |
echo | 在标准输出上打印文本 |
enable | 启用或禁用Shell内置命令 |
eval | 将参数作为Shell命令执行 |
exec | 用给定的命令替换当前进程 |
exit | 终止Shell会话并返回给定的退出状态 |
export | 设置环境变量 |
FALSE | 返回退出状态1 |
fc | 打开文本编辑器以编辑和重新执行历史命令 |
fg | 将作业放入前台运行 |
getopts | 解析命令行选项和参数 |
hash | 维护路径名到已解析命令的哈希表 |
help | 显示Shell内置命令的帮助信息 |
history | 显示命令历史记录 |
jobs | 列出当前作业和作业状态 |
kill | 终止进程或发送信号给进程 |
local | 声明和限定局部变量的作用域 |
logout | 登出当前用户 |
mapfile | 从标准输入读取行,并将其存储在数组中 |
popd | 从目录堆栈中弹出并切换到上一个目录 |
printf | 格式化输出 |
pushd | 将当前目录推入目录堆栈,并切换到指定的目录 |
pwd | 显示当前工作目录的路径 |
read | 从标准输入读取一行或从文件描述符读取数据 |
readarray | 从输入中读取多行文本,并将其存储在数组中 |
readonly | 将变量设置为只读 |
return | 从函数中返回 |
select | 创建菜单并等待用户选择 |
set | 显示或设置Shell选项 |
shift | 将参数列表向左移动指定数量的位置 |
shopt | 显示或设置Shell选项 |
source | 在当前Shell会话中执行脚本文件 |
suspend | 暂停Shell的执行,使其进入挂起状态 |
test | 执行条件测试 |
time | 测量命令执行的时间 |
times | 显示Shell和其子进程的累计执行时间 |
trap | 设置在接收到信号时要执行的命令 |
TRUE | 返回退出状态0 |
type | 显示命令的类型,显示命令是内置命令、外部命令还是别名 |
typeset | 声明和限定变量的属性和作用域 |
ulimit | 显示或设置Shell进程的资源限制 |
umask | 显示或设置文件创建的默认权限掩码 |
unalias | 删除命令别名 |
unset | 删除变量或函数 |
variables | 显示当前Shell会话中定义的变量和函数 |
wait | 等待进程完成 |
alias
alias命令用于创建或查看命令别名。它允许您为常用的命令创建简短的别名,以便更方便地使用它们。例如:
alias ll='ls -l'
在上面的示例中,我们为ls -l命令创建了一个别名ll。现在,每当我们输入ll时,实际上是在执行ls -l命令。
bg
bg命令用于将一个作业置于后台运行。当一个作业被挂起或停止时,可以使用bg命令将其切换到后台并继续运行。例如:
bg %1
上面的示例中,%1表示作业号为1的作业。使用bg %1命令,我们将该作业切换到后台运行。
bind
bind命令用于显示当前绑定到特定键的Shell函数或操作。例如:
bind -P
上面的示例中,bind -P命令将显示所有绑定到键的函数和操作的列表。
break
break命令用于从循环结构(如for或while循环)中跳出。
builtin
builtin命令用于执行一个内置命令,而不是调用外部可执行文件。例如:
builtin echo hello
上面的示例中,builtin echo将执行Shell内置的echo命令,而不是调用外部的echo可执行文件。
caller
caller命令用于显示调用当前函数的函数的信息。例如:
function foo() {
echo "Caller: $(caller)"
}
function bar() {
foo
}
bar
上面的示例中,我们定义了两个函数foo和bar。在foo函数中,我们使用caller命令显示调用foo函数的函数的信息。然后,我们在bar函数中调用foo函数。运行上述代码将输出如下结果:
Caller: 2 bar
输出结果显示,foo函数是由bar函数调用的,而bar函数的调用是由脚本的第2行执行的。
case
case命令用于执行多个条件分支语句。它类似于switch语句,根据变量的值执行相应的命令块。
command
command命令用于执行指定的命令,而不受别名或函数的影响。例如:
command ls
上面的示例中,command ls将执行ls命令,而不受可能存在的ls命令别名的影响。
compgen
compgen命令用于生成自动补全的候选列表。例如:
compgen -c
上面的示例中,compgen -c将生成所有可用的命令的候选列表。
complete
complete命令用于设置命令的自动补全规则。例如:
complete -W "option1 option2 option3" command
上面的示例中,complete -W "option1 option2 option3" command将为command命令设置自动补全,补全的选项是option1、option2和option3。
compopt
compopt命令用于设置或查询自动补全选项。例如:
compopt -o nospace command
上面的示例中,compopt -o nospace command将为command命令设置自动补全选项,其中nospace选项指示自动补全后不插入空格。
coproc
coproc命令用于创建一个与命令或进程通信的协程。例如:
coproc myproc {
command; }
上面的示例中,coproc命令创建一个名为myproc的协程,并将其中的命令执行结果与该协程相关联。
declare
declare命令用于声明变量的属性和类型。例如:
declare -i num=10
上面的示例中,declare -i num=10将声明一个整数类型的变量num,并将其初始化为10。
dirs
dirs命令用于显示当前的目录堆栈。
disown
disown命令用于将作业从Shell的作业列表中移除。例如:
sleep 60 &
disown
在上面的示例中,sleep 60 &命令将sleep命令置于后台运行,并将其作为一个作业。然后,使用disown命令将该作业从Shell的作业列表中移除。
enable
enable命令用于启用或禁用Shell内置命令。例如:
enable -n command
上面的示例中,enable -n command将禁用名为command的内置命令。
eval
eval命令用于将参数作为Shell命令执行。例如:
x=5
eval "echo \$x"
上面的示例中,eval "echo \$x"将执行echo $x命令,并输出变量x的值。
exec
exec命令用于用新的进程替换当前Shell进程。例如:
exec command
上面的示例中,exec command将用command命令替换当前的Shell进程。
export
export命令用于设置或显示环境变量。例如:
export PATH="/usr/local/bin:$PATH"
上面的示例中,export PATH="/usr/local/bin:$PATH"将把/usr/local/bin添加到PATH环境变量的开头。
false
false命令用于返回一个退出状态值表示失败。例如:
false
echo $?
上面的示例中,false命令将返回一个退出状态值为1,表示失败。然后,echo $?命令将输出上一个命令的退出状态值。
fc
fc命令用于编辑并重新执行之前执行的命令。例如:
fc -e vi
上面的示例中,fc -e vi命令将打开一个文本编辑器(例如vi),允许您编辑并重新执行之前执行的命令。
fg
fg命令用于将一个作业置于前台运行。例如:
fg %1
上面的示例中,%1表示作业号为1的作业。使用fg %1命令,我们将该作业切换到前台运行。
getopts
getopts命令用于解析脚本的命令行选项。例如:
while getopts ":a:b:" opt; do
case $opt in
a)
echo "Option -a: $OPTARG"
;;
b)
echo "Option -b: $OPTARG"
;;
\?)
echo "Invalid option: -$OPTARG"
;;
esac
done
在上面的示例中,我们使用getopts命令解析脚本的命令行选项。-a和-b是选项,后面可以跟参数。$OPTARG表示选项的参数值。
hash
hash命令用于查找并记住命令的完整路径。例如:
hash ls
上面的示例中,hash ls命令将查找并记住ls命令的完整路径。
jobs
jobs命令用于显示作业列表。
local
local命令用于声明一个局部变量。例如:
function foo() {
local var="Hello"
echo $var
}
foo
在上面的示例中,我们定义了一个函数foo,其中使用local命令声明了一个局部变量var,并将其赋值为Hello。在函数内部,我们使用echo命令输出该局部变量的值。
logout
logout命令用于退出当前登录的Shell会话。
mapfile
mapfile命令用于将输入的文本行读入到一个数组中。
示例:
mapfile -t lines < file.txt
上面的示例中,mapfile -t lines < file.txt命令将从file.txt文件中读取文本行,并将它们存储在名为lines的数组中。
popd
popd命令用于从目录堆栈中弹出并切换到上一个目录。
pushd
pushd命令用于将目录压入堆栈并切换到新目录。例如:
pushd /path/to/directory
上面的示例中,pushd /path/to/directory命令将将指定的目录/path/to/directory压入目录堆栈,并切换到该目录。
read
read命令用于从标准输入读取一行文本并将其赋值给变量。
read -p "Enter your name: " name
echo "Hello, $name!"
在上面的示例中,read -p "Enter your name: " name命令将提示用户输入名称,并将输入的值赋给变量name。然后,通过echo命令输出欢迎消息。
readarray
readarray命令用于从输入中读取多行文本并将其存储到数组中。例如:
readarray lines < file.txt
上面的示例中,readarray lines < file.txt命令将从file.txt文件中读取多行文本,并将每行文本存储在名为lines的数组中。
readonly
readonly命令用于将变量声明为只读,即不可修改的变量。例如:
readonly PI=1.23
在上面的示例中,readonly PI=1.23将变量PI声明为只读变量,并将其值设置为1.23。一旦变量被声明为只读,就无法再修改它的值。
return
return命令用于从函数中返回一个值。例如:
function add_numbers() {
local sum=$(( $1 + $2 ))
return $sum
}
add_numbers 5 7
result=$?
echo "Sum: $result"
在上面的示例中,我们定义了一个名为add_numbers的函数,该函数接受两个参数,并计算它们的和。使用return命令,我们将和作为函数的返回值。然后,我们通过$?获取函数的返回值,并将其存储在变量result中。最后,我们使用echo命令输出返回值。
select
select命令用于创建一个菜单并等待用户选择。例如:
select option in "Apple" "Banana" "Orange"; do
echo "You selected $option."
break
done
在上面的示例中,select命令创建了一个菜单,其中包含"Apple"、"Banana"和"Orange"三个选项。用户可以通过输入选项的编号来选择一个选项。选择后,通过$option变量可以获取用户的选择。在示例中,我们使用echo命令输出用户选择的选项,并使用break语句退出循环。
set
set命令用于设置Shell的选项和参数。例如:
set -o errexit
在上面的示例中,set -o errexit命令将设置Shell选项errexit,即在脚本中遇到错误时立即退出。
shift
shift命令用于将命令行参数向左移动,丢弃第一个参数并将后面的参数依次向前移动。例如:
function print_args() {
echo "Arguments: $*"
shift
echo "Shifted Arguments: $*"
}
print_args "apple" "banana" "orange"
在上面的示例中,我们定义了一个名为print_args的函数,它接受多个参数并输出它们。通过调用print_args函数并传递三个参数,我们可以看到在调用shift命令后,参数向左移动了一位,并丢弃了第一个参数。因此,在第二次输出中,我们只能看到"banana"和"orange"。
shopt
shopt命令用于显示和设置Shell的选项。例如:
shopt -s extglob
在上面的示例中,shopt -s extglob命令将启用扩展模式匹配选项extglob,使得在文件名匹配和模式匹配中可以使用更丰富的模式语法。
source
source命令用于在当前Shell会话中执行脚本文件,并保持在当前Shell环境中运行。例如:
source script.sh
在上面的示例中,source script.sh命令将执行名为script.sh的脚本文件,并将其内容加载到当前Shell会话中。这使得脚本中定义的变量、函数和其他命令可以在当前Shell中使用。
suspend
suspend命令用于挂起当前Shell会话。
test
test命令用于对条件进行测试,并返回退出状态值以指示条件是否为真。例如:
if test -f file.txt; then
echo "File exists."
else
echo "File does not exist."
fi
在上面的示例中,test -f file.txt条件用于检查是否存在名为file.txt的文件。如果条件为真,则执行if语句块中的命令,否则执行else语句块中的命令。
time
time命令用于测量命令的执行时间。
times
times命令用于显示Shell会话的累计用户和系统CPU时间。
trap
trap命令用于在接收到信号时执行命令或脚本。例如:
trap "echo 'Signal received!'" SIGINT
在上面的示例中,trap "echo 'Signal received!'" SIGINT命令将设置一个SIGINT信号的陷阱,即在接收到SIGINT信号(例如通过按下Ctrl+C)时执行命令echo 'Signal received!'。
true
true命令用于返回一个退出状态值表示成功。例如:
true
echo $?
上面的示例中,true命令将返回一个退出状态值为0,表示成功。然后,echo $?命令将输出上一个命令的退出状态值。
type
type命令用于显示命令的类型,包括内置命令、外部命令或别名。例如:
type ls
上面的示例中,type ls命令将显示命令ls的类型。如果ls是一个内置命令,它将显示ls is a shell builtin;如果ls是一个外部命令,它将显示ls is /bin/ls;如果ls是一个别名,它将显示ls is aliased to 'ls --color=auto'。
typeset
typeset命令用于声明变量的属性,如类型、作用域和只读属性。
typeset -i num=10
echo $num
在上面的示例中,typeset -i num=10命令将变量num声明为整数类型,并将其初始化为10。然后,使用echo命令输出变量num的值。
ulimit
ulimit命令用于设置和显示Shell会话的资源限制。例如:
ulimit -n
上面的示例中,ulimit -n命令将显示Shell会话的最大打开文件描述符数。
umask
umask命令用于设置文件创建权限的屏蔽位。
unalias
unalias命令用于取消命令的别名定义。
unset
unset命令用于取消变量的定义。
variables
variables命令用于显示当前Shell会话中定义的所有变量。
wait
wait命令用于等待后台进程的完成。例如:
command1 &
command2 &
wait
echo "All commands completed."
在上面的示例中,command1和command2是后台进程。wait命令将等待这些后台进程完成后再继续执行后续命令。