初识shell

初识shell

1shell是什么

我们经常使用的操作系统(WindowsMac OSAndroidiOS 等)都是带图形界面的,简单直观。

然而在计算机的早期并没有图形界面,我们只能通过一个一个地命令来控制计算机,这些命令有成百上千之多,且不说记住这些命令非常困难,每天面对没有任何色彩的“黑屏”本身就是一件枯燥的事情;这个时候的计算机还远远谈不上炫酷和普及,只有专业人员才能使用。

对于图形界面,用户点击某个图标就能启动某个程序;对于命令行,用户输入某个程序的名字(可以看做一个命令)就能启动某个程序。这两者的基本过程都是类似的,都需要查找程序在硬盘上的安装位置,然后将它们加载到内存运行。也就是说,图形界面和命令行要达到的目的是一样的,都是让用户控制计算机。

然而,真正能够控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel),图形界面和命令行只是架设在用户和内核之间的一座桥梁。

由于安全、复杂、繁琐等原因,用户不能直接接触内核(也没有必要),需要另外再开发一个程序,让用户直接使用这个程序;该程序的作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核。如此一来,用户和内核之间就多了一层“代理”,这层“代理”既简化了用户的操作,也保护了内核。

用户界面和命令行就是这个另外开发的程序,就是这层“代理”。在Linux下,这个命令行程序叫做 Shell

2shell的作用

Shell 除了能解释用户输入的命令,将它传递给内核,还可以调用其他程序,给其他程序传递数据或参数,并获取程序的处理结果;也可以在多个程序之间传递数据,把一个程序的输出作为另一个程序的输入;Shell 本身也可以被其他程序调用。由此可见,Shell 是将内核、程序和用户连接了起来。

Shell 本身支持的命令并不多,但是它可以调用其他的程序,每个程序就是一个命令,这使得 Shell 命令的数量可以无限扩展,其结果就是 Shell 的功能非常强大,完全能够胜任Linux 的日常管理工作,如文本或字符串检索、文件的查找或创建、大规模软件的自动部署、更改系统设置、监控服务器性能、发送报警邮件、抓取网页内容、压缩文件等。

3shell的简单介绍

Shell 并不是简单的堆砌命令,我们还可以在 Shell 中编程,这和使用 C/C++JavaPython 等常见的编程语言并没有什么两样。

Shell 虽然没有 C/C++JavaPython 等强大,但也支持了基本的编程元素,例如:if...else 选择结构,switch...case 开关语句,forwhileuntil 循环;可使用变量、数组、字符串、注释、加减乘除、逻辑运算等概念;也可以使用函数,包括用户自定义的函数和内置函数(例如 printfexporteval 等)。

Shell 也是一种编程语言,它的编译器(解释器)是 Shell 这个程序。我们平时所说的 Shell,有时候是指连接用户和内核的这个程序,有时候又是指 Shell 编程。

Shell 主要用来开发一些实用的、自动化的小工具,而不是用来开发具有复杂业务逻辑的中大型软件,例如检测计算机的硬件参数、一键搭建Web开发环境、日志分析等,Shell 都非常合适。使用 Shell 的熟练程度反映了用户对 Linux 的掌握程度,运维工程师、网络管理员、程序员都应该学习 Shell。它使得我们能够自动化地管理服务器集群,否则你就得一个一个地登录所有的服务器,对每一台服务器都进行相同的设置,而这些服务器可能有成百上千之多,会浪费大量的时间在重复性的工作上。

Shell 是一种脚本语言,我们编写完源码后不用编译,直接运行源码即可。

3、常用的shell有哪些

Shell 既是一种脚本编程语言,也是一个连接内核和用户的软件。常见的 Shell shbashcshtcshash 等。

Shell 是一个程序,一般都是放在/bin或者/user/bin目录下,当前 Linux 系统可用的 Shell 都记录在/etc/shells文件中。/etc/shells是一个纯文本文件,你可以在图形界面下打开它,也可以使用 cat 命令查看它。

在现代的 Linux 上,sh 已经被 bash 代替,/bin/sh往往是指向/bin/bash的符号链接。

3.1sh

sh 的全称是 Bourne shell,由 AT&T 公司的 Steve Bourne开发,为了纪念他,就用他的名字命名了。

sh UNIX 上的标准 shell,很多 UNIX 版本都配有shsh也是第一个流行的 Shell

3.2csh

sh之后另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计的,这个 shell 的语法有点类似C语言,所以才得名为C shell ,简称为csh

Bill Joy 是一个风云人物,他创立了 BSD 操作系统,开发了vi编辑器,还是 Sun 公司的创始人之一。BSD UNIX 的一个重要分支,后人在此基础上发展出了很多现代的操作系统,最著名的有 FreeBSDOpenBSD NetBSD,就连 Mac OS X 在很大程度上也基于BSD

3.3tcsh

tcsh csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持。

3.4ash

一个简单的轻量级的 Shell,占用资源少,适合运行于低内存环境,但是与下面讲到的 bash shell 完全兼容。

3.5bash

bash shell Linux 的默认 shell,后面的文章也基于bash编写。bash GNU 组织开发,保持了对sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell

bash 兼容 sh 意味着,针对 sh 编写的 Shell 代码可以不加修改地在bash 中运行。尽管如此,bash sh 还是有一些不同之处:一方面,bash 扩展了一些命令和参数;另一方面,bash 并不完全和 sh 兼容,它们有些行为并不一致,但在大多数企业运维的情况下区别不大,特殊场景可以使用 bash 代替 sh


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章