C Shell

2025年03月17日 | 阅读 9 分钟

引言

C shell (csh) 是 Unix 操作系统的一个接口,用户通过它在操作系统环境中工作并执行操作。它由比尔·乔伊于 20 世纪 70 年代末在加州大学伯克利分校开发,是至今仍在现代世界中使用的最古老的 Unix shell 之一。作为对第一个 Unix shell,即 Bourne shell 的摒弃,C shell 是最重要的 Unix shell 之一,与 Bourne shell 和 Korn shell 一起被列为三大最常用的 shell。

什么是 C Shell?

C shell 的默认 shell 程序是 csh,其命令提示符由符号 % 表示,表示机器可供用户输入命令。C shell 专为使用 C 编程语言的程序员设计,是一个符合人体工程学且可扩展的命令系统,由交互式命令行解释器和命令编程语言组成。要调用 C shell,您需要键入 - 'csh'。在登录后首次启动 shell 时,C shell 会搜索系统范围的启动文件 '/etc/csh' cshrc。

此文件对于 C shell 的有效运行至关重要,系统管理员有权适当配置环境。此外,C shell 具有交互式 CLI、多个内置命令、历史记录功能以及其他有助于命令行实现更好用户友好性的措施:作业控制机制。

例如,C shell 支持循环结构、条件结构和用于编写简单 C shell 脚本以及执行重复性任务的函数。它非常通用;可以根据用户文件中的设置指示它执行或不执行某个操作。

C shell 有几个衍生产品,其中之一是 tcsh (Tab C shell),它是 C shell 的增强版。Tcsh 具有历史替换(用于使用以前的类型命令)、拼写纠错以及单词补全等功能,即在您输入几个字母后按 Tab 键,它会补全整个单词。

C Shell 和 BASH

在命令结构以及速度或响应时间方面,C Shell 被证实优于 BASH,在以 '/' 开头的简单命令方面,C Shell 比 BASH 更快。

BASH (Bourne Again Shell) 管理的一切都是 Unix/Linux 环境中密集且经常委派的命令行界面 (CLI)。与 Bourne shell 类似,BASH 提供命令行编辑、增强的信号控制以及比 KSH 更复杂的全局匹配功能,这就是它在许多 shell 技术人员中受欢迎的原因。

C shell 和 BASH 的主要区别

  1. Shell 脚本功能:BASH 在 shell 脚本方面表现出色,它包含各种工具,可增强执行重复性任务和执行一般操作的能力。而 C shell 更接近于一个用于交互式使用的命令解释器,因为它缺少编写复杂 shell 脚本所需的一些功能。
  2. 信号处理:与旧版本相比,BASH 在信号处理能力方面具有增强功能,这使其更适合系统管理员和自动化类型的工作。这使系统管理员能够监视系统进程、备份系统以及执行作为系统管理员的所有其他关键操作。
  3. 用户界面:BASH shell:在命令行界面模式下,它具有受 Bourne shell 影响的命令 shell 语法和功能,尽管它在脚本编写和高级命令使用方面具有更强大的功能和灵活性。

C 中的 Shell 排序

Shell 排序是一种高效的排序技术,它使用 C 编程语言设计,用于对数组内容进行排序。它首先对列表中间隔较远的元素对进行排序,然后逐步缩小列表成员之间的间距。Shell 排序被认为是插入排序算法家族的一部分,同时它也被认为是一种能够以最短时间排序大量数据的算法;因此,Shell 排序被认为是计算机编程中排序的实用实现。

命令 Shell

命令 shell 类似于 MS-DOS 环境,可帮助复制、重命名、移动和删除文件,就像 macOS 上的 Finder 或 Windows 上的 Windows 资源管理器一样。它仍然与用户计算机的特定目录绑定;它允许用户与该目录中的内容进行交互并执行操作。文件系统是管理计算机上文件的基本工具,而命令 shell 特别重要,因为它们允许使用文本字符串处理文件。

Linux 中的 C Shell

作为类 Unix 操作系统,Linux 托管 csh 或 C shell 作为命令行解释器。C shell 在 Unix 和 Linux 环境中没有区别;它是一个方便的工具,为用户提供了类似的功能,以通过输入的命令处理操作系统。

C Shell 的特点

Linux C shell 具有的一些方面可以确保它在 Linux 环境中有用:以下是一些值得注意的特性

1. 交互式 Shell

  • C shell 允许系统输入命令,并充当用户友好的界面,用户可以直接向系统输入命令。
  • 它可以接受程序、处理数据,并且 I/O 控制和作业调度是与操作系统相关的特性。

2. 命令历史记录

  • C shell 具有向用户弹出最新执行命令的功能,用户可以重新提交相同的命令而无需重新输入。
  • 在他们使用期间,可以通过键盘快捷键或更详细的命令检索命令历史记录,这有助于最大限度地减少耗时的活动。

3. 作业控制

  • C shell 中的下一个重要功能是作业控制,这意味着可以同时运行和控制不同的进程。
  • 用户能够在后台启动进程、取消隐藏进程、使它们处于休眠状态、唤醒进程并在必要时终止进程。

