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 是 20 世纪 70 年代中期由 Stephen R. Bourne 在新泽西州的 AT&T Bell Labs 编写的。

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

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

本章将介绍大部分基于 Bourne Shell 的 Shell 概念。

Shell 脚本

Shell 脚本的基本概念是一个命令列表,这些命令按执行顺序排列。一个好的 shell 脚本将包含注释(以#符号开头),描述各个步骤。

它包含条件测试(例如,值 A 大于值 B)、循环(允许我们处理大量数据)、用于读取和存储数据的文件以及变量,并且脚本可能包含函数。

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

Shell 脚本和函数都是解释执行的。这意味着它们不会被编译。

示例脚本

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

#!/bin/sh

这告诉系统以下命令将由 Bourne shell 执行。它被称为 shebang,因为#符号称为哈希,而!符号称为感叹号

要创建一个包含这些命令的脚本,请先放置 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
$
广告