一、shell prompt(PS1) 命令行提示符
1. 游标(coursor)
当你成功登录进一个文字界面之后,大部份情形下,你会在荧幕上看到一个不断闪烁的方块或底线(视不同版本而别),我们称之为"游标"(coursor)。
游标的作用就是告诉你接下来你从键盘输入的按键所插入的位置,且每输入一键游标便向右边移动一个格子,若连续输入太多的话,则自动接在下一行输入。假如你刚完成登录还没输入任何按键之前,你所看到的游标所在位置的同一行的左边部份,我们称之为"提示符号"(prompt)。一般来说,就最接近游标的一个可见的提示符号来分析,通常是如下两者之一:
$:给一般使用者账号使用
#:给 root (管理员)账号使用
2. shell prompt的意义
shell prompt 的意思很简单是shell告诉使用者:您现在可以输入命令行了。
二、CR(Carriage Return,由Enter键产生),回车字符
CR 的意思也很简单:是使用者告诉shell:可以执行命令行了。
三、IFS(Internal Field Seperator)内部字段分隔符
把单个数据流划分成不同的数据元素的定界符,内部字段分隔符就是用于特定用途的定界符。可以由一个及多个如下按键组成:
- 空格键(White Space)
- 表格键(Tab)
- 回车键(Enter)
四、命令行
(1) 在shell prompt与CR字符之间所输入的文字。
(2) 一般情况下,一个标准的命令行格式为如下所列:
Command-name Options Argument
(3) shell会依据IFS将命令行所输入的文字给拆解为"字段"(word)。 然后再针对元字符(meta)先作处理,最后再重组整行命令行。
系统可接受的命令名称(command-name)可以从如下途径获得:
* 明确路径所指定的外部命令
* 命令别名(alias)
* 自定功能(function)
* shell 内建命令(built-in)
* $PATH 之下的外部命令
(4) 简单而言,命令行的每一个字符分为如下两种:
- literal:也就是普通纯文字,对 shell 来说没特殊功能。
- meta:对 shell 来说,具有特定功能的特殊保留字符。
literal 没甚么好谈的,凡举 abcd、123456 这些"文字"都是 literal
meta包括 :
- IFS:由space或tab或enter三者之一组成(我们常用 space )。
- CR:由enter产生。
IFS是用来拆解命令行的每一个词(word)用的,因为命令行是按词来处理的。而CR则是用来结束命令行用的。除了 IFS 与 CR ,常用的 meta 还有:
- = : 设定变量。
- $ : 作变量或运算替换(请不要与 shell prompt 搞混了)。
- > :重导向 stdout。
- < :重导向 stdin。
- |:命令管线。
- & :重导向 file descriptor ,或将命令置于后台执行。
- ( ):将其内的命令置于 nested subshell 执行,或用于运算或命令替换。
- { }:将其内的命令置于 non-named function 中执行,或用在变量替换的界定范围。
- ; :在前一个命令结束时,而忽略其返回值,继续执行下一个命令。
- && :在前一个命令结束时,若返回值为 true,继续执行下一个命令。
- || :在前一个命令结束时,若返回值为 false,继续执行下一个命令。
- !:执行 history 列表中的命令
五、参考
1. 《shell十三问》
(完)