技术文档 Technical Docs百分努力只为换取一份信任

 当前位置:首页 > 资源下载 > 技术文档

Linux中bash文档翻译



BASH(1)通用命令手册BASH(1)


名称

bash - GNU Bourne-Again SHell


概要

bash [选项] [文件]


版权

Bash是自由软件基金会版权所有(C)1989-2011。




描述

Bash是一种兼容sh的命令语言解释器,它执行从标准输入或文件读取的命令。Bash还包含了有用的功能

Korn和C shell(ksh和csh)。


Bash旨在成为IEEE POSIX规范(IEEE标准1003.1)的Shell和Utilities部分的一致实现。Bash可以配置为

  默认情况下,POSIX符合。




OPTIONS

在调用shell时,set builtin命令描述中记录的所有单字符shell选项都可以用作选项。另外,bash

在调用时解释以下选项:


-c string如果存在-c选项,则从字符串中读取命令。如果在字符串后面有参数,则将它们分配给位置参数,从而开始

            0美元。

  -i如果存在-i选项,则shell是交互式的。

  -l使bash行为就像它作为登录shell一样被调用(参见下面的INVOCATION)。

  -r如果存在-r选项,则shell将受到限制(请参阅下面的RESTRICTED SHELL)。

  -s如果存在-s选项,或者在选项处理后没有参数,则从标准输入读取命令。此选项允许位置

            调用交互式shell时要设置的参数。

  在标准输出上打印所有以$开头的双引号字符串的-DA列表。这些是在语言翻译时需要进行语言翻译的字符串。



            租赁区域设置不是C或POSIX。这意味着-n选项; 没有命令会被执行。

  [ -  +] O [shopt_option]

            shopt_option是内置商店接受的shell选项之一(参见下面的SHELL BUILTIN命令)。如果存在shopt_option,则-O设置该值

            选项; + O取消它。如果未提供shopt_option,则shopt接受的shell选项的名称和值将打印在标准输出上。如果

            调用选项为+ O,输出以可以重用为输入的格式显示。



  -  A  - 表示选项结束并禁用进一步的选项处理。 - 之后的任何参数都被视为文件名和参数。一个论点 - 是

            相当于  - 。


  Bash还解释了许多多字符选项。在要识别单字符选项之前,这些选项必须出现在命令行上。


  --debugger

         安排在shell启动之前执行调试器配置文件。打开扩展调试模式(请参阅shopt的extdebug选项说明

         内置于下方)。



  自卸宝串

         相当于-D,但输出是GNU gettext po(便携式对象)文件格式。

  自卸串

         相当于-D。

  --help在标准输出上显示用法消息并成功退出。

  --init-file文件

  --rcfile文件

         如果shell是交互式的,则从文件而不是标准的个人初始化文件?/ .bashrc执行命令(参见下面的INVOCATION)。


  - 登录

         相当于-l。


  --noediting



         当shell是交互式时,不要使用GNU readline库来读取命令行。


  --noprofile

         不要读取系统范围的启动文件/ etc / profile或任何个人初始化文件?/ .bash_profile,?/ .bash_login或?/ .profile。默认情况下,

         当bash作为登录shell调用时,bash会读取这些文件(请参阅下面的INVOCATION)。


  --norc如果shell是交互式的,请不要读取和执行个人初始化文件?/ .bashrc。如果以sh调用shell,则默认情况下此选项处于启用状态。


  --posix



         更改bash的行为,其中默认操作与POSIX标准不同,以匹配标准(posix模式)。


  --restricted

         外壳受限制(见下面的限制外壳)。


  --rpm-要求

         生成shell脚本运行所需的文件列表。这意味着'-n'并且受到与编译时错误检查相同的限制

         检查; 不解析命令替换,条件表达式和eval内置,因此可能会遗漏某些依赖项。


  --verbose

         相当于-v。


  - 版

         在标准输出上显示此bash实例的版本信息并成功退出。




ARGUMENTS

如果在选项处理之后仍然存在参数,并且既未提供-c选项也未提供-s选项,则假定第一个参数是包含shell的文件的名称

命令。如果以这种方式调用bash,则将$ 0设置为文件名,并将位置参数设置为其余参数。Bash读取并执行

来自此文件的命令,然后退出。Bash的退出状态是脚本中执行的最后一个命令的退出状态。如果未执行任何命令,则退出状态为0。

