Shell 教程官网:网道教程
Shell 基本概念
在Windows操作系统中我们有图形化页面,通过如鼠标、键盘等硬件就可以在可视化页面中操作计算机。
在无可视化界面的Linux服务器中,我们可以通过命令行的方式查看计算机资源,如文件、进程、内存、外存等。
那么有没有思考过,我们执行的命令如:cd、ls、ps、top等命令又是被谁执行的呢?或者说是如何生效的呢?(开始正文)
Shell 是一个用C语言编写的程序,用作一个连接用户与操作系统进行交互的桥梁。操作系统才是真正控制CPU的管理者,只有CPU能够真正意义上的调度硬件。
我们需要将输入的Shell script交给 Shell 程序执行,进而达到访问系统资源的目的。如上面提到的cd、ls等都是 Shell script,我们称之为执行命令。
关系如下:
- 操作用户
- 应用程序(包括Shell)
- 系统调用、API
- 操作系统内核
- CPU
- 硬件
所以说,Shell被用作为一个连接用户与操作系统进行交互的桥梁。
上面说到 Shell 本身是一个程序,这个程序会提供一个界面,用户通过这个界面访问操作系统。比如 Windows 中的 Windows Explorer 就是一个图形化的 Shell。所以说 Shell 是一种抽象概念,而 Shell 汉译后的意思也有壳
的意思。
除了将命令交交给 Shell 执行,也可以在一个批处理文件中编写一组命令,并穿插一些逻辑处理。这样的代码称之为 Script,Shell script。
所以 Shell script 既是一种命令语言,也是一种程序设计语言。而 Shell 是一个程序。
Shell 环境(菜鸟教程)
Linux 的 Shell 种类众多,常见的有:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
- ……
本次学习使用 Bourne Again Shell。Bash,免费,广泛应用。且,Bash 也是大多数 Linux 系统默认的 Shell。
查看系统默认使用的 Shell
$ echo $SHELL
/bin/bash
查看系统已安装可使用的 Shell
$ cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
Hello world
touch test.sh
vim ./test.sh
#!/bin/bash
echo "Hello world"
#! 是一个约定标记,告诉系统需要用什么 Shell 解释器来执行。我们声明的为 Bash。
执行 Shell,两种方式:
chmod +x ./test.sh
将文件赋权为可执行文件,直接执行/bin/bash ./test.sh
作为参数执行,/bin/bash
是一个可执行的 Shell 程序
Shell 和 Bash 的历史
1988年,自由软件基金会的第一个付薪程序员 Brian Fox 写了一个 Shell,功能基本上是 Bourne shell 的克隆,叫做 Bourne-Again SHell,简称 Bash,程序名为bash,任何人都可以免费使用。后来,它逐渐成为 Linux 系统的标准 Shell。
1989年,Bash 发布1.0版。
1996年,Bash 发布2.0版。
2004年,Bash 发布3.0版。
2009年,Bash 发布4.0版。
2019年,Bash 发布5.0版。
用户可以通过bash命令的–version参数或者环境变量$BASH_VERSION,查看本机的 Bash 版本。
$ bash --version
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$ echo $BASH_VERSION
4.2.46(2)-release