Linux命令⾏帮助⽂档命令语法公式格式详解和Git命令语法格式解读(最详细解
释,关键词:。。。
1.问题背景
作为程序员的我们,在使⽤Linux或者Git命令时总会想了解某个命令的全部⽤法,我么⼀般会在命令末尾加上-h(h全称help)来获得帮助,或者是查看Linux或Git的帮助⽂档。⼀般我们-h给出的帮助和帮助⽂档中的帮助的排版都是这样的。
作为Linux和Git初学者的博主我,这么⼀长串的选项和参数到底怎么⽤?这些中括号[]和尖括号<>和竖杠|和省略号...到底都是啥意思呀?
这些语法规则难不是问题,最要命的是Linux和Git的官⽅帮助⽂档⾥⾯从来没有提到过这些语法公式!各类Linux和Git的⼊门教程+书籍
+⽹上博客教程+⼤学⽼师上课课程都不讲解这些语法公式,更变态的是这些教程都会说⼀句话:“如果想了解某条命令的⾼级使⽤,可以参考官⽅帮助⽂档”!于是⼜回到最初的Linux和Git的官⽅帮助⽂档,它⾥⾯没有提到任何这些语法公式!
作为程序员的我们,每次使⽤Linux或者Git命令时,肯定想知道每⼀条命令的具体写法的语法规则,因为⼀旦我们了解了语法规则,在阅读Linux教程和别⼈的Linux命令时能更好的理解这些命令。所以我在⽹上整理出了这篇最全⾯的Linux系统命令⾏终端命令语法格式。
⾸先我们需要知道,任何操作系统Windows,Linux,Mac上的Gitbash的Git命令都是是基于Linux的,所以我们把Linux的系统命令⾏终端命令语法格式掌握了,在GitBash中使⽤Git命令和阅读Git命令也会更顺畅,下⾯我将全⾯且详细地给予介绍。
2.前⾔
Linux和Git命令中的中括号[]和尖括号<>和竖杠|和省略号...其实都是根据⼀个规则制定的,这个规则便是。所有的Linux或Git的帮助⽂档的公式都是按照的语法规则来编写,因此我们了解清楚命令⾏界⾯描述语⾔Docopt就终于能读懂Linux和Git命令的帮助⽂档了!
下⾯的第3章节3.Linux帮助⽂档的编写规则:命令⾏界⾯描述语⾔Docopt就是对命令⾏界⾯描述语⾔Docopt的全⾯解释,其实这部分⼜臭⼜长,你可以直接跳过第3章节,直接观看第4章节4.命令的帮助⽂档-实例解析,遇到不理解的专业词汇再看⼀看第3章节3.Linux帮助⽂档的编写规则:命令⾏界⾯描述语⾔Docopt
3.Linux帮助⽂档的编写规则:命令⾏界⾯描述语⾔Docopt
(1)作⽤与定义
Docopt可以为命令⾏应⽤程序定义接⼝,并为其⾃动⽣成解析器。
Docopt⽤于描述程序接⼝的帮助消息和⼿册页中的约定,⽐如Linux和Git命令的帮助⽂档就是按照Docopt编写的。
Docopt中的接⼝描述就是这样⼀个帮助⽂档。我随便编造⼀个类似于Linux系统的海军的命运系统的帮助⽂档,来帮助你更好的理解:
Naval Fate.
Usage:
naval_fate ship new <name>...
naval_fate ship <name> move <x> <y> [--speed=<kn>]
naval_fate ship shoot <x> <y>
naval_fate mine (set|remove) <x> <y> [--moored|--drifting]
naval_fate -h | --help
naval_fate --version
Options:
-h --help    Show this screen.
--version    Show version.
--speed=<kn>  Speed in knots [default: 10].
--moored      Moored (anchored) mine.
-
-drifting    Drifting mine.
中⽂版的长这样,你应该看得更懂⼀些。请放⼼,命令格式都是没有改变的,所以看英⽂版和看中⽂版⼀样。
海军的命运.
⽤法:
海军的命运开船新的<;船的名字>...
海军的命运开船 <;船的名字> 移动到 <;坐标轴x> <;坐标轴y> [--速度=<;海⾥每⼩时>]
海军的命运开船开炮射击 <;坐标轴x> <;坐标轴y>
海军的命运⽔雷 (埋雷|清雷) <;坐标轴x> <;坐标轴y> [--停泊|--漂泊]
海军的命运 -h | --help
海军的命运 --版本
选项:
-h --help    展⽰这个帮助页⾯
--版本战术“海军的命运”的版本号.
--速度=<;海⾥每⼩时>  海⾥每⼩时 [默认值: 10].
--停泊停泊船(抛锚固定好船)时,对⽔雷进⾏操作.
--漂泊船在漂泊(开动)时,对⽔雷进⾏操作.
由上⾯的中⽂版的海军的命运系统的帮助⽂档,我们可以看出来这是海军对船的多种⽤法和选项,⽽Linux和Git命令的帮助消息和开放⽂档便是海军的命运系统的帮助⽂档的另⼀个版本罢了。你现在是不是感觉清晰多了?
该⽰例描述了可执⾏的naval_fate接⼝,它可以通过不同的命令组合(ship、new、move等)、选项(-h、–help、–speed=等)和位置参数(、、)来调⽤。该⽰例使⽤括号“[]”、parens“()”、管道“|”和省略号“…”来描述可选、必需、互斥和重复的元素。这些元素组成了有效的使⽤模式,每个元素都以程序的名称naval_fate开始。在使⽤模式下⾯,有⼀个带有描述的选项列表。它们描述了⼀个选项是否有短/长形式(-h,–help),⼀个选项是否有⼀个参数(–speed=),以及这个参数是否有⼀个默认值([default: 10])。docopt实现将提取所有这些信息并⽣成命令⾏参数解析器,当使⽤-h或–help选项调⽤程序时,
界⾯描述的⽂本将作为帮助消息显⽰。
(2)使⽤模式(使⽤⽅法)
发⽣在关键字使⽤(不区分⼤⼩写)和明显空⾏之间的⽂本被解释为使⽤模式列表。⽤法之后的第⼀个单词:被解释为程序的名称。下⾯是⼀个不接受命令⾏参数的程序的最⼩⽰例:
my_program
程序可以有⼏个模式列出与各种元素⽤来描述模式:
my_program command --option <argument>
my_program [<optional-argument>]
my_program --another-option=<with-argument>
my_program (--either-that-option | <or-this-argument>)
my_program <repeating-argument> <repeating-argument>...
下⾯将描述每个元素和构造。我们将使⽤单词“word”来描述由空格、“|”字符之⼀或“…”分隔的字符序列。
(A)参数(位置参数和选项的参数)
参数是命令的操作对象,⼀般⽂件、⽬录、⽤户和进程等可以作为参数被命令操作,⽤于指定选项操作的位置路径。
1. 位置参数<argument>或ARGUMENT
以“<”开头、以“>”结尾的单词和⼤写单词被解释为位置参数,如下⾯的host和port。
my_program <host> <port>
2. 选项的参数-o argument或--option=argument中的argument
紧跟在选项后⾯的参数,⽤于指定选项的操作对象。
(B)选项-o或--option
选项是包括⼀个或多个字母的代码,前⾯有⼀个“-”或"–"连字符,主要⽤于改变命令执⾏动作的类型。
选项⼜分为短格式选项(-l)和长格式选项(–all)。短格式选项是英⽂的简写,⽤⼀个减号调⽤,例如ls -a;⽽长格式选项是英⽂完整单词,⼀般⽤两个减号调⽤,例如ls --all。
⼀般情况下,短格式选项是长格式选项的缩写,也就是⼀个短格式选项会有对应的长格式选项。当然也有例外,⽐如 ls 命令的短格式选项 -l 就没有对应的长格式选项。所以具体的命令选项可以通过后⾯我们要学习的帮助命令来进⾏査询。
选项和参数连⽤的规则与注意事项
1. 短选项“-”可以以“堆叠”,意思三个选项-a -b -c可以写成-abc,并且他们作⽤等价。
2. 短选项可以在零~多个空格后指定参数,并且他们作⽤等价。-a file等价于-afile等价于-a(多个空格)file。
3. 短选项堆叠且在⼀个或多空格后指定参数的歧义性:不带空格指定参数的命令-afile存在歧义。因为⽆法判断-afile是多个堆叠的短选项-
a -f -i -l -e,还是选项-a带有参数file。⽽Linux碰到这种歧义命令的判定⽅案是:仅当提供了对选项的描述时,这些符号才会被解释为
带参数的选项(其实博主也不懂这句话具体啥意思,它的英⽂原⽂对这个歧义的解决⽅案就是这么模糊的描述。所以只能看有没有这种歧义的实例来做测试,才能给出具体的定义)。
4. 长选项可以在⼀个或多个空格或等于符号=后指定参数:如--input=ARG等价于--input ARG等价于--input(多个空格)ARG。
5. 短选项和长选项在⼀个或多空格后指定参数的歧义性:-a file和--input ARG存在歧义。因为⽆法判断file和ARG分别是短选项-a和长选
项--input的选项的参数还是位置参数。⽽Linux碰到这种歧义命令的判定⽅案是:在使⽤模式中,只有在提供了该选项的描述时,才会将其解释为选项和选项的参数。否则,它将被解释为选项和位置参数。(其实博主也不懂这句话具体啥意思,它的英⽂原⽂对这个歧义的解决⽅案就是这么模糊的描述。所以只能看有没有这种歧义的实例来做测试,才能给出具体的定义)。
6. 针对第3点和第5点提到的歧义性,作为程序员的我们,最好的解决⽅案是:规范书写命令来避免歧义。(1)书写带参数的短选项命
令时,最好写成-a(⼀个或多个空格)file来避免歧义;(2)书写带参数的长选项命令时,最好写成--input=ARG来避免歧义。
(C)命令
所有不遵循上述约定(A)和(B)的--options或<arguments>的其他单词都被解释为命令或⼦命令。
(D)[可选元素]
元素指的是:选项,参数,命令。
⽤⽅括号“[]”括起来的元素被标记为可选的,意思是:可以有该元素也可以没有该元素。元素是否包含在相同或不同的括号内并不重要,它们完全等价。例如:
my_program [command --option <argument>]
与下⾯的命令是等价的:
my_program [command] [--option] [<argument>]
因此不要误以为my_program [command --option <argument>]命令只有⼀下2种可能性:
children同义词
错误案例:
my_program [command --option <argument>]的所有可能性:
第⼀种可能性:my_program command --option argument
第⼆种可能性:my_program
博主我之前就被这⾥迷惑了,因为我总以为command --option <argument>这3个元素都在⼀个⽅括号[]⾥⾯,所以博主我错误地理解为:它们应该是要么全部出现,要么全部不出现。正确的情况是这3个元素都是分开的:
正确案例:
my_program [command --option <argument>]的所有可能性:
第⼀种可能性:my_program command --option argument
第⼆种可能性:my_program
第三种可能性:my_program command
linux操作系统书籍第四种可能性:my_program --option
第五种可能性:my_program argument
第六种可能性:my_program --option argument
第七种可能性:my_program command argument
第⼋种可能性:my_program command --option
(E)(必选元素)
默认情况下,所有元素都是必需的,如果不包括在括号“[]”中。然⽽,有时有必要根据需要显式地使⽤括号“()”标记元素。例如,当您需要对互斥元素进⾏分组时(参见下⼀节):
my_program (--either-this <and-that> | <or-this>)
另⼀个⽤例是,当您需要指定如果有⼀个元素存在,那么就需要另⼀个元素,您可以这样实现:
win10telnet命令怎么用
my_program [(<one-argument> <another-argument>)]
在这种情况下,有效的程序调⽤可以没有参数,也可以有两个参数。
(F)元素|其他
互斥的元素可以通过竖杠“|”进⾏分离,如下:
my_program go (--up | --down | --left | --right)
在需要互斥的情况下,使⽤括号“()”对元素进⾏分组。在不需要互斥的情况下,使⽤括号“[]”将元素分组: my_program go [--up | --down | --left | --right]
注意,指定⼏个模式的⼯作原理与竖杠“|”完全相同,即:
my_program run [--fast]
my_program jump [--high]
与下⾯的命令等价
my_program (run [--fast] | jump [--high])
(G)元素...
使⽤省略号“…”指定左边的参数(或⼀组参数)可以重复⼀次或多次:
my_program open <file>...
盐酸舍曲林分散片
my_program move (<from> <to>)...
您可以灵活地指定所需的参数数量。这⾥有3种(冗余的)⽅法来要求零或多个参数:
点到两点之间的直线内的距离matlabmy_program [<file>...]
my_program [<file>]...
my_program [<file> [<file> ...]]
⼀个或多个参数:
my_program <file>...
两个或更多参数:
my_program <file> <file>...
(H)[options]
“[options]”是⼀个快捷⽅式,它允许避免在模式中列出所有选项(从带有描述的选项列表中)。例如:
my_program [options] <path>
-
-all            List everything.
--long            Long output.
--human-readable  Display in human-readable format.
与下⾯的命令是等价的:
Usage: my_program [--all --long --human-readable] <path>
--all            List everything.
--long            Long output.
fopen ab
--human-readable  Display in human-readable format.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。