首先尝试在当前目录中打开文件,如果没有找到文件,则shell在PATH中搜索脚本中的目录。






INVOCATION

登录shell是其参数零的第一个字符是 - 或者以–login选项开头的一个。


交互式shell是在没有非选项参数的情况下启动的,没有-c选项,其标准输入和错误都连接到终端(由

  isatty(3)),或者以-i选项开头的。如果bash是交互式的,则设置PS1和$  - 包括i,允许shell脚本或启动文件测试此状态。


  以下段落描述了bash如何执行其启动文件。如果存在任何文件但无法读取,则bash报告错误。Tildes在文件中扩展

  在扩展部分的Tilde扩展下面描述的名称。




  当bash作为交互式登录shell或作为具有--login选项的非交互式shell调用时,它首先从文件/ etc / profile中读取并执行命令,如果

  该文件存在。读取该文件后,它按顺序查找?/ .bash_profile,?/ .bash_login和?/ .profile,并从第一个文件中读取并执行命令

  存在且可读。启动shell以禁止此行为时,可以使用--noprofile选项。




  当登录shell退出时,如果文件存在,bash将从文件?/ .bash_logout和/etc/bash.bash_logout读取并执行命令。


  当启动不是登录shell的交互式shell时,如果该文件存在,bash将从?/ .bashrc读取并执行命令。这可以通过使用来抑制

  --norc选项。--rcfile文件选项将强制bash从文件而不是?/ .bashrc读取和执行命令。




  例如,当以非交互方式启动bash以运行shell脚本时,它会在环境中查找变量BASH_ENV,如果它出现在那里则展开其值,并且

  使用扩展值作为要读取和执行的文件的名称。Bash的行为就像执行了以下命令一样:

         if [-n“$ BASH_ENV”]; 然后 。“$ BASH_ENV”; 科幻

  但PATH变量的值不用于搜索文件名。




  如果使用名称sh调用bash,它会尝试尽可能接近地模仿sh的历史版本的启动行为,同时符合POSIX标准

  好。当作为交互式登录shell或带有--login选项的非交互式shell调用时,它首先尝试从/ etc / profile中读取和执行命令,

  ?/ .profile,按此顺序。--noprofile选项可用于禁止此行为。当作为名为sh的交互式shell调用时,bash会查找该变量

  ENV,如果已定义,则展开其值,并使用扩展值作为要读取和执行的文件的名称。因为以sh调用的shell不会尝试读取和执行

  来自任何其他启动文件的可爱命令,--rcfile选项无效。使用名称sh调用的非交互式shell不会尝试读取任何其他启动

  文件。当以sh调用时,bash在读取启动文件后进入posix模式。




  当bash以posix模式启动时,与--posix命令行选项一样,它遵循启动文件的POSIX标准。在此模式下,交互式shell扩展了ENV

  变量和命令从名称为扩展值的文件中读取和执行。没有读取其他启动文件。


  Bash尝试确定何时将其标准输入连接到网络连接,如远程shell守护程序(通常为rshd)或

  安全shell守护进程sshd。如果bash确定它以这种方式运行,它会从?/ .bashrc中读取并执行命令,如果该文件存在且可读的话。它会

  如果作为sh调用,则不要这样做。--norc选项可用于禁止此行为,--rcfile选项可用于强制读取另一个文件,但rshd不会

  通常使用这些选项调用shell或允许指定它们。




  如果以有效用户(组)id不等于真实用户(组)id启动shell,并且未提供-p选项,则不读取任何启动文件,shell函数

  tions不是从环境继承的,SHELLOPTS,BASHOPTS,CDPATH和GLOBIGNORE变量,如果它们出现在环境中,则被忽略,并且有效

  用户ID设置为真实用户ID。如果在调用时提供了-p选项,则启动行为相同,但不会重置有效用户标识。





定义

本文档的其余部分使用以下定义。

空白或空格。

单词由shell视为单个单元的字符序列。也称为令牌。

name仅由字母数字字符和下划线组成的单词,以字母字符或下划线开头。也称为标识符。





元字符

一个字符,当不加引号时,分隔单词。以下之一:

| &; ()<>空格标签

控制操作员

执行控制功能的令牌。它是以下符号之一:

|| &&&; ;; ()| |&





保留字

保留字是对shell具有特殊含义的字。以下单词在未加引号时被识别为保留,并且是简单命令的第一个单词

