Linux Shell学习笔记1-Shell简介

Linux Shell学习笔记1-Shell简介

shell的英语意思是:(蛋、坚果、某些种子和某些动物的) 壳。这个词在用在计算机中的表达是非常贴切的。计算机操作系统软件体系设计中,广泛采用分层做法。如上图所示,内核软件层理解、控制并指挥硬件SHELL理解内核、向内核解释用户的输入,同时SHELL把结果输出给用户用户只关心自已的操作与数据,不用关注深层次的内核与硬件

Linux Shell学习笔记1-Shell简介

可以看出,shell是操作系统最外面的一层。shell管理用户与操作系统之间的交互:等待用户输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。

1 SHELL的概念分类

(1) 交互式与非交互式

交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。

shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。

简单来说,shell层软件给用户提供一大筐子的命令。用户可以选择其中的某个命令,从键盘输入这个命令,得到相应的结果,这种操作叫交互式。或者把很多命令(shell>

(2) 单处理与批处理

如果用户一个一个的输入命令,这种方式是单处理。如上面所说的,交互式常用这种操作模式。

如果把很多命令写在一个脚本文件中,一股脑的处理,这就是批处理。非交互式常采用这种方式。

windows上常把.bat作为批处理的扩展名。在linux上没有扩展名这种规定,因为在LINUX上扩展名除了展示一下文件类型,没有别的含义。当然,在linux上,我们习惯了以.sh为扩展名。

(3) 图形SHELL与非图形SHELL

图形界面shell(Graphical User Interface shell 即 GUI shell),也就是用户使用GUI和计算机核交互的shell,比如Windows下使用最广泛的Windows Explorer(Windows资源管理器),Linux下的X Window,以及各种更强大的CDE、GNOME、KDE、 XFCE。他们都是GUI Shell。

命令行式shell(Command Line Interface shell ,即CLI shell),也就是通过命令行和计算机交互的shell。Windows NT 系统下有 cmd.exe(命令提示字符)和近年来微软大力推广的 Windows PowerShell。Linux下有bash / sh / ksh / csh/zsh等。

已经做古的DOS操作系统,它的command和后来的cmd.exe,也是命令式的SHELL。

带不带图形界面的SHELL,从本质上来都是SHELL。但是,现在我习惯把命令行式的shell才叫做shell。类似于windows上的资源管理器,或linux上的XWINDOWS,都不再称之为shell

下面的描述,如果没有特别说明,shell就是指 运行在ubuntu18上的命令行shell。

2 ubuntu18的“终端”与“shell解释器”

Linux Shell学习笔记1-Shell简介

ubuntu提供一个shell工具,那就是形如上面的“终端”窗口。可以用“ctrl+alt+t”这个快捷键来调出这个窗口。这个“终端”程序,是手工执行linux SHELL命令、或执行shell脚本的一个工具。真正要把命令或脚本(包含多个命令)执行起来的,是“shell解释器”。

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

很多GUN/LINUX系统默认的SHELL环境是Bash(Bourne Again Shell)。但是ubutu18的默认shell解释器已经不再是Bash,而是Dash。如果不信,请执行“ls -l /bin/sh”看看。

Linux Shell学习笔记1-Shell简介

3 如何指定shell解释器

不管是Bash,还是Dash,一般情况下,区别不大。所以用默认的shell解释器就够了。

一个实用的技巧是,我们在shell脚本中指定的Shebang是这样的:

#!/bin/sh

这样,默认的shell解释器是Bash,sh就指向"bin/bash";默认的shell解释器是Dash,sh就指向"bin/dash"。

如果我们偏偏要用bash或dash呢,可以直接指定:

#!/bin/bash 这个明确表示用bash解释器

#!/bin/dash 这个明确表示用dash解释器

4 如何修改ubuntu18默认的shell解释器

sudo dkpg-reconfigure dash

Linux Shell学习笔记1-Shell简介

有个环境变量$SHELL,在ubuntu18中指向默认SHELL。如果默认的是bash,$SHELL的值就是“/bin/bash”,如果是dash,$SHELL的值就是“/bin/dash”。

Linux Shell学习笔记1-Shell简介

然而不管怎么修改默认的shell,不论是bash还是dash,它统统是“/bin/bash”,重启系统也是这样。经查,这个环境变是量由“~/.bashrc”配置的。这个配置SHELL有一定的BUG,才会导致默认的SHELL总是“bin/bash”。

Linux Shell学习笔记1-Shell简介


分享到:


相關文章: