Shell

NPUDevCode/LinuxShell at main · murphyhoucn/NPUDevCode

Shell Intro

Shell 是一个用 C 语言编写的程序,通过 Shell 用户可以访问操作系统内核服务。

Shell 既是一种命令语言,又是一种程序设计语言。

Shell script 是一种为 shell 编写的脚本程序。Shell 编程一般指 shell 脚本编程,不是指开发 shell 自身。

Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

Shell in different OS

『Shell』 =『图形用户界面(GUI)shell』 + 『命令行界面(CLI)的 shell』

图形用户界面(GUI)shell

MacOS 的 shell

  • 『Finder / 访达』: 在 MacOS 中,能让用户管理文件、文件、磁盘、网络,以及启动其他的应用程序的引用程序。

Linux 的 shell

  • 『X窗口管理器』: 独立的 X窗口管理器,例如 BlackboxFluxbox

  • 『Desktop Environment / 桌面环境』: 桌面环境是依靠于窗口管理器的的扩展实现。如 KDEGNOMEXfceDDE

Windows 的 shell

  • 『Explorer / 文件资源管理器』: 此操作系统中浏览电脑中文件与文件夹结构的基本工具,win + E 快捷键呼出。

  • 『开始菜单』: 屏幕的左下角菜单, win 键呼出。

  • 『DOS Shell』: 1998 年发布于 MS-DOS 的文件管理器,是终端里面生成的可视化界面。

image-20250606192017878

image-20250606192032504

命令行界面(CLI)的 shell

MacOS / Linux 的 shell

  • 『sh / Bourne shell』: 1977 在 Version 7 Unix 上的默认 shell。
  • 『Bash』: 名称由来 Bourne-Again SHell,在 GNU 计划中,于 1989 发布于第一个版本,是 sh 的兼容的开源的续作。亦是 Linux 和 MacOS (含10.14之前)的默认 shell。
  • 『Z shell / Zsh』: 是 sh + bash + 扩展功能。自2019 年起,MacOS 的默认 Shell 已从 『Bash 』改为『Zsh』。

Windows 的 shell

  • 『命令提示符 / cmd.exe』:是 Win32 应用程序,取代『COMMAND.COM』。Windows命令提示符(cmd.exe) 是 Windows NT 下的一个用于运行 Windows 控制台程序或某些 DOS 程序的壳层程序;注释
  • 『PowerShell』 : 包括 ①Windows PowerShel + ②PowerShell Core ,基于 .NET 框架开发,自 2016 年后开源且跨平台。① 为前四年的版本,仅支持 Win 平台;② 则是其演进,支持跨平台 Linux 和 Mac。注释
  • 『COMMAND.COM』: 是一个16位的 DOS 应用程序。已经被 命令提示符(cmd.exe) 取代在 MS-DOS、Windows 95、Windows 98、Windows 98SE 和 Windows Me 上的默认命令行界面。

Linux Shell

Linux 的 Shell 解释器 种类众多,一个系统可以存在多个 shell,可以通过 cat /etc/shells 命令查看系统中安装的 shell 解释器。

Bash 由于易用和免费,在日常工作中被广泛使用。同时,Bash 也是大多数 Linux 系统默认的 Shell。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 通过 cat 命令来查看当前 Linux 系统的可用 Shell:
(base) houjinliang@4090server2:~$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/usr/bin/sh
/bin/dash
/usr/bin/dash
/usr/bin/tmux
/usr/bin/screen

# 部分shell的全称
# Bourne Shell(sh)
# Bourne Again shell(bash)
# C Shell(csh)
# TENEX C Shell(tcsh)
# Korn shell(ksh)
# Z Shell(zsh)
# Friendly Interactive Shell(fish)

# 查看当前 Linux 的默认 Shell,那么可以输出 SHELL 环境变量:
(base) houjinliang@4090server2:~$ echo $SHELL
/bin/bash
  • bashsh 的一个超集(Superset)和增强版(Enhancement).bash(Bourne Again SHell)最初就是为了向后兼容 sh(Bourne SHell)并增加新特性而设计的。sh 是 Unix 早期的一个标准 Shell,由 Stephen Bourne 编写。bash 继承了 sh 的所有基本语法和功能,并且在此基础上添加了很多强大的特性。

  • 为了保证兼容性,bash 可以模拟 sh 的行为。当 bash 被调用为 sh 时(例如通过 Shebang #!/bin/sh 或直接运行 sh script.sh),它会尝试尽可能地表现得像一个传统的 sh,通常会禁用或限制那些 sh 不支持的 bash 特性。

  • 在现代的 Linux 发行版(如 Ubuntu, Debian, Fedora, CentOS 等)中,bash 通常是默认的交互式 Shell。因此,你登录系统时,大概率是在使用 bash

特殊字符用来处理参数

operator

image-20250606200655884

image-20250606201207103


Shell
https://blog.cosmicdusty.cc/post/Knowledge/LearnShell/
作者
Murphy
发布于
2021年9月6日
许可协议