Unix / Linux - 什么是 Shell?

Shell 为您提供 Unix 系统的接口。 它收集您的输入并根据该输入执行程序。 当程序完成执行时,它会显示该程序的输出。

Shell 是一个我们可以在其中运行命令、程序和 shell 脚本的环境。 有不同风格的 shell,就像有不同风格的操作系统一样。 每种风格的 shell 都有自己的一组可识别的命令和函数。


shell 提示符

$ 提示符,称为命令提示符,由shell 发出。 在显示提示时,您可以键入命令。

在您按下 Enter 后,Shell 会读取您的输入。 它通过查看输入的第一个单词来确定要执行的命令。 单词是一组完整的字符。 空格和制表符分隔单词。

下面是date命令的一个简单例子,显示当前日期和时间 −

$date
Thu Jun 25 08:30:19 MST 2009

您可以使用环境教程中介绍的环境变量 PS1 自定义命令提示符。


shell 类型

在 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 是 Stephen R. Bourne 在 20 世纪 70 年代中期在新泽西州的 AT&T 贝尔实验室工作时编写的。

Bourne shell 是第一个出现在 Unix 系统上的 shell,因此被称为"the shell"。

在大多数 Unix 版本上,Bourne shell 通常安装为 /bin/sh。 因此,它是编写可在不同版本的 Unix 上使用的脚本的首选 shell。

在本章中,我们将涵盖大多数基于 Borne Shell 的 Shell 概念。


Shell 脚本

shell 脚本的基本概念是命令列表,这些命令按执行顺序列出。 一个好的 shell 脚本会有注释,以 # 符号开头,描述步骤。

有条件测试,比如值A大于值B,循环让我们遍历海量数据,文件读取和存储数据,变量读取和存储数据,脚本可能包含函数 .

我们将在接下来的部分中编写许多脚本。 这将是一个简单的文本文件,我们将在其中放置所有命令和其他几个必需的结构,这些结构告诉 shell 环境做什么以及何时做。

Shell 脚本和函数都被解释。 这意味着它们没有被编译。


示例脚本

假设我们创建了一个test.sh 脚本。 请注意,所有脚本都将具有 .sh 扩展名。在向脚本中添加任何其他内容之前,您需要提醒系统一个 shell 脚本正在启动。 这是使用 shebang 构造完成的。 例如 −

#!/bin/sh

这告诉系统后面的命令将由 Bourne shell 执行。 之所以称为 shebang,是因为 # 符号称为散列,而 ! 符号称为 bang

要创建包含这些命令的脚本,请先放置 shebang 行,然后添加命令 −

#!/bin/bash
pwd
ls

Shell 注释

您可以将您的注释放在您的脚本中,如下所示 −

#!/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

注意 − 要执行当前目录中可用的程序,请使用 ./program_name


扩展 Shell 脚本

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
$