logo资料库

man bash 中文PDF 版.pdf

第1页 / 共87页
第2页 / 共87页
第3页 / 共87页
第4页 / 共87页
第5页 / 共87页
第6页 / 共87页
第7页 / 共87页
第8页 / 共87页
资料共87页,剩余部分请下载后查看
BASH(1) BASH(1) NAME bash - GNU Bourne-Again SHell (GNU 命令解释程序 “Bourne 二世”) 概述(SYNOPSIS) bash [options] [file] 版权所有(COPYRIGHT) Bash is Copyright (C) 1989-2002 by the Free Software Foundation, Inc. 描述(DESCRIPTION) Bash 是一个与 sh 兼容的命令解释程序,可以执行从标准输入或者文件中读取的 命令。 Bash 也整合了 Korn 和 C Shell (ksh 和 csh) 中的优秀特性。 Bash 的目标是成为遵循 IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2,可移植操作系统规约: shell 和工具) 的实现。 选项(OPTIONS) 除 了在 set 内建命令的文档中讲述的单字符选项 (option) 之外,bash 在启动 时还解释下列选项。 -c string 如果有 -c 选项,那么命令将从 string 中读取。如果 string 后 面 -i -l -r -s -D [-+]O [shopt_option] 如果有 -i 选项,shell 将交互地执行 ( interactive )。 选项使得 bash 以类似登录 shell (login shell) 的方式启动 (参见 如果有 -r 选项,shell 成为受限的 ( restricted ) (参见下面的 如果有 -s 选项,或者如果选项处理完以后,没有参数剩余,那么 命 向标准输出打印一个以 $ 为前导的,以双引号引用的字符串列表。这 令将从标准输入读取。这个选项允许在启动一个交互 shell 时可以设 置位置参数。 是 在当前语言环境不是 C 或 POSIX 时,脚本中需要翻译的字符串。 这个选项隐含了 -n 选项;不会执行命令。 shopt_option 是一个 shopt 内建命令可接受的选项 (参见 下 面 的 shell 内 建 命 令(SHELL BUILTIN COMMANDS) 章节)。如果有 有参数 (argument),它们将用于给位置参数 (positional parameter ,以 $0 起始) 赋值。 受限的 shell(RESTRICTED SHELL) 章节)。 下面的 启动(INVOCATION) 章节)。
为文件名和参数对待。参数 - 与此等价。 等价于 -D,但是输出是 GNU gettext po (可移植对象) 文件格式 如 果 shell 是交互的,执行 file 中的命令,而不是标准的个人初始化 文件 ~/.bashrc (参见下面的 启动(INVOCATION) 章节) shopt_option,-O 将设置那个选项的取值; +O 取消它。如果没有给 出 shopt_option,shopt 将在标准输出上打印设为允许的选项的名称 和值。如果启动选项是 +O,输出将以一种可以重用为输入的格式显示 。 -- 标志选项的结束,禁止其余的选项处理。任何 -- 之后的参数将作 -- Bash 也解释一些多字节的选项。在命令行中,这些选项必须置于需要被识别的单 字符参数之前。 --dump-po-strings --dump-strings --help 在标准输出显示用法信息并成功退出 --init-file file --rcfile file --login --noediting --noprofile --norc 如果 shell 是交互的,不读取/执行个人初始化文件 ~/.bashrc 这个选 --posix --restricted 如果默认操作与 POSIX 1003.2 标准不同的话,改变 bash 的行为来符合 标准 (posix mode) 不读取系统范围的启动文件 /etc/profile 或者任何个人初 始 化 文 件 ~/.bash_profile, bash 在作为登录 shell 启动时读取这些文件 (参见下面的 启 动(INVO- CATION) 章节) 或 ~/.profile 。默认情况下, ~/.bash_login, 等价于 -D 等价于 -l 如果 shell 是交互的,不使用 GNU readline 库来读命令行 项在 shell 以 sh 命令启动时是默认启用的
shell 成为受限的 (参见下面的 受限的 shell(RESTRICTED SHELL) 章节) 产生一个为使脚本运行,需要的文件的列表。这个选项包含了 -n 选项。 它 是为了避免进行编译期错误检测时的限制-- Backticks, [] tests, 还有 evals 不会被解释,一些依赖关系可能丢失 --rpm-requires --verbose --version 参数(ARGUMENTS) 如果选项处理之后仍有参数剩余,并且没有指定 -c 或 -s 选项,第一个参数 将 假 定 为一个包含 shell 命令的文件的名字。如果 bash 是以这种方式启动的, $0 将设置为这个文件的名字,位置参数将设置为剩余的其他参数。 Bash 从这个 文 件中读取并执行命令,然后退出。 Bash 的退出状态是脚本中执行的最后一个 命令的退出状态。如果没有执行命令,退出状态是 0。尝试的步骤是先试图打开在 当 前目录中的这个文件,接下来,如果没有找到,shell 将搜索脚本的 PATH 环 境变量中的路径。 启动(INVOCATION) login shell 登录 shell,参数零的第一个字符是 - ,或者 启 动 时 指 定 了 --login 选项的 shell。 interactive 交互的 shell,是一个启动时没有指定非选项的参数,并且没有指 定 -c 选项,标准输出和标准输入都连接到了终端 (在 isatty(3) 中 判 定) 的 shell ,或者启动时指定了 -i 选项的 shell。如果 bash 是交互的, PS1 环 境变量将被设置,并且 $- 包含 i ,允许一个 shell 脚本或者一个启动文件 来 检测这一状态。 下 列段落描述了 bash 如何执行它的启动文件。如果这些启动文件中的任一个存 在但是不可读取, bash 将报告一个错误。文件名中的波浪号 (~,tilde) EXPANSION 章节中 Tilde Expansion 段描述的那样展开。 当 bash 是作为交互的登录 shell 启动的,或者是一个非交互的 shell 但是指 定了 --login 选项,它首先读取并执行 /etc/profile 中的命令,只要那个文件 存 在 。 读 取 那 个 文 件 之 后 , 它以如下的顺序查找 ~/.bash_profile, ~/.bash_login, 和 ~/.profile, 从存在并且可读的第一个文件中读取并执行 其 等价于 -v 在标准输出显示此 bash 的版本信息并成功退出。 将 像
中的命令。 --noprofile 选项可以用来在 shell 启动时阻止它这样做。 当一个登录 shell 退出时, bash 读取并执行文件 ~/.bash_logout 中的命令, 只要它存在。 当一个交互的 shell 但不是登录 shell 启动时, bash 从文件 ~/.bashrc 中读 取 并 执行命令,只要它存在。可以用 --norc 选项来阻止它这样做。 --rcfile file 选项将强制 bash 读取并执行文件 file 中的命令,而不是 ~/.bashrc 中 的。 当 bash 以非交互的方式启动时,例如在运行一个 shell 脚本时,它在环境中查 找变量 BASH_ENV ,如果它存在则将它的值展开,使用展开的值作为一个文件 的 名称,读取并执行。 Bash 运作的过程就如同执行了下列命令: if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi 但是没有使用 PATH 变量的值来搜索那个文件名。 如 果 bash 以名称 sh 启动,它试图模仿 (mimic) sh 历史版本的启动过程,尽 可能地相似,同时也遵循 POSIX 标准。当作为交互式登录 shell 启动时,或者是 非 交 互 但 使 用 了 --login 选项启动的时候,它首先尝试读取并执行文件 /etc/profile 和 ~/.profile, 中的命令. 选项 --noprofile 用于避免这种 行 为.当使用命令 sh 来启动一个交互式的 shell 时, bash 查找环境变量 ENV, 如 果有定义的话就扩展它的值,然后使用扩展后的值作为要读取和执行的文件 的 名 称. 由 于 使 用 --rcfile 没有意义.使用名称 sh 启动的非交互的 shell 不会读取任何其他启动 文件.当以 sh 启动时, bash 在读取启动文件之后进入 posix 模式. 当 bash 以 posix 模式启动时,(和使用 --posix 命令行参数效果相同),它遵循 POSIX 标准. 这种模式下,交互式 shell 扩展 ENV 环境变量的值,读取并执行以 扩展后值为文件名的配置文件. 不会读取其他文件. Bash 试着检测它是不是由远程 shell 守护程序,通常为 rshd 启动的.如果 bash 发现它是由 rshd 启动的,它将读取并执行 ~/.bashrc 文件中的命令, 只要这 个 文件存在并且可读.如果以 sh 命令启动,它不会这样做. 选项 --norc 可以用来 阻止这种行为,选项 --rcfile 用来强制读取另一个文件,但是通常 rshd 不会 允 许它们, 或者用它们来启动 shell. 如果 shell 是以与真实用户(组) id 不同的有效用户(组) id 来启动的, 并且没 有 - 选项,那么它不会读取启动文件, 也不会从环境中继承 shell 函数. 环境变 量中如果出现 SHELLOPTS,它将被忽略.有效用户 id 将设置为真实用户 id. 如 果 启 sh 启动的 shell 不会读取和执行任何其他的启动文件,选项 了 - 动 时 给 出
一个空格或是 tab . & ; ( ) < > space tab 一个 token(标识), 拥有控制功能. 它是如下符号之一: || & && ; ;; ( ) | 一个只由字母,数字和下划线构成的词,并且以字符或下划线起始. 也称为 一个 word identifier 标识符. 一个字符, 如果不是引用的话, 将成为词的分隔符. 它是如下字符之一: | 选项,那么启动时的行为是类似的, 但是不会重置有效用户 id. 定义(DEFINITIONS) 下列定义在文档余下部分中通用. blank 空白 word 词 一个字符序列, shell 将它们视为一个结构单元. 也称为一个 token 片段 。 name 名称 metacharacter 元字符 control operator 控制操作符 保留字("RESERVED WORDS") Reserved 的, 如果不是引用, 并且不是一个简单命令的起始词 (参见 下 面 的 shell 语 法("SHELL GRAMMAR") ), 也不是 case 或者 for 命令的第三个词: ! case while { } time [[ ]] shell 语法("SHELL GRAMMAR") Simple Commands 简单命令 simple command(简单命令) 是(可选的)一系列变量赋值, 紧接着是 blank(空格) 分隔的词和重定向, 然后以一个 control operator 结束. 第一个词指明了要执 行的命令, 它被作为第 0 个参数. 其余词被作为这个命令的参数. simple command 简单命令的返回值是它的退出状态, 或是 128+n, 如果命 令 被 signal(信号) n 结束的话. Pipelines 管道 pipeline(管道) 是一个或多个命令的序列,用字符 | 分隔。管道的格式是这样: words( 保留字) 是对 shell 有特殊意义的词. 下列词被识别为保留 do done elif else esac fi for function if in select then until [time [-p]] [ ! ] command [ | command2 ... ]
命令 command 的标准输出通过管道连接到命令 command2 的标准输入。连接是在 命令指定的任何重定向之前进行的(参见下面的 REDIRECTION 重定向)。 如 果保留字 ! 作为管道前缀,管道的退出状态将是最后一个命令的退出状态的 逻辑非值。否则,管道的退出状态就是最后一个命令的。 shell 在返回退出状态 值之前,等待管道中的所有命令返回。 如 果保留字 time 作为管道前缀,管道中止后将给出执行管道耗费的用户和系统 时间。选项 -p 将使输出符合 POSIX 指定的格式。环境变量 TIMEFORMAT 可以设 置 为 一 个格式字符串,指定时间信息应当如何显示;参见下面的 Shell Vari- ables 环境变量中 TIMEFORMAT 的讲述。 管道中的每个命令都作为单独的进程来执行(即,在一个子 shell 中启动)。 Lists 序列 list(序列)是一个或多个管道,用操作符 ;, &, &&, 或 ││ 分隔的序列, 并且可 以选择用 ;, &, 或 新行符结束. 这些序列操作符中, && 和 ││ 优先级相同,其次是 ; 和 &, 它们的优先级是相 同的。 序列中可以有一个或多个新行符来分隔命令,而不是使用分号分隔。 如果一个命令是由控制操作符 & 结束的, shell 将在后台的子 shell 中执行 这 个 命令。 shell 不会等待命令执行结束,返回状态总是 0。以分号 ; 分隔的命 令会被顺序执行;shell 会等待每个命令依次结束。返回状态是最后执行的命 令 的返回状态。 控制操作符 && 和 ││ 分别代表 AND 和 OR 序列。一个 AND 序列的形式是 command2 只有在 command1 返回 0 时才被执行。 一个 OR 序列的形式是 command1 ││ command2 command1 && command2
的内建命令在命令结束后不会再起作用。返回值是序列的返回值。 不同, { 和 } 是 reserved words(保留字),必须 expression 将被求值。求值规则在下面的 算术求值 (ARITH- 表 达 式 METIC EVALUATION) 章节中描述。如果表达式的值非零,返回值就是 0; 否则返回值是 1。这种做法和 let "expression" 等价。 list 序列将在当前 shell 环境中执行。序列必须以一个新行符或分号结 束。这种做法也称为 group command(命令组)。返回值是序列的返回值。 注意与元字符 ( 和 出现在能够识别保留字的场合。由于它们不会产生断 词(cause a word break),它们和序列之间必须用空格分开。 command2 只有在 command1 返回非 0 状态时才被执行。AND 和 OR 序列的返回 状态是序列中最后执行的命令的返回状态。 Compound Commands 复合命令 compound command(复合命令) 是如下情况之一: (list) list 序列将在一个子 shell 中执行。变量赋值和影响 shell 环境变 量 { list; } ((expression)) [[ expression ]] 返 回 0 或 1,取决于条件表达式 expression 求值的情况。表达式是由 下面 CONDITIONAL EXPRESSIONS 条件表达式章节中描 述 的 原 语(pri- maries) 组成。 [[ 和 ]] 中的词不会进行词的拆分和路径的扩展处理; 而 tilde 扩展,参数和变量扩展,算术扩展,命令替换,函数替换和引用 的去除则都将进行。 当使用 == 和 != 操作符时,操作符右边的字符串被认为是一个模式,根 据下面 Pattern Matching(模式匹配) 章节中的规则进行匹配。如果匹配 则返回值是 0,否则返回 1。模式的任何部分可以被引用,强制使它作为 一个字符串而被匹配。 表达式可以用下列操作符结合起来。根据优先级的降序列出如下: ( expression ) 返回表达式 expression 的值。括号可以用来提升操作符的优 先 级。 ! expression 返回真,如果表达式 expression 返回假。
返回真,如果表达式 expression1 和 expression2 都返回真。 返 回真,如果表达式 expression1 或者 expression2 二者之一 返回真。 &&(与) 和 || 操作符不会对表达式 expression2 求值,如 果 expres- sion1 可以决定整个条件表达式的返回值的话。 in 之后的一系列词会被扩展,产生一个项目列表。变量 name 被依次赋 以这个列表中的每个元素,序列 list 每次都被执行。如果 in word 被 忽略,那么 for 命令遍历已设置的位置参数(positional parameter,参 见下面的 PARAMETERS 参数),为每一个执行一次序列 list。返回值是最 后一个命令的返回值。如果 in 之后的词扩展的结果是空列表,就不会执 行任何命令,返回值是 0。 首先,算术表达式 expr1 被根据下面 算术求值 (ARITHMETIC EVALUA- TION) 中的规则进行求值。然后算术表达式 expr2 被循环求值,直到它 等于 0。每次 expr2 结果非零时,序列 list 都被执行,算术 表 达 式 expr3 被求值。如果任何表达式被忽略,将被视为执行结果是 1。返回值 是序列 list 中被执行的最后一个命令的返回值;或者是 false,如果任 何表达式非法的话。 expression1 && expression2 expression1 || expression2 for name [ in word ] ; do list ; done for (( expr1 ; expr2 ; expr3 )) ; do list ; done select name [ in word ] ; do list ; done case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac in 之后的一系列词会被扩展,产生一个项目列表。这个扩展后的词集合 被输出到标准错误上,每个前面加上一个数字。如果 in word 被忽略 , 将输出位置参数 (参见下面的 PARAMETERS 参数章节)。 PS3 提示符将被 显示出来,等待从标准输入得到一行输入。如果输入是一个数字且显示中 有对应的词,那么变量 name 的值将设置为这个词。如果输入一个空行, 那么词和提示符将再次显示出来。如果读入了一个 EOF,命令就结束。任 何 其 他 值将设置变量 name 为空。读入的行保存为变量 REPLY. 序列 list 在每次选择之后都会执行,直到执行了一个 break 命令。 select 的退出状态是序列 list 中执行的最后一个命令的退出状态,如果没有执 行命令就是 0。 case 命令首先扩展 word, 然后依次试着用每个 pattern 来匹配它, 使 用 与路径扩展相同的匹配规则(参见下面的 Pathname Expansion 路径扩
分享到:
收藏