(参见下面的SHELL GRAMMAR)或案例的第三个词或命令:


!案例做完elif else esac fi for function如果在select中那么直到{{time] [[]]

1

SHELL GRAMMAR



简单的命令

一个简单的命令是一系列可选的变量赋值,后跟空格分隔的单词和重定向,并由控制操作符终止。第一个字

指定要执行的命令,并作为参数零传递。其余的单词作为参数传递给调用的命令。


简单命令的返回值是其退出状态,如果命令由信号n终止,则返回128 + n。

1



管道

管道是由一个控制操作符|分隔的一个或多个命令的序列 或|&。管道的格式是:


[时间[-p]] [!]命令[[|?|&] command2 ...]


  命令的标准输出通过管道连接到command2的标准输入。此连接在命令指定的任何重定向之前执行(请参阅

  下面的重定向)。如果使用|&,则命令的标准错误通过管道连接到command2的标准输入; 它是2>&1 |的简写。这隐含的重新

  在命令指定的任何重定向之后执行标准错误的反转。




  除非启用了pipefail选项,否则管道的返回状态是最后一个命令的退出状态。如果启用了pipefail,则管道的返回状态为

  以非零状态退出的最后一个(最右边)命令的值,如果所有命令都成功退出,则返回零。如果保留字!在管道之前,退出状态

  该流水线是如上所述的退出状态的逻辑否定。shell在返回值之前等待管道中的所有命令终止。


  如果时间保留字在管道之前,则在管道终止时报告其执行所消耗的经过时间以及用户和系统时间。-p选项

  将输出格式更改为POSIX指定的格式。当shell处于posix模式时,如果下一个标记以“ - ”开头,则它不会将时间识别为保留字。

  TIMEFORMAT变量可以设置为格式字符串,指定如何显示定时信息; 请参阅Shell变量下的TIMEFORMAT说明下面。




  当shell处于posix模式时,时间可以跟在换行符之后。在这种情况下,shell显示shell及其子级占用的总用户和系统时间。

  TIMEFORMAT变量可用于指定时间信息的格式。


  管道中的每个命令都作为单独的进程执行(即,在子shell中)。




清单

列表是由一个运算符;,&,&&或||分隔的一个或多个管道的序列,并且可选地以;,&或之一终止。


在这些列表运算符中,&&和|| 具有相同的优先权,其次是; 和&,具有相同的优先权。


  一个或多个换行符的序列可以出现在列表而不是分号中以分隔命令。


  如果命令由控制操作符&终止,则shell在子shell中在后台执行命令。shell不会等待命令完成,并且

  返回状态为0.命令由a分隔; 按顺序执行; shell等待每个命令依次终止。返回状态是退出状态执行的最后一个命令。




  AND和OR列表是由&&和||分隔的一个或多个管道的序列 分别控制运营商。AND和OR列表以左关联性执行。

  AND列表具有表单


         command1 && command2


  当且仅当command1返回退出状态为零时,才执行command2。


  OR列表具有表单


         command1 || 命令2


  当且仅当command1返回非零退出状态时才执行command2。AND和OR列表的返回状态是在中执行的最后一个命令的退出状态

  名单。





复合命令

复合命令是以下之一:


(list)列表在子shell环境中执行(参见下面的COMMAND EXECUTION ENVIRONMENT)。影响shell环境的变量赋值和内置命令可以

         命令完成后不会保持有效。返回状态是列表的退出状态。




  {list; }

         list只是在当前的shell环境中执行。列表必须以换行符或分号结尾。这称为组命令。返回状态

         是列表的退出状态。请注意,与元字符(和)不同,{和}是保留字,必须出现在允许保留字被识别的地方。

         识别的。由于它们不会导致单词分隔,因此必须通过空格或其他shell元字符将它们与列表分开。




  ((表达))

         根据ARITHMETIC EVALUATION下面描述的规则评估表达式。如果表达式的值不为零,则返回状态为0;

         否则返回状态为1.这与let“expression”完全相同。




  [[表达]]

         根据条件表达式表达式的求值,返回0或1的状态。表达式由CONDI-下面描述的原色组成 -

         TIONAL EXPRESSIONS。不对[[和]]之间的单词执行单词拆分和路径名扩展; 波浪扩展,参数和变量扩展,

         执行算术扩展,命令替换,进程替换和引用删除。诸如-f之类的条件运算符必须不加引号才能被识别

         作为初选。




         与[[,<和>运算符一起使用时,使用当前语言环境按字典顺序排序。


         当使用==和!=运算符时,运算符右侧的字符串被视为一个模式,并根据下面描述的模式进行匹配

         匹配。如果启用了shell选项nocasematch,则执行匹配而不考虑字母字符的情况。如果是字符串,则返回值为0

         匹配(==)或不匹配(!=)模式,否则为1。可以引用模式的任何部分以强制它作为字符串匹配。




         可以使用另一个二元运算符=?,其优先级与==和!=相同。使用时,运算符右侧的字符串被视为a

         扩展正则表达式并相应地匹配(如在正则表达式(3)中)。


如果字符串与模式匹配,则返回值为0,否则返回1。如果经常


         表达式在语法上是不正确的,条件表达式的返回值是2.如果启用了shell选项nocasematch,则执行匹配

         关于字母字符的情况。可以引用模式的任何部分以强制它作为字符串匹配。子字符串与括号内的子字符串匹配

         正则表达式中的压力保存在数组变量BASH_REMATCH中。索引为0的BASH_REMATCH元素是字符串匹配的部分

         整个正则表达式。索引为n的BASH_REMATCH元素是与第n个带括号的子表达式匹配的字符串部分。




         可以使用以下运算符组合表达式,按优先级递减顺序列出:


         (表达)

                返回表达式的值。这可以用于覆盖运算符的正常优先级。

         !表达

                如果表达式为false,则为True。

         expression1 && expression2

                如果expression1和expression2都为true,则为True。

         expression1 || 表达式2

                如果expression1或expression2为true,则为True。


         &&和|| 如果expression1的值足以确定整个条件表达式的返回值,则运算符不会计算expression2。


  名称[[in [word ...]]; ]列表; DONE



         扩展后面的单词列表,生成项目列表。变量名依次设置到该列表的每个元素,并且每次都执行列表。

         如果省略in字,for命令对每个设置的位置参数执行一次列表(参见下面的参数)。返回状态是退出状态

         执行的最后一个命令。如果后续项目的扩展导致空列表,则不执行任何命令,返回状态为0。


  for((expr1; expr2; expr3)); 做清单; DONE



         首先,根据算术评估下面描述的规则评估算术表达式expr1。然后算术表达式expr2进行评估

         反复进行,直到评估为零。每次expr2计算为非零值时,执行列表并计算算术表达式expr3。如果有的话

         表达式被省略,它的行为就好像它的计算结果为1.返回值是执行列表中最后一个命令的退出状态,如果是任何一个,则返回false

         表达式无效。




  选择名称[在单词]; 做清单; DONE

         扩展后面的单词列表,生成项目列表。扩展单词集打印在标准错误上,每个单词前面都有一个数字。如果

         在word中省略,打印位置参数(参见下面的参数)。然后显示PS3提示并从标准输入读取一行。如果

         line由与显示的单词之一对应的数字组成,然后name的值设置为该单词。如果该行为空,则单词和提示符为

         又玩了。如果读取EOF,则命令完成。读取的任何其他值都会将name设置为null。读取的行保存在变量REPLY中。清单是

         在每次选择之后执行,直到执行break命令。select的退出状态是列表中执行的最后一个命令的退出状态,如果没有,则为零

         mands被执行了。




  [[(] pattern [| pattern] ...)列表中的案例单词;; ] ... esac

         case命令首先扩展word,并尝试依次使用与路径名扩展相同的匹配规则将其与每个模式匹配(请参阅路径名扩展)

         下面)。使用波浪扩展,参数和变量扩展,算术替换,命令替换,过程替换和引用来扩展该词

         去除。检查的每个模式都使用波形扩展,参数和变量扩展,算术替换,命令替换和过程替换来扩展。

         形式予以。如果启用了shell选项nocasematch,则执行匹配而不考虑字母字符的情况。找到匹配后,相关

         执行自选列表。如果;; 使用运算符,在第一个模式匹配后不会尝试后续匹配。使用;代替;; 导致执行

         继续与下一组模式相关联的列表。使用;;代替;; 导致shell测试语句中的下一个模式列表(如果有)和

         在成功匹配时执行任何关联列表。如果没有模式匹配,则退出状态为零。否则,它是执行的最后一个命令的退出状态

         名单。




  如果列表; 然后列出; [elif list; 然后列出; ] ... [else list; ] fi

         执行if列表。如果其退出状态为零,则执行then列表。否则,每个elif列表依次执行,如果其退出状态为零,则

         执行相应的列表并完成命令。否则,执行else列表(如果存在)。退出状态是最后一个退出状态

         执行命令,如果没有条件测试,则为零。




  而list-1; 做list-2; DONE

  直到list-1; 做list-2; DONE

         只要列表list-1中的最后一个命令返回退出状态为零,while命令就会连续执行列表list-2。until命令是相同的

         到while命令,除了测试被否定; 只要list-1中的最后一个命令返回非零退出状态,就会执行list-2。退出状态

         while和until命令是list-2中执行的最后一个命令的退出状态,如果没有执行则返回零。




协进程

coprocess是一个shell命令,前面是coproc保留字。协同进程在子shell中异步执行,就像命令已以&结束一样

控制操作符,在执行的shell和协同进程之间建立双向管道。


协同进程的格式是:


         coproc [NAME]命令[重定向]


  这将创建一个名为NAME的协同进程。如果未提供NAME,则默认名称为COPROC。如果command是一个简单的命令,则不得提供NAME(见上文); 除此以外,



  它被解释为简单命令的第一个单词。执行coproc时,shell会在上下文中创建一个名为NAME的数组变量(请参阅下面的数组)

  正在执行的shell。命令的标准输出通过管道连接到执行shell中的文件描述符,该文件描述符分配给NAME [0]。

  命令的标准输入通过管道连接到执行shell中的文件描述符,并且该文件描述符被分配给NAME [1]。这个管道建立了

  在命令指定的任何重定向之前(请参阅下面的REDIRECTION)。文件描述符可以用作shell命令和使用标准的重定向的参数

  单词扩展。为执行协同进程而生成的shell的进程ID可用作变量NAME_PID的值。wait builtin命令可能用于

  等待协处理器终止。


  协同进程的返回状态是命令的退出状态。




壳函数定义

shell函数是一个被称为简单命令的对象,它使用一组新的位置参数执行复合命令。Shell函数声明为

如下:


name()compound-command [重定向]

  函数名[()]复合命令[重定向]

         这定义了一个名为name的函数。保留字功能是可选的。如果提供了功能保留字,则括号是可选的。的身体

         function是复合命令compound-command(参见上面的Compound命令)。该命令通常是{和}之间的命令列表,但可以是任何命令

         在上面的复合命令下列出。只要将name指定为简单命令的名称,就会执行compound-command。任何重定向(请参阅重定向

         在执行该功能时执行定义功能时指定的)。除非发生语法错误,否则函数定义的退出状态为零

         或者已经存在具有相同名称的只读函数。执行时,函数的退出状态是正文中执行的最后一个命令的退出状态。




评论

在非交互式shell中,或者在内置shopt的interactive_comments选项的交互式shell中(参见下面的SHELL BUILTIN命令),

使用#导致该行以及该行上的所有剩余字符被忽略。未启用interactive_comments选项的交互式shell不允许

评论。默认情况下,interactive_comments选项在交互式shell中处于启用状态



迪浮科技课程服务承诺:


1、免费重修:
学员缺课或者学校效果不理想,可以免费重修,确保课程内容完全掌握。重修过程中绝对不收取任何费用!
2、单独辅导:
如果学生在学习过程中,因各种原因无法跟班级进度同步,公司安排专家讲师一对一辅导,手把手带你成为IT精英!
3、自由实验:
清默网络有先进完善的实验中心,全天开放,实验机时不限,不断提高动手操作能力!
4、考试辅导:
学员考试前先通过清默内部模拟考试,技术确定达到考试要求并提供考前辅导及考试技巧讲解。
如果模拟考试未能通过,专家讲师会给予建议和辅导,合格后再参加正式考试,确保学员能高分通过认证考试。
5、企业实战项目:

即通过先进的设备完全搭建和企业项目完全一致的网络环境,把学习内容融会贯通并在实际项目中加以应用,以达到学员迅速掌握实际技能并弥补经验不足的目的,让学员的学习内容不再纸上谈兵,理论与实战完全吻合


咨询老师:郭老师

咨询电话:15056089769

咨询Q Q :1027831018