4. 命令别名

  • 与用户特定 C shell 功能交互的一个示例是定义命令别名的能力,这意味着用户可以为某一行命令起一个昵称,或使用昵称调用命令。
  • 登录到 shell 后可以创建别名,alias 命令允许您键入一个简短的调用而不是长字符串。

5. 脚本语言

  • 事实上,作为 Unix shell 的扩展,C shell 不仅可以作为交互式命令解释器,还可以作为脚本语言。
  • 它展示了编程构造,例如变量和控制结构,其中涉及循环条件和函数。
  • 此功能使用户能够编写脚本以执行手动活动、构建独特命令的方法,并执行增强效率和多功能性的复杂活动。

6. 文件通配

  • 文件通配通常被称为文件扩展或通配符匹配功能,它允许您使用通配符功能指定文件模式。在使用 C shell 时,用户可以使用通配符选项,例如 *(表示任意数量的字符)和 ?(匹配任何单个字符)。
  • 此功能对于一次管理多个文件或对多个项目执行任何组操作非常有利。

7. 输入/输出重定向

  • C shell 支持使用命令重定向在 shell 中执行的任何命令的输入、输出和错误。
  • 对于输入数据,您可以从文件读取或使用 'input <filename>'。对于输出,您可以通过键入 'output >filename' 写入文件,或使用 'output |' 符号接受命令的输出并将其作为输入传递给另一个命令。

8. 命令替换

  • 命令替换是一个函数,它允许您将一个命令的输出作为其参数传递给另一个命令。
  • C shell 提供了两种用于命令替换的语法:在两种指示的方法中,第二种在使用反引号或 $() 语法方面似乎更灵活。
  • 这使得此功能在需要生成参数或命令输出然后将其传递给另一个命令的情况下非常有用。

9. Shell 变量

  • 它是原始 shell 的扩展版本,允许用户设置 shell 变量来存储和处理数据。
  • 可以使用 set 命令设置非易失性变量,一旦设置,可以通过 $ 前缀访问它们。
  • 它们可以包含字符串、数字或任何其他类型的数据,因此可以简单有效地用于存储值,以便在脚本或交互式会话中以后使用。

10. 交互式编辑

  • C shell 提供附加功能的另一个领域是命令行的交互式编辑和修改。
  • 它可以执行光标控制和通过按键操作不同命令的功能,以及调用历史记录。
  • 此功能提高了在此 shell 上输入或编辑命令的灵活性,并使其高效。

所有这些功能共同将 C shell 描述为 Linux 操作系统上命令行交互和脚本编写的灵活且分析强大的环境。

如何使用 C Shell?

要在 Linux 中使用 C shell (csh),请遵循以下步骤

打开终端模拟器

访问终端的一种方法是在 Linux 上打开终端模拟器。它通常位于应用程序中,可以通过键盘上的 Ctrl+Alt+T 打开。

安装 C Shell

要使用 csh,首先,我们必须使用终端上可用的包管理器将其安装在您的系统上。例如,在基于 Debian 的系统上,您可以使用

对于基于 Red Hat 的系统,您可以使用


C Shell

启动 C Shell

安装完成后,通过键入命令 csh 并按 Enter 键,或键入命令 tcsh 并按 Enter 键以启动扩展版本 tcsh 来开始新的 C shell 会话。

C Shell

交互式 Shell 会话

在终端中键入 csh 命令时,它将执行 C shell 交互式 shell 命令。% 符号表示 C shell 正在等待命令。

使用 C Shell

您现在可以根据您在特定日期需要使用 C shell 来键入命令并运行脚本。

在 Linux 中调用 C Shell 的不同方法

要在 Linux 中调用 C shell (csh),您可以使用以下语法

了解语法

  1. 交互式或脚本执行:shell 可以从文件或直接从 vi 终端使用键盘命令运行命令。C shell 由此命令启动,由 csh 表示。
  2. 启动文件:当您键入 csh 时,它会在您的主目录中查找脚本,并查找一个名为的文件。一个名为 cshrc 文件的脚本的位置,其中包含用户自定义数据,如果此文件存在,则运行命令。当 csh 作为登录 shell 启动时,这些文件包含从 .cshrc 和 .login 文件执行命令的脚本。
  3. 脚本执行:如果没有给出 -i、-c、-s 或 -t,并且给出了 [arguments] 文件,则 shell 会执行 [arguments] 中指示的脚本文件以及可选参数。最重要的是,脚本文件必须具有登录用户可读的权限,这一点非常重要。它通过在 shell 编译时严格遵守 root 设置的任何 setuid 和 setgid 参数来做到这一点。

结论

总而言之,C shell (csh) 确实仍然可以被认为是 Unix 和 Linux 环境中一个有用且有效的命令行界面,它具有许多优点,例如交互式命令行、脚本编写、历史列表、作业和分层 shell 编程结构。它为任务、文件处理以及对计算机系统上运行的进程进行交互式控制提供了实用方法。自 Unix 开发以来,C shell 仍然被使用有多种原因,例如它是为 C 程序员设计的,并且在当代计算场景中仍然对更广泛的任务和应用程序有效。