Shell是一种命令行解释器,它允许用户与操作系统进行交互。在Shell中,有许多内置命令可用于执行各种任务,包括文件操作、进程管理、环境变量设置等。在本文中,我们将详细介绍一些常见的Shell内置命令及其示例用法。
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
循环)中跳出。
示例:
for i in 1 2 3 4 5
do
if [ $i -eq 3 ]
then
break
fi
echo $i
done
上面的示例中,当$i
的值等于3时,break
命令将退出for
循环。
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
语句,根据变量的值执行相应的命令块。
示例:
fruit="apple"
case $fruit in
"apple")
echo "It's an apple.";;
"banana")
echo "It's a banana.";;
"orange")
echo "It's an orange.";;
*)
echo "Unknown fruit.";;
esac
在上面的示例中,根据变量fruit
的值,case
命令将执行相应的命令块。由于fruit
的值为apple
,因此输出将是:
It's an apple.
cd
cd
命令用于更改当前工作目录。
示例:
cd /path/to/directory
上面的示例中,cd
命令将当前工作目录更改为/path/to/directory
。
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
选项指示自动补全后不插入空格。
continue
continue
命令用于跳过循环中的当前迭代并继续下一次迭代。
示例:
for i in 1 2 3 4 5
do
if [ $i -eq 3 ]
then
continue
fi
echo $i
done
在上面的示例中,当$i
的值等于3时,continue
命令将跳过该次循环迭代,输出结果将是:
1
2
4
5
coproc
coproc
命令用于创建一个与命令或进程通信的协程。
示例:
coproc myproc {
command; }
上面的示例中,coproc
命令创建一个名为myproc
的协程,并将其中的命令执行结果与该协程相关联。
declare
declare
命令用于声明变量的属性和类型。
示例:
declare -i num=10
上面的示例中,declare -i num=10
将声明一个整数类型的变量num
,并将其初始化为10。
dirs
dirs
命令用于显示当前的目录堆栈。
示例:
dirs
上面的示例中,dirs
命令将显示当前的目录堆栈。
disown
disown
命令用于将作业从Shell的作业列表中移除。
示例:
sleep 60 &
disown
在上面的示例中,sleep 60 &
命令将sleep
命令置于后台运行,并将其作为一个作业。然后,使用disown
命令将该作业从Shell的作业列表中移除。
echo
echo
命令用于在终端输出文本或变量的值。
示例:
echo "Hello, World!"
上面的示例中,echo
命令将输出字符串"Hello, World!"。
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进程。
exit
exit
命令用于终止当前Shell会话。
示例:
exit
上面的示例中,exit
命令将终止当前的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
命令的完整路径。
help
help
命令用于显示Shell内置命令的帮助信息。
示例:
help cd
上面的示例中,help cd
命令将显示cd
命令的帮助信息。
history
history
命令用于显示命令历史记录。
示例:
history
上面的示例中,history
命令将显示之前执行的命令的历史记录。
jobs
jobs
命令用于显示作业列表。
示例:
jobs
上面的示例中,jobs
命令将显示当前Shell会话中的作业列表。
kill
kill
命令用于发送信号给指定的进程。
示例:
kill -TERM PID
上面的示例中,kill -TERM PID
命令将向具有指定进程ID(PID)的进程发送SIGTERM
信号,以请求其终止。
local
local
命令用于声明一个局部变量。
示例:
function foo() {
local var="Hello"
echo $var
}
foo
在上面的示例中,我们定义了一个函数foo
,其中使用local
命令声明了一个局部变量var
,并将其赋值为Hello
。在函数内部,我们使用echo
命令输出该局部变量的值。
logout
logout
命令用于退出当前登录的Shell会话。
示例:
logout
上面的示例中,logout
命令将退出当前登录的Shell会话。
mapfile
mapfile
命令用于将输入的文本行读入到一个数组中。
示例:
mapfile -t lines < file.txt
上面的示例中,mapfile -t lines < file.txt
命令将从file.txt
文件中读取文本行,并将它们存储在名为lines
的数组中。
popd
popd
命令用于从目录堆栈中弹出并切换到上一个目录。
示例:
popd
上面的示例中,popd
命令将从目录堆栈中弹出并切换到上一个目录。
printf
printf
命令用于格式化输出。
示例:
printf "Hello, %s!\n" "John"
在上面的示例中,printf
命令使用格式字符串"Hello, %s!\n"
,并通过%s
占位符将"John"
作为参数进行格式化输出。输出结果为Hello, John!
。
pushd
pushd
命令用于将目录压入堆栈并切换到新目录。
示例:
pushd /path/to/directory
上面的示例中,pushd /path/to/directory
命令将将指定的目录/path/to/directory
压入目录堆栈,并切换到该目录。
pwd
pwd
命令用于显示当前工作目录的路径。
示例:
pwd
上面的示例中,pwd
命令将显示当前工作目录的路径。
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=3.14
在上面的示例中,readonly PI=3.14
将变量PI
声明为只读变量,并将其值设置为3.14。一旦变量被声明为只读,就无法再修改它的值。
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会话。
示例:
suspend
上面的示例中,suspend
命令将挂起当前Shell会话,并返回到父Shell或终端。您可以使用fg
命令将挂起的会话切换回前台运行。
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
命令用于测量命令的执行时间。
示例:
time ls
上面的示例中,time ls
命令将测量ls
命令的执行时间,并输出包括实际时间、用户CPU时间和系统CPU时间的统计信息。
times
times
命令用于显示Shell会话的累计用户和系统CPU时间。
示例:
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
命令用于设置文件创建权限的屏蔽位。
示例:
umask 022
在上面的示例中,umask 022
命令将设置文件创建权限的屏蔽位为022,表示允许拥有者具有完全权限,而组和其他用户的写权限被禁止。
unalias
unalias
命令用于取消命令的别名定义。
示例:
unalias ll
上面的示例中,unalias ll
命令将取消ll
命令的别名定义。
unset
unset
命令用于取消变量的定义。
示例:
unset my_var
在上面的示例中,unset my_var
命令将取消变量my_var
的定义。
variables
variables
命令用于显示当前Shell会话中定义的所有变量。
示例:
variables
上面的示例中,variables
命令将显示当前Shell会话中定义的所有变量的列表。
wait
wait
命令用于等待后台进程的完成。
示例:
command1 &
command2 &
wait
echo "All commands completed."
在上面的示例中,command1
和command2
是后台进程。wait
命令将等待这些后台进程完成后再继续执行后续命令。
总结
命令 | 描述 |
---|---|
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 |
等待进程完成 |