bash shell 的一些主要特性
Posted 达内云计算运维培训
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bash shell 的一些主要特性相关的知识,希望对你有一定的参考价值。
Tips:
达内Linux云计算本月免费课程开始喽,点击文末“阅读原文”快速抢!
上一篇文章:
推荐阅读:
bash shell 是可用于 Linux 的几个 shell 之一,也被称为 Bourne-again shell,是根据一个早期的 shell (/bin/sh) 的创建者 Stephen Bourne 来命名的。Bash 高度兼容 sh,但它在函数和编程功能上都提供了许多改进。它合并了来自 Korn shell (ksh) 和 C shell (csh) 的特性,想要成为一个符合 POSIX 的 shell。
在深入了解 bash 之前,回想一下 shell是一个接受和执行命令的程序。它还支持编程结构,允许使用更小的部件构建复杂的命令。这些复杂命令或 脚本可保存为文件,独自成为新命令。实际上,典型 Linux 系统上的许多命令 都是脚本。
Shell 有一些 内置命令,比如 cd、break和 exec。其他命令是 外部命令。
stdin是 标准输入流,它向命令提供输入。
stdout是 标准输出流,它显示来自命令的输出。
stderr是 标准错误流,它显示来自命令的错误输出。
输入流向程序提供输入,这些输入通常来自终端击键。输出流打印文本字符,通常打印到终端。终端最初为 ASCII 打字机或显示终端,但现在通常是图形桌面上的窗口。有关如何重定向这些标准 I/O 流的更多细节,将会在本 系列的另一篇教程中介绍。
的主要功能是解释您的命令,以便您可以与 Linux 系统交互。在 Linux(和 UNIX®)系统上,命令有一个 命令名,然后拥有 选项和 参数。一些命令既没有选项也没有参数,一些命令只有其中一种。
如果某一代码行包含一个 # 字符,那么该行上的所有剩余字符都会被忽略。所以 # 字符既可以表示注释,也可以表示根用户提示符。从上下文可以明显看出它应表示什么。
echo命令将其参数打印(或回送)到终端,如下所示。
Echo 示例
[root@opsexm ~]$ echo Word
Word
[root@opsexm ~]$ echo A phrase
A phrase
[root@opsexm ~]$ echo Where are my spaces?
Where are my spaces?
[root@opsexm ~]$ echo "Here are my spaces." # plus comment
Here are my spaces.
在上面的第 3 个示例中,所有额外的空格在输出中都被压缩为单个空格。为避免这种情况,需要使用双引号 (") 或单引号 (') 给字符串 加上引号。Bash 使用 空白(比如空格、制表符和换行符)将输入行分割为 记号 (token),然后传递给命令。给字符串加上引号会保留额外的空白,使整个字符串成为一个记号。在上面的示例中,命令名后的每个记号都是一个参数,所以我们分别有 1、2、4 和 1 个参数。
echo 命令有两个选项。通常,echo 会在输出的末尾处附加一个换行符。可使用 -n选项禁止此行为。可使用 -e选项让某些经过反斜杠转义的字符具有特殊的含义。一些字符如 下列表中所示。
转义字符序列 功能
\a 警报(闹钟)
\b 退格
\c 禁止结尾的换行符(等效于 -n 选项)
\f 换页(清除视频显示器上的屏幕)
\n 换行
\r 回车
\t 水平制表符
在 bash 中使用反斜杠有一个小问题。当为给反斜杠字符 (\) 加上引号时,它可以充当一个转义字符来告诉 bash 本身保留后面的字符的字面含义。这对特殊的 shell 元字符很有必要,我们稍后会介绍元字符。此规则有一个例外:反斜杠后跟一个换行符会导致 bash 合并两个字符,将该序列视为一个续行请求。这样可以很方便地分割较长的行,尤其是在 shell 脚本中。
要让 echo命令或其他许多使用类似转义控制字符的命令正确处理上述序列,必须将转义序列放在引号中,或者作为引号中的字符串的一部分,除非您使用了第二个反斜杠让 shell 将其中一个保留给命令。下面例子给出了 \ 的各种用法的一些示例。
更多 echo 示例
[root@opsexm ~]$ echo -e "No new line\c"
No new line[root@opsexm ~]$ echo "A line with a typed
> return"
A line with a typed
return
[root@opsexm ~]$ echo -e "A line with an escaped\nreturn"
A line with an escaped
return
[root@opsexm ~]$ echo "A line with an escaped\nreturn but no -e option"
A line with an escaped\nreturn but no -e option
[root@opsexm ~]$ echo -e Doubly escaped\\n\\tmetacharacters
Doubly escaped
metacharacters
[root@opsexm ~]$ echo Backslash \
> followed by newline \
> serves as line continuation.
Backslash followed by newline serves as line continuation.
请注意,当您键入的一行中包含不匹配的引号时,bash 会显示一个特殊提示符 (>)。您的输入字符串会延续到第二行,并包含换行符。
Bash 有多个 元字符,在未加引号时,它们的作用是将输入分解为单词。除了空格之外,元字符还包括:
|
&
;
(
)
<
>
我们将在本教程的其他部分更详细讨论其中一些元字符。但现在需要注意的是,如果想要包含元字符作为文本的一部分,则必须将它放在引号中或使用反斜杠 (\) 转义,如 下方例子中所示。
换行符和某些元字符或元字符对也可以用作 控制运算符。它们是:
||
&&
&
;
;;
|
(
)
这些控制运算符中的部分运算符可用于创建命令 序列或 列表。
最简单的命令序列是由一个分号 (;) 分开的两个命令。每个命令按顺序执行。在任何可编程环境中,命令都会返回成功或失败指示;Linux 命令通常返回 0 值表示成功,在失败时返回非 0 值。可以使用 && 和 || 控制运算符向列表中引入一些条件处理。如果使用控制运算符 && 将两个命令分开,当且仅当第一个命令返回退出值 0 时,才会执行第二个命令。如果使用 || 分离这些命令,那么只在第一个命令返回非 0 的退出代码时,才会执行第二个命令。清单 5给出了一些使用 echo 命令的命令序列。这些命令序列不是很有趣,因为 scho 返回了 0,但是在后面有更多命令可用时,您会看到更多例子。
[root@opsexm ~]$ echo line 1;echo line 2; echo line 3
line 1
line 2
line 3
[root@opsexm ~]$ echo line 1&&echo line 2&&echo line 3
line 1
line 2
line 3
[root@opsexm ~]$ echo line 1||echo line 2; echo line 3
line 1
line 3
Exit
可以使用 exit命令终止 shell。可以提供一个退出代码作为参数,此操作是可选的。如果在图形桌面上的终端窗口中运行 shell,您的窗口将会关闭。类似地,如果使用 ssh 或 telnet(举例而言)连接到远程系统,您的连接将终止。在 bash shell 中,还可以按住 Ctrl键并按下 d键来退出。
让我们看看另一个控制运算符。如果将一个命令或命令列表放在括号中,该命令或序列会在一个子 shell 中执行,所以 exit 命令会退出子 shell,而不是退出您所在的 shell。下方例子给出了一个结合使用 &&、|| 和两个不同的退出代码的示例。
[root@opsexm ~]$ (echo In subshell; exit 0) && echo OK || echo Bad exit
In subshell
OK
[root@opsexm ~]$ (echo In subshell; exit 4) && echo OK || echo Bad exit
In subshell
Bad exit
点击文末“阅读原文”,抓住4月学习的尾巴,免费报名,免费听课!
*来源:网络,有改动,侵删。
针对0基础系统培训的达内Linux云计算课程,点击“阅读原文”报名达内2017年免费课程,给自己一个挑战年薪30W的机会。
- END -
每年10万人选择达内教育
选择的人多,自然是好培训
长 按 二 维 码, 一 键 关 注
更多精彩文章 |
|
1 | |
2 | |
3 | |
4 | |
5 |
点击“阅读原文”抢报Linux云计算免费课程!
以上是关于bash shell 的一些主要特性的主要内容,如果未能解决你的问题,请参考以下文章