Unix 简明教程
Unix / Linux - What is Shells?
Shell 为您提供了 Unix 系统的接口。它会从您处收集输入,并根据该输入执行程序。当一个程序完成执行时,它会显示该程序的输出。
Shell 是一个环境,我们可以在其中运行我们的命令、程序和 shell 脚本。Shell 有不同的类型,就像操作系统有不同的类型一样。每种类型的 shell 都有一组自己识别的命令和功能。
Shell Prompt
提示符 $ (称为 command prompt )是由 shell 发出的。在提示符显示时,您可以键入一个命令。
在您按下 Enter 后,Shell 会读取您的输入。它通过查看您的输入的第一个单词来确定您想要执行的命令。一个单词是一组不间断的字符。空格和制表符用于分隔单词。
以下是一个 date 命令的简单示例,该命令显示当前日期和时间 −
$date
Thu Jun 25 08:30:19 MST 2009
您可以使用环境教程中说明的环境变量 PS1 来自定义您的命令提示符。
Shell Types
在 Unix 中,主要有两种类型的 shell −
-
Bourne shell − 如果您正在使用 Bourne 类型的 shell,则 $ 字符是默认提示符。
-
C shell − 如果您正在使用 C 型 shell,则 % 字符是默认提示。
Bourne Shell 有以下子类别 −
-
Bourne shell (sh)
-
Korn shell (ksh)
-
Bourne Again shell (bash)
-
POSIX shell (sh)
各种 C 型 shell 如下 −
-
C shell (csh)
-
TENEX/TOPS C shell (tcsh)
最初的 Unix shell 是由斯蒂芬·R·伯恩在 20 世纪 70 年代中期编写,当时他在新泽西的 AT&T 贝尔实验室工作。
Bourne Shell 是第一个出现在 Unix 系统上的 shell,因此它被称为“shell”。
Bourne Shell 通常安装为 /bin/sh ,用于大多数版本的 Unix。出于此原因,对于编写可以在不同版本的 Unix 上使用的脚本,它是首选 shell。
在本章中,我们将介绍基于 Borne Shell 的大多数 Shell 概念。
Shell Scripts
shell 脚本的基本概念是命令列表,这些命令按执行顺序列出。一个好的 shell 脚本将有注释,在前面加 # 符号,描述步骤。
有条件测试,例如值 A 大于值 B,循环允许我们遍历海量数据、文件来读取和存储数据,以及读取和存储数据的变量,并且该脚本可能包含函数。
我们将在下一节中编写许多脚本。它将是一个简单的文本文件,其中我们将放置所有命令和大量其他所需结构,告诉 shell 环境做什么以及何时执行。
Shell 脚本和函数都经过解释。这意味着它们未被编译。
Example Script
假设我们创建一个 test.sh 脚本。请注意,所有脚本都应具有 .sh 扩展名。在向脚本添加任何其他内容之前,您需要提醒系统正在启动 shell 脚本。使用 shebang 构造完成此操作。例如 −
#!/bin/sh
这告诉系统后续命令将由 Bourne Shell 执行。它被称为 Shebang,因为 # 符号称为井号,而 ! 符号称为惊叹号。
要在包含这些命令的脚本中,您首先放置 Shebang 行,然后再添加命令 −
#!/bin/bash
pwd
ls
Shell Comments
您可以按如下方式将注释放入脚本中 −
#!/bin/bash
# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:
pwd
ls
保存上述内容并使脚本可执行 −
$chmod +x test.sh
Shell 脚本现在可以执行 −
$./test.sh
执行后,您会收到以下结果 −
/home/amrood
index.htm unix-basic_utilities.htm unix-directories.htm
test.sh unix-communication.htm unix-environment.htm
Note − 要执行当前目录中可用的程序,请使用 ./program_name
Extended Shell Scripts
Shell 脚本有几个必需的构造,告诉 shell 环境做什么以及何时执行它。当然,大多数脚本都比上述脚本更复杂。
Shell 毕竟是一种真正的编程语言,具有变量、控制结构等。无论脚本多复杂,它仍然只是一个按顺序执行的命令列表。
以下脚本使用 read 命令,该命令从键盘获取输入并将其分配为 PERSON 变量的值,最后将其打印到 STDOUT。
#!/bin/sh
# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:
echo "What is your name?"
read PERSON
echo "Hello, $PERSON"
以下是脚本的一个示例运行 −
$./test.sh
What is your name?
Zara Ali
Hello, Zara Ali
$