Linux操作系统基础解析之——Bash(Shell)基础知识
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux操作系统基础解析之——Bash(Shell)基础知识相关的知识,希望对你有一定的参考价值。
SHELL BUILTIN COMMANDS
除非另外说明,内置命令如果接受由-引导的选项,那么它也接受--,来表示选项的结束。内置命令:,true,false和test不接受选项并且尤其不处理--引导的选项。内置命令exit,logout,break,continue,let和shift接受和处理以-开头的参数不需要以--开头的。其他接受参数但是不能接受特定选项的内置命令解释以-作为无效选项开头的参数并且需要--来阻止这样的解释。
: [arguments]
没有效果;这个命令除了展开arguments和任何指定的重定向之外,不做任何事。退出时返回值为0。
. filename [arguments]
source filename [arguments]
读取并在当前shell环境中执行filename中的命令,返回filename中最后一个命令的退出状态。如果filename中不包含斜杠(slash),系统将在PATH中查找包含filename的目录。在PATH中查找的文件不需要是可执行的。当bash不在posix mode中时,如果在PATH中找不到文件就会在当前目录查找。如果内置命令shopt的sourcepath选项被关闭,PATH将不会被查找。如果提供了任何arguments,在filename被执行时它们成为的位置参数。否则位置参数不发生变化。返回状态是脚本中最后一个命令退出时的状态。没有执行命令则返回0,如果没有找到或不能读取filename的话,返回值为false。
alias [-p] [name[=value] ...]
Alias不带参数或者带-p选项运行时将在标准输出以这样的格式alias name=value给出别名列表。如果为其提供了参数,将创建提供了value的name的别名。value中尾部的空格使得别名被展开时,下一个字做别名替换。对于参数列表中的每一个name,如果value没有给出,这个别名的名称和值会被打印出来。除非name没有定义为别名,否则Alias返回true。
bg [jobspec]
使挂起的程序jobspec在后台继续执行,就好像它是用"&"启动的一样。如果没有指定jobspec,shell意义上的当前作业将被使用。 除非在禁止了作业控制时运行或者在允许作业控制时运行,或者没有发现任何指定的jobspec,或者它不是在作业控制下启动的,否则bg jobspec返回0。
bind [-m keymap] [-lpsvPSV]
bind [-m keymap] [-q function] [-u function] [-r keyseq]
bind [-m keymap] -f filename
bind [-m keymap] -x keyseq:shell-command
bind [-m keymap] keyseq:function-name
bind readline-command
显示当前行编辑功能的按键绑定和函数绑定结果,将一个按键序列和一个行编辑功能的函数或宏进行绑定,或者设置一个行编辑功能的变量。每一个在非选项的参数都是一个命令,因为它会在.inputrc文件中出现,但是每个绑定结果或者命令必须作为单独的参数传递;例如:‘"\C-x\C-r":re-read-init-file‘。 如果提供了选项,它们有如下的意义:
-m keymap
使用keymap作为keymap通过后续的绑定被接受。可选的keymap名称是emacs,emacs-standard,emacs-meta,emacs-ctlx,vi,vi-move,vi-command以及vi-insert。vi和vi-command等价;emacs和emacs-standard等价
-l
列出所有的行编辑功能的函数名。
-p
以可被读取的方式显示行编辑功能函数名称和绑定结果
-P
列出当前行编辑功能函数的名称和绑定。
-s
以可被读取的方式显示行编辑功能中被绑定到宏的按键序列和他们输出的字符串。
-S
显示行编辑功能中被绑定到宏的按键序列和他们输出的字符串。
-v
以可被读取的方式显示行编辑功能变量名称和值
-V
列出当前行编辑功能变量名和值。
-f filename
从filename中读取按键的绑定关系
-q function
查询哪些键将调用名为function的函数。
-u function
取消所有绑定到function函数的按键。
-r keyseq
删除当前所有对于keyseq的绑定关系。
-x keyseq:shell-command
使shell-command在keyseq按下时被执行。当shell-command被执行时,shell设置READLINE_LINE变量为行编辑功能的行缓冲区并且将READLINE_POINT变量的值设置为当前插入点的位置。如果执行命令改变了READLINE_LINE或READLINE_POINT的值,那些新的值会在被反应在编辑状态中。
返回值是0,除非给出了一个不能识别的选项或是产生了一个错误。
break [n]
从一个for,while,until或者select循环退出。如果n被指定,就跳出n层循环。n必须≥1。如果n比当前循环层数还要大,将跳出所有循环。当n≤0时返回值是非0的;否则返回值为0。
builtin shell-builtin [arguments]
执行指定的shell内置命令,传递arguments给该命令,返回该命令的返回值。这在定义一个和shell内置命令同名的函数时很有用,者将保留使用函数的内置功能。内置命令cd常以这种方式重新定义。如果指定的shell-builtin并不是一个shell内置命令,那么返回状态是false。
caller [expr]
返回所有活动子例程的上下文。如果不带expr,caller显示命令行号和当前子例程调用的原文件名。如果以一个非负整数作为expr,caller会显示行号,子例程名称和源文件当前调用栈中的相应的位置。这样的外部信息可能会被使用,例如,显示一个栈追踪。当前帧时第0帧。除非shell没有执行子例程调用或者expr没有对应调用栈中的有效位置,否则,返回值为0。
cd [-L| [-P [-e]] [dir]
改变当前目录为dir。变量HOME的值是dir的默认值。环境变量CDPATH定义了包含dir的查找路径。在CDPATH变量中备选的路径名以冒号分隔。CDPATH变量中的空目录名与当前目录相同,即‘.‘。如果dir以斜杠起始,那么CDPATH不会被使用。-P选项是说使用物理路径结构而不是跟随符号链接,-L选项则强制跟随符号链接。如果-e选项和-P选择一起使用,在一次成功的目录改变之后,当前工作目录无法再做成功的判断,cd命令会返回一个不成功的状态。-参数等同于$OLDPWD。如果使用CDPATH中的一个非空目录名,或者如果"-"时第一个参数,并且目录改变时成功的,新工作目录的绝对路径名就会被写到标准输出。如果成功地改变了目录返回值是true;否则是false。
command [-pVv] command [arg ...]
使用args作为参数来运行command将禁止正常的shell函数的查找。只有内置命令或者PATH变量中包含的命令才可以执行。如果给出-p参数,对command的查找是以保证找到所有的标准实用工具的PATH的默认值进行的。如果提供-V选项或者是-v选项,就会显示处command相关的说明。-v选项使得一个单独的代表命令的字或者用于调用command的文件名得以显示出来;-V选项给出更详细的描述。如果提供了-V或者-v选项,且如果找到了command的情况下退出状态为0,没找到就是1。如果没有提供选项,并且产生了错误或者没有找到command,退出状态就是127。否则,内置命令command的退出状态是其后面command的退出状态。
compgen [option] [word]
根据option为word生成可能的补全匹配。这可以是任何被内置命令complete使用除了-p和-r之外的选项所接受的选项,并将匹配到的结果写到标准输出。当使用-F或-C选项时,许多的shell变量由可编程补全功能来设置,如果是这样的花,将不再有可用值。
即使已经从补全规则中用通用的标记直接生成可编程补全代码,也会利用同样的方法生成匹配项。如果指定了word,只有匹配word的补全结果才被显示出来。
除非提供了无效的选项,或者没有生成匹配项,否则返回值即为真。
complete [-abcdefgjksuv] [-o comp-option] [-DE] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] name [name ...]
complete -pr [name ...]
指定每个name的参数应当如何被补全。如果提供了-p选项,或者如果没有选项选项,现有的补全规则将以一种作为输入允许被重用的方式被显示出来,-r选项将针对每个name删除其补全规则。或者,如果没有给出name,将删除所有补全规则。-D选项意味着将剩余的选项和动作应该被用于"default"命令补全;也就是说,在先前已定义没有补全的命令上可以尝试着补全了。-E选项指定是剩下的选项和动作应该被用于"empty"命令的补全;也就是说,在一个空行上尝试补全。
在尝试字的补全时,用于这些补全规则的进程在上面Programmable Completion(可编程补全)中详述。
如果给出其他选项的话,具有下列意义。
-G,-W和-X选项的参数(如果需要的话,还包括-P和-S选项)应当被引用以避免在调用内置命令complete之前被展开。
-o comp-option
comp-option控制着补全规则的除了简单地生成补全之外的多种行为。comp-option可以是如下之一:
bashdefault
如果补全规则没有生成匹配项,执行默认bash补全的其余部分。
default
如果补全规则没有生成匹配项,使用行编辑功能的默认文件名补全。
dirnames
如果补全规则没有生成匹配项,执行目录名补全。
filenames
告诉行编辑功能,补全规则生成了文件名,因此它可以进行任何专用文件名的处理(例如,给目录名加上斜杠,引用特殊字符或消除尾部空白)。主要用于shell函数。
nospace
告诉行编辑功能不要向在行的结束处补全的字添加空格(这是默认行为)。
plusdirs
在所有通过补全规则生成的匹配项定义之后,将会尝试目录名补全并且所有匹配项会被添加到另一个动作的结果中。
-A action
action可以是下列之一,来产生一系列可能的补全结果:
alias
起别名。也可以用-a指定。
arrayvar
数组变量名。
binding
行编辑功能按键绑定。
builtin
shell内置命令的名称。也可以用-b选项指定。
command
命令名。也可以用-c选项指定。
directory
目录名。也可以用-d选项指定。
disabled
被禁用的内置命令名称。
enabled
启用的内置命令名称。
export
被导出的shell变量名称。也可以用-e选项指定。
file
文件名。也可以用-f选项指定。
function
shell的函数名。
group
组名。也可以用-g选项指定。
helptopic
内置命令help接受的帮助主题。
hostname
主机名,通过shell变量HOSTFILE指定的文件中得到。
job
作业名,如果作业控制被激活的话。也可以用-j选项指定。
keyword
shell保留字。也可以用-k选项指定。
running
正在运行的作业名,如果作业控制被激活的话。
service
服务名。也可以用-s选项指定。
setopt
内置命令set的-o选项的有效参数。
shopt
内置命令shopt接受的shell选项名。
signal
信号名。
stopped
停止的作业名,如果作业控制被激活的话。
user
用户名。也可以用-u选项指定。
variable
shell变量的名称。也可以用-v选项指定。
-C command
command 在子shell环境中被执行,并且它的输出被用作可能的补全。
-F function
shell函数function在当前shell环境中被执行。当它完成时,可能的补全会从数组变量CPMPREPLY的值中被取回。
-G globpat
文件名展开模式globpat被展开,生成可能的补全。
-P prefix
在所有其他选项都使用过之后,prefix被加到每个可能的补全的起始处。
-S suffix
在所有其他选项都使用过之后,suffix被附加到每个可能的补全后面。
-W wordlist
wordlist使用IFS特殊变量中的字符作为定界符被拆分,每个结果的字被展开。可能的补全是匹配被补全的字的结果列表中的成员。
-X filterpat
filterpat是一个用于路径名展开的模式。它适用于由前面的选项和参数生成的可能的补全的清单,每一个匹配filterpat的补全都被从列表中删除。为filterpat加上前导!使模式意义相反;这种情况下,所有不匹配filterpat的模式被删除。
除非提供了非法的选项,在没有给出name参数时提供了除-p和-r之外的某个选项,试图删除一条name的补全规则但是规则不存在,或者添加补全规则时出错,否则返回值为真。
compopt [-o option] [-DE] [+o option] [name]
根据options为每个name修改补全选项,或者如果没有提供names,修改当前执行的补全选项。如果没有给出选项,为每个name或当前补全显示其补全选项。option可能的取值为上面介绍过的内置命令complete的有效值。-D选项意味着剩余选项将用于"default"命令补全;也就是说,在先前已定义没有补全的命令上可以尝试着补全了。-E选项指定是剩余选项应该被用于"empty"命令的补全;也就是说,在一个空行上尝试补全。
除非提供了无效的选项,试图删除一条name的补全规则但是规则不存在,或者发生输出错误,否则返回值为真。
continue [n]
复位到for,while,until或select循环的下一次封闭循环。如果指定了n,复位到向外第n层循环。n必须≥1。如果n比封闭循环的层数更多,将复位到顶层循环。continue在循环内部被执行时,如果n≤0则返回值为非0;否则返回值是0。当continue在循环外部执行时,返回值为0。
declare [-afFirtx] [-p] [name[=value]]
typeset [-afFirtx] [-p] [name[=value]]
声明变量且/或设置它们的属性。如果没有给出name则显示变量的值。-p选项将显示每个name的属性和值。当-p选项和name参数共同使用时,额外的选项被忽略。当-p选项没有和name参数一同提供的时候,会显示所有拥有通过额外选项指定属性的变量的属性和值。如果没有其他选择与-p同时使用,declare会显示所有shell变量的属性和值。-f选项严格限制只显示shell函数。-F选项禁止函数定义内容的显示;只显示函数名和属性。如果shell选项extdebug用shopt命令启用,源文件名和函数定义的行号也会被显示出来。-F选项暗含-f。-g选项强制在全局范围内定义和修改变量,即使declare在shell函数中被执行也是如此。其他所有的情况下都会将之忽略。下列选项可用来限制输出到特定属性的变量或者为变量设置属性:
-a
每个name都是索引数组变量。
-A
每个name都是关联数组变量。
-f
只使用函数名。
-i
变量被当作一个整数;当变量被赋值时将进行算术运算。
-l
当变量被赋值时,所有大写字母的字符都会被转换成小写字母。大写属性被禁用。
-r
使得name只读。这些名称不能再被后续的子查询赋值语句赋值或撤销。
-t
为每个name设置跟踪属性。被跟踪的函数继承了调用者shell的DEBUG和RETURN的捕获器。跟踪属性对变量没有特殊意义。
-x
标记name为可以通过环境导出给后续命令。
使用‘+‘代替‘-‘将关闭替代属性,+a不能用于销毁一个数组变量和+r不能删除只读属性是例外。当用于函数中时,除非提供了-g选项,否则它将使得每个name成为局部的,就像使用了local命令。如果一个变量名后紧跟着"=value",变量值就被设置为value。除非遇到了无效的选项,试图使用‘-f foo=bar‘定义函数,试图向只读变量赋值,试图向数组变量赋值但没有使用复合的赋值语法,name之一不是有效的shell变量名,试图将数组变量的数组状态关闭,或者是试图使用-f显示一个不存在的函数,否则返回值为0。
dirs [-clpv] [+n] [-n]
没有选项时显示当前保存的目录列表。默认输出在一行中,目录名用空格分开。可以使用pushd命令将目录添加到列表,popd命令将列表中的条目删除。
+n
在不使用选项调用dirs命令是,显示由dirs命令展示出来的列表中自左侧起从0开始计数的第n个条目。
-n
在不使用选项调用dirs命令是,显示由dirs命令展示出来的列表中自右侧起从0开始计数的第n个条目。
-c
通过删除所有条目以清空目录栈。
-l
产生一个长列表;默认列表格式使用波浪线来表示家目录。
-p
显示目录栈,每行一个条目。
-v
显示目录栈,每行一个条目,每个条目前缀上它在栈中的位置索引。
返回值是0,除非给出了无效的参数,或者n索引超出了目录栈的范围。
disown [-ar] [-h] [jobspec ...]
没有选项时,从活动作业表中删除每个jobspec。如果jobspec不存在,并且既没有提供-a选项也没有提供-r选项的话,shell的当前作业的概念是使用。如果给出了-h选项,每个jobspec并不从表中删除,而是被标记,使得即使shell接到SIGHUP信号,也不会向作业发出SIGHUP信号。如果没有给出jobspec,-a选项意味着删除或标记所有作业;不带jobspec参数-r选项对正在运行的作业进行限制操作。返回值是0,除非jobspec没有指定有效的作业。
echo [-neE] [arg ...]
输出args,以空格分开,最后跟一个换行符。返回值总是0。如果指定了-n选项,将不在尾部添加换行符。如果给出了-e选项,下列反斜杠转义字符的解释功能也将开启。-E选项禁止这些转义字符的解释,即使在默认解释它们的系统中也是如此。shell选项xpg_echo可以用来在动态判断echo是否默认展开这些转义字符。 echo不将--解释为选项的结束。 echo解释下列转义序列:
\a
响铃
\b
退格
\c
删除尾部换行符
\e
字符Esc
\f
进纸
\n
换行符
\r
回车
\t
水平制表符
\v
竖直制表符
\\
反斜杠
\0nnn
一个八比特字符,它的值是八进制值nnn(零到三个八进制数字)。
\xHH
一个八比特字符,它的值是十六进制值HH(一到两个十六进制数字)。
\uHHHH
Unicode(ISO/IEC 10646)字符,它的值是十六进制值HHHH(一到四个十六进制数字)。
\uHHHHHHHH
Unicode(ISO/IEC 10646)字符,它的值是十六进制值HHHHHHHH(一到八个十六进制数字)。
enable [-adnps] [-f filename] [name ...]
允许或禁止shell内置命令。禁止一个内置命令使得磁盘上的与内置命令同名的文件得以运行,不必使用它的完整路径,即使shell一般在查找磁盘上的命令之前查找内置命令。如果使用了-n选项,每个name都被禁止;否则,name被启用。例如,要使用通过PATH查找到的test命令而不是shell的内置版本,可以运行"enable -n test"。-f选项意味着在支持动态加载的系统上,从共享库filename中加载新的内置命令name。-d选项将删除曾经用-f加载的内置命令。如果没有给出name参数,或者给出了-p选项,将显示shell内置命令的列表。没有其他选项参数,这个列表只包含所有启用的shell内置命令;如果提供了-n选项,将只显示被禁止的内置命令;如果提供了-a选项,显示包含所有内置命令的列表,还有命令是否被启用的提示;如果提供了-s选项,输出被限制为POSIX 的内置命令special。返回值是0,除非name不是shell的内置命令,或者从共享库中加载新的内置命令时出错。
eval [arg ...]
args被读取并连结为一个单独的命令。这个命令被shell读取并执行,它的退出状态被作为eval的值返回。如果没有args,或仅仅包含空参数,eval返回0。
exec [-cl] [-a name] [command [arguments]]
如果指定了command,它将代替shell。不会创建新的进程。arguments成为command的参数。如果提供了-l选项,shell将在传递给command的第0个参数前面加上一个连字符。这样login(1)做的事情。-c选项使得command在一个空环境中执行。如果提供了-a选项,shell将name作为第0个参数传递给要执行的命令。如果由于某些原因导致command不能执行,那么对于非交互的shell来说就会退出,除非shell选项execfail被设置为启用,这种情况下它返回失败。如果文件不能被执行,交互的shell就返回失败。如果没有指定command,任何重定向对当前shell生效,且返回值是0。如果发生重定向错误,返回状态是1。
exit [n]
使得shell以状态值n退出。如果n被忽略,退出状态是最后执行的命令的退出状态。在shell终止前,EXIT上的信号捕获器将被执行。
export [-fn] [name[=word]] ...
export -p
给出的names被标记为自动地导出到后续命令的执行环境中。如果给出了-f选项,names指的是函数。如果没有给出names,或者如果给出了-p选项,就打印出在这个shell中被导出的所有名字的列表。选项-n使得从每一个names中的导出属性被删除。如果变量名后面跟着"=word"的字样,变量的值就会被设置为"word"。export返回一个为0退出状态码,除非遇到了无效的选项,names中有一个不是有效的shell变量名,或者给出了-f选项,而name不是一个函数。
fc [-e ename] [-nlr] [first] [last]
fc -s [pat=rep] [cmd]
命令修复。在第一种形式中,从first到last的一系列的命令都会从历史列表中选取。First和last可以指定为字符串(可以定位最后一个以此字符串开始的命令)或者数字(历史列表中的索引,负数被当作相对当前命令号的偏移)。如果没有指定last,它在列举时被设为当前命令(因此"fc -l -10"将输出最后10条命令),其他情况下被设为first。如果没有指定first,first将因为编辑而被设置为前一个命令,同时因为列表显示而将其设置为-16。
-n选项将在列举时阻止显示命令编号。选项-r将命令顺序进行掉换。如果给出了-l选项,命令将列举在标准输出上。否则,通过ename给出的编辑器就会被调用,来编辑包含这些命令的文件。如果没有给出ename,将使用变量FCEDIT的值,如果FCEDIT没有定义就使用EDITOR的值。如果仍然没有定义,将使用vi。编辑结束后,被编辑的命令将回显并执行。
第二种形式中,command在每个pat的实例被rep替换后都被重新执行。使用这种特性时可以起一个有用的别名: "r=fc -s", 这样输入"r cc"将运行最后的以"cc"开头的命令,输入"r",将重新执行上一个命令。
如果使用第一种形式,返回值是0,除非遇到了无效的选项,或first或last指定的历史行数超出了范围。如果给出了-e选项,返回值是最后执行的命令的返回值,或着是失败,如果临时文件中的命令执行出错。如果使用第二种形式,返回状态是重新执行的命令,除非cmd没有指定一个有效的历史行,这种情况下fc返回失败。
fg [jobspec]
将jobspec恢复至前台,使它成为当前作业。如果jobspec不存在,将使用shell意义上的当前作业。返回值是被放到前台的命令的状态,或者如果在禁用作业控制时运行则返回失败状态,或者在启用作业控制时运行,但jobspec没有指定有效的作业,或jobspec指定了没有使用作业控制启动的作业,也会发挥失败状态。
getopts optstring name [args]
getopts借助于shell程序来分析位置参数。optstring包含要识别的选项字符;如果某个字符后跟着冒号,那么这个选项需要有一个需要用空白字符和它隔离开的参数。冒号和问号字符不能用作选项字符。每次它被调用时,getopts将下一个选项放在shell变量name中,如果name不存在就将之初始化;下一个要处理的参数的索引放在变量OPTIND中。每次shell或shell脚本被调用的时候OPTIND被初始化为1。当某个选项需要参数时,getopts将那个参数放到变量OPTARG中。shell不会自动重置OPTIND;在使用相同的shell调用进行多次getopts调用期间如果使用了一系列新的参数的话它必须被手动重置。
当遇到选项结束的时候,getopts以大于0的值退出。OPTIND被设置为第一个非选项参数的索引,name被设置为?。
getopts通常分析位置参数,但是如果args中给出了更多参数,getopts将分析它们。
getopts能以两种方式报告错误。如果optstring的第一个字符是冒号,将使用安静的错误报告。通常的操作中,遇到非法选项或缺失选项的参数时将显示出诊断信息。如果变量OPTERR被设置为0,即使optstring的第一个字符不是冒号,也不会显示错误消息。
如果发现了一个非法的选项,getopts向name中置入问号,并且如果不是安静模式的话,显示错误消息并撤销变量OPTARG的定义。如果getopts是安静模式,找到的选项字符将置入OPTARG并且不显示诊断消息。
如果没有找到需要的参数,并且getopts不是安静模式,将向name置入一个问号,撤销OPTARG的定义,显示诊断消息。如果getopts是安静模式,那么将向name置入一个冒号并且OPTARG将设置为找到的选项字符。
如果找到了指定的或未被指定的选项,getopts返回真。如果遇到了选项结束或者发生了错误,它返回假。
hash [-lr] [-p filename] [-dt] [name]
每一次hash命令被调用时,name命令的完整路径名称会通过查找PATH变量中的目录进行判断并记录下来。而之前记录的路径名将被放弃。如果提供了-p选项,则不会进行路径查找,直接将filename作为命令的全路径名来使用。-r选项使得shell清除掉所有已记录的位置。-d选项使得shel清除掉已记录的每个name的位置。如果提供了-t选项,每个name相应的完整路径名被显示出来。如果给出多个name作为-t的参数,在哈希全路径名之前name就会被显示出来。-l选项使得输出以一种可以重用为输入的格式显示。如果没有给出参数,或者只给出了-l选项,已记录的命令的信息将被显示出来。除非name没有找到或给出了非法的选项,否则返回真。
help [-s] [pattern]
显示关于内置命令的帮助信息。如果指定了pattern,help给出关于所有匹配pattern的命令的详细帮助;否则所有内置命令的帮助和shell控制结构将被显示出来。
-d
显示每个pattern的简短描述信息。
-m
以man手册类的格式显示每个pattern的描述信息。
-s
仅显示每个pattern的简短的用法概要。
除非没有匹配pattern的命令,否则返回0。
history [n]
history -c
history -d offset
history -anrw [filename]
history -p arg [arg ...]
history -s arg [arg ...]
不带选项的话,显示带行号的命令历史列表。列出的行中含有*的是已经被修改过。参数n使得只显示最后n行。如果shell变量HISTTIMEFORMAT被设置并且为非空,它就会被当作一个格式字符串被用来显示能够关联到每一个被显示的历史条目的时间戳。在格式化的时间戳和历史行之间不会显示介于期间的空白字符。如果提供了filename,它被当做历史文件名而使用;如果没有的话,就使用HISTFILE的值作为历史文件名。如果提供了选项,则具有下列意义:
-c
清空历史列表,删除所有条目。
-d offset
删除offset位置的历史条目。
-a
将新的历史条目(自当前bash会话开始输入的历史命令)追加到历史文件中。
-n
将尚未从历史文件中读取的历史条目读入当前历史列表。这些行是当前bash会话开始之后,才追加到历史文件中的行。
-r
读取历史文件的内容,使用它们作为当前历史。
-w
将当前历史列表写入历史文件,覆盖历史文件的原有内容。
-p
对接下来的args进行历史替换,在标准输出上显示结果。不会将结果存入历史列表。每个arg都必须被引用,来禁止普通的历史展开。
-s
将args作为单独的条目保存到历史列表中。在args被添加到历史列表之前历史列表的最后一个命令被删除。
如果变量HISTTIMEFORMAT被设置,与每行历史条目相关的时间戳信息会被写到历史文件中,并使用历史注释标识符进行标记。在读取历史文件时,以历史注释标识符开始的后面直接跟数字的行被当作前面历史行的时间戳来解释。返回值为0,除非遇到了无效的选项,或者在读或写历史文件时发生错误,或者在-d的参数中给出了无效的offset,或者对-p的后续参数进行历史展开失败。
jobs [-lnprs] [ jobspec ... ]
jobs -x command [ args ... ]
第一种形式用来列出正在运行的作业。选项具有下列意义:
-l
在普通信息之外,列出进程ID。
-n
只显示从上次用户得知它们的状态之后,状态发生改变的作业的信息。
-p
只列出作业的进程组leader的进程ID。
-r
限制只输出正在运行的作业。
-s
限制只输出停止的作业。
如果给出了jobspec,输出仅限于此作业的信息。返回值为0,除非遇到了无效选项或提供了无效的jobspec。
如果提供了-x选项,作业jobs将用相应的进程组ID替换command或args中所有的jobspec,执行command,传递参数args给它并返回它的退出状态。
kill [-s sigspec | -n signum | -sigspec] [pid | jobspec] ...
kill -l [sigspec | exit_status]
向以pid或jobspec为名的进程发送名为sigspec或signum的信号。sigspec要么是一个大小写不敏感的类似SIGKILL的信号名称要么是一个信号编号;signum是一个信号编号。如果sigspec不存在,则SIGTERM被赋值。-l选项列表信号名称。如果在给出-l选项时提供了任何参数,对应参数的信号名称也会被列出,并且返回状态为0。如果sigspec是一个信号名称,那么可以有,也可以没有SIG前缀。如果没有给出sigspec,那么假设是SIGTERM。-l的exit_status参数是一个指定的数字。该数字要么是一个信号编号要么是被信号终止的进程的退出状态值。如果kill至少成功发送了一个信号则返回真;如果发生了错误或遇到了无效的选项,则返回假。
let arg [arg ...]
每个arg都是用于计算的算术表达式。如果最后一个arg计算值为0,let返回1;否则返回0。
local [option] [name[=value] ...]
对每个参数,local命令将创建一个名为name的局部变量并为之赋予值value。option可以是任何declare接受的选项。当local在函数内部使用时,它使得变量name作用范围局限于函数和它的子进程。没有操作数时,local将局部变量的列表写到标准输出。不在函数内部使用local会导致出错。其返回状态为0,除非在函数之外使用了local,或者指定了一个无效的name,或者name是一个只读的变量。
logout 退出登录shell。
mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
将标准输入的行读取到索引数组变量array中,如果提供了-u选项,也可以从文件描述符fd中读取。变量MAPFILE时默认的数组。如果提供了选项,有下列含义:
-n
只是复制count行。如果count为0,则赋值所有行。
-0
在索引的origin处开始为数组赋值。默认的索引号是0。
-s
丢弃读到的第一个count行。
-t
从每个被读的行中删除尾部的换行符。
-u
从文件描述符fd中读取行而不是从标准输入
-c
在每次调用callback期间为读到的行指定一个数字编号。
-C
-c选项指定的量子,每次量子行被读取时对callback求值。
如果-C选择被指定但是没有指定-c选项,默认的量子是5000。在callback被计算求值时,它提供了下一个被赋值的数组元素的索引,并且将赋值给某元素的行作为额外参数使用。在行被读取之后数组元素被赋值之前实现对callback求值。
如果没有提供一个明确的origin,mapfile命令会在赋值之前清除array。
mapfile返回成功除非提供了一个无效的选项或选项参数,array无效或未被赋值,或者如果array不是一个索引数组。
popd [-n] [+n] [-n]
从目录栈中删除条目。没有参数的话,从栈中删除顶层目录,执行cd切换到新的顶层目录。如果给出了参数,有下列的含义:
-n
在从目录栈中移除目录时,抑制目录的普通改变,因此只有栈是可被操纵的。
+n
删除由dirs显示出的列表中从左数第n个条目(从0算起)。例如:‘popd +0‘删除第一个目录,‘popd +1‘第二个。
-n
删除由dirs显示出的列表中从右数第n个条目(从0算起)。例如:‘popd -0‘删除最后一个目录,‘popd -1‘删除倒数第二个。
如果命令popd成功,也还要执行一个dirs,其返回值为0。如果遇到一个无效选项,或者目录栈为空,或者指定了一个栈中不存在的目录条目,或者目录改变失败,则popd返回假。
printf format [arguments]
在format控制下将格式化的arguments写到标准输出。-v选项使得输出被赋值给变量var而不是被显示在标准输出上。
format是一个包含三种类型的对象的字符串:被简单地复制到标准输出的纯字符,被转换并复制到标准输出的转义字符,使得后面连续的argument被一一显示出来的格式说明。在标准的printf(1)格式说明之外,printf解释下列扩展:
%b
使得printf在相应arguments中展开反斜杠转义序列(除非使用\c结束输出,在\‘,\"和\?中的反斜线不会被删除,使用\0开始的八进制逃逸符可能最多4个数字。)
%q
使得printf将相应的argument以一种可以重用为shell输入的格式输出。
%(datefmt)T
使得printf输出由使用datefmt作为strftime(3)的格式字符串而产生的日期-时间字符串。相应argument是一个代表了从纪元开始的秒数的整数。有两个特定的参数值可以使用:-1代表当前时间,而-2代表shell被调用的时间。
非字符串参数的格式说明符被当作C常量,除非允许前导一个加号或者是减号,并且如果前导字符是一个单引号或双引号,其值就是其后相邻字符的ASCII编码值。
format在需要时被重用以处理所有的arguments。如果format需要的arguments比所提供的更多,额外的格式说明会被适当地视为已经提供了的0值或空字符串。成功的话返回值是0,失败则是非0值。
pushd [-n] [dir]
pushd [-n] [+n] [-n]
将目录添加到目录栈顶,或者滚动栈中的内容,使当前工作目录成为目录新的栈顶。没有参数时,交换顶部两个目录,除非目录栈为空,返回0。如果提供了参数,它们有如下含义:
-n(选项)
在向栈中添加目录时阻止目录的正常改变,这时只对栈进行操作。
+n
滚动栈中内容,使得第n个(由dirs显示的列表中从左开始以0为起始值)目录处于栈顶。
-n
轮换栈中内容,使得第n个(由dirs显示的列表中从右开始以0为起始值)目录处于栈顶。
dir
添加dir到栈顶,使得它成为新的当前工作目录。
即使命令pushd成功,也要执行dirs。如果使用第一种形式,pushd返回0除非cd到dir失败了。使用第二种形式,pushd返回0,除非目录栈为空,或者指定了一个不存在的目录栈元素,或者目录改变成指定的新的当前目录失败。
0,除非目录栈为空,指定了目录栈中不存在的元素,或者 切换到指定的新的当前目录失败。
pwd [-LP]
显示当前工作目录的绝对路径名。如果提供了-P选项,或者内置命令set的-o physical选项被启用的话,显示出的路径名中不会包含符号链接。如果使用了-L选项,显示出的路径中可以包含符号链接。返回状态为0,除非在读取当前目录名时出错或提供了无效的选项。
read [-ers] [-u fd] [-t timeout] [-a aname] [-p prompt] [-n nchars] [-d delim] [name ...]
从标准输入读入一行,或从作为-u选项的参数所提供的文件描述符fd中读取,第一个词被赋值给第一个 name, 第二个词被赋予第二个 name, 以此类推,多余的词和其间的分隔符被赋予最后一个name。如果从输入流读入的词数比名称数少,剩余的名称被赋予空值。IFS中的字符被用来将行拆分成字。反斜杠字符被用于删除读取的下一字符的特殊含义,以及续行。如果给出了选项,将包含下列含义:
-a aname
将words赋值给数组变量aname连续的下标,从0开始。在对其赋新值之前,aname被未定义的。其他name参数被忽略。
-d delim
delim的第一个字符被用于结束输入行,而不是换行符。
-e
如果标准输入来自于终端,将使用行编辑功能来获得输入行。行编辑功能使用当前的编辑设定(如果行编辑在此之前是非活动的,则使用默认值)。
-i text
如果使用行编辑功能进行行的读取,text在编辑开始之前就将被放置到编辑缓冲区中。
-n nchars
read读入nchars个字符后返回,而不是一直等到输入一整行为止,但是如果在分隔符之前的内容少于nchars数量的字符,则以分隔符为主。
-N nchars
read读入nchars个字符后返回,而不是一直等到输入一整行为止,除非遇到EOF或read超时。在输入中遇到分隔符也不会做特殊处理并且直到nchars个字符串被读出才返回。
-p prompt
在尝试读取任何输入之前,在标准错误显示提示,末尾没有换行符。提示只有在输入来自终端时才会显示。
-r
反斜杠不作为转义字符。反斜杠被认为行的一部分。特别是反斜杠-换行符组合不再作为续行。
-s
安静模式。如果输入来自终端,字符将不会回显。
-t timeout
如果在timeout秒内没有读入完整的一行输入,将导致read超时并返回失败。timeout可以是一个跟在小数点之后带有小数部分的十进制数字。这个选项只有当read正在从终端读取输入信息时才有效。如果timeout是0,且如果在特殊文件描述符上的输入是可用的,read返回成功,否则返回失败。如果timeout溢出,退出状态是一个大于等于128的整数。
-u fd
从文件描述符fd中读取输入。
如果没有提供names,读取的一行将赋值给变量REPLY。返回值是0,除非遇到了EOF,read超时,或者给-u选项提供了一个无效的文件描述符作为参数。
readonly [-aAf] [-p] [name[=word] ...]
给出的name将被标记为只读的;这些names的值不能被后来的赋值语句改变。如果提供了-f选项,names对应的函数也被标记。-a选项限制变量只能是索引数组;-A选项限制变量为关联数组,如果这两个选项都提供出来了,-A选项的优先级更高。如果没有给出name参数,或者如果提供了-p选项,将显示所有只读名称的列表。其他的选项可以可用来限制输出到只读名称集合的子集。-p选项使得输出以一种可以被重新用作输入的格式显示。如果变量名后面紧跟着"=word",则该变量的值就会被设置为"word"。返回值是0,除非遇到了无效的选项,names之一不是有效的shell变量名,或选项-f中给出的name不是一个函数。
return [n]
使得一个函数以指定返回值n退出。如果忽略了n,返回状态是函数体中执行的最后一个命令的退出状态。如果在函数外使用,但是是在一个通过.(source)命令执行的脚本时,它使得shell中止执行脚本,返回n或脚本中执行的最后一个命令的退出状态。如果在函数外使用,并且不是通过.命令执行,返回状态为假。任何用RETURN捕捉器有关联的命令都在恢复执行之前在函数和脚本之后被执行。
set [--abefhkmnptuvxBCEHPT] [-o option-name] [arg ...]
set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]
不带选项时,每个shell变量的名称和值将以可以重用为输入的格式显示,用于设置或重置当前设置的变量。只读变量无法重置。在POSIX模式中,只显示shell变量。输出根据当前语言环境进行排序。在指定了选项时,它们设置或撤销了shell的属性。处理完选项之后剩余的任何参数都被当作位置参数的值并赋值,分别赋予$1, $2, ... $n. 如果提供了选项,那么具有以下含义:
-a
自动标记那些为了导出到随后命令的环境而被修改或被创建变量和函数。
-b
立即报告被终止的后台作业状态,而不是在下次主提示符前报告。只有在启用作业控制时才有效。
-e
如果是一个管道(被当做一个单独的简单命令),一个被封闭在括号中的子shell命令,或者作为由括号来封闭的命令列表的一部分而被执行的命令之一,立即以非0状态退出。如果失败是紧随着一个while或until关键字的命一部分令列表,跟在if或elif保留字后面的一部分测试,在&&或||列表中除了跟在随后面的&&或||后面的所有被执行的一部分命令,任何在管道中但非最后一个命令,或者如果命令的返回值被"!"取反,shell不退出。如果设置了关于ERR的捕获器,其在shell退出之前被执行。这个选项接受shell环境变量以及每个子shell单独的环境变量,并可能导致在子shell中执行所有命令之前退出子shell。
-f
禁止路径名展开。
-h
在为了执行命令而进行查找时,记住它们的位置。这是默认启用的。
-k
所有以赋值语句形式出现的参数都被放置在命令执行的环境中,不仅仅是前面的那些命令名。
-m
监视模式。作业控制被启用。这个选项在支持它的系统上对交互式shell来说默认是开启的。后台进程在单独的进程组中运行,结束时将显示出包含它们退出状态的一行信息。
-n
读取命令,但不执行他们。这可以用在检查shell脚本的语法错误。交互shell中它被忽略。
-o option-name
option-name可以是如下之一:
allexport
与-a相同。
braceexpand
与-B相同。
emacs
使用emacs风格的命令行编辑界面。除非shell以--noediting选项启动,否则这个选项在交互shell中默认启用。这也会影响用于read -e的编辑界面。
errexit
与-e相同。
hashall
与-h相同。
histexpand
与-H相同。
history
开启命令历史,这个选项在交互shell中默认启用。
ignoreeof
它的效果是好像已经执行了shell命令‘IGNOREEOF=10‘一样
keyword
与-k相同。
monitor
与-m相同。
以上是关于Linux操作系统基础解析之——Bash(Shell)基础知识的主要内容,如果未能解决你的问题,请参考以下文章
Linux操作系统基础解析之——Bash(Shell)基础知识
Linux操作系统基础解析之——Bash(Shell)基础知识
Linux操作系统基础解析之——Bash(Shell)基础知识
Linux操作系统基础解析之——Bash(Shell)基础知识