shell基础入门

技术教程 风为裳 9浏览 0评论 繁體

 

什么是shell?

  • shell是一个命令解释器,提供用户和机器之间的交互。
  • 支持特定语法,比如逻辑判断、循环。
  • 每个用户都可以有自己特定的shell。
  • Centos7默认shell为bash(Bourne Agin Shell)
  • 还有zsh、ksh等。

命令解释器shell

shell是一个命令解释器,可以将用户输入的命令翻译成内核可以识别的代码,然后由内核去控制硬件;而内核则可以通过shell将硬件信息翻译成用户可识别的代码,展现给用户。下图表示shell与内核以及其他实用工具之间的关系。

常用的shell有以下几种:

shell 名称 描述
sh (Bourne shell) 源于UNIX早期版本的最初的 shell 。
csh、tcsh、zsh C shell 及其变体。
ksh/pdksh korn shell 和它的公共域兄弟 pdksh(public domain korn shell),是许多商业版本 UNIX 的默认 shell 。
bash(Bourne-Again shell) 来自 GUN 项目,是 Linux 的主要 shell,它是开源的,且具有很高的移植型,与 kron shell 有许多相似之处。

Linux 提供了多种版本的 shell 供用户选择使用,它们大多数都是从最初的 Bourne shell(sh) 演变而来。在 Linux 中,最常用的 shell 是 bash(Bourne-Again Shell), /bin/bash 也是多数 Linux 系统的默认 shell。bash 是开源的,基于 GNU,且符合 POSIX 标准,因此可以被移植到几乎所有的类 UNIX 系统上,本文所使用的 shell 也是 bash。在大多数的 Linux 发行版中,默认的 shell 程序 /bin/sh 实际上是对程序 /bin/bash 的一个连接。

使用下面的命令来查看系统的默认 shell :

[[email protected] ~]$ echo $SHELL
/bin/bash
[[email protected] ~]$ 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.
[[email protected] ~]$

如果需要在 Linux 系统中安装多个 shell ,使用下面命令可以查看系统中有多少可以使用的 shell :

[[email protected] ~]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin

执行命令后可以看到,系统中可用的 shell 有 sh 和 bash。如上所示 sbin/nologin 。这其实也是一个 shell,使用这个 shell 的用户不允许登录当前系统,即使有密码也不行。不过,虽然无法登入系统,但是用户还是可以使用其他的系统资源的,许多系统账户都是使用的这个 shell,如 ftp、mail 等,它们只需要使用系统资源,而不需要登入系统,设置成使用 sbin/nologin 可以使系统更安全。

如果想要切换到另一个 shell 也很简单,直接运行这个 shell 就行,比如,系统上默认 shell 是 bash,如果我想要切换到 sh 的话,直接在命令行输入:/bin/sh 即可切换到 sh,再输入 exit 即可退出 sh 回到 bash:

[[email protected] ~]$ /bin/sh
sh-4.2$ 
sh-4.2$ exit
exit
[[email protected] ~]$

如果想使用 csh 或者 ksh 而系统中没有这个 shell 的话,也可以使用 yum 安装获得:

[[email protected] ~]$ sudo yum install csh
[[email protected] ~]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh

编程语言 shell

shell 还是一种功能强大的解释型编程语言,使用 shell 来执行 shell 程序,这些程序通常被称为脚本,它们是在运行时解释执行的。这使得调试工作比较容易进行,因为你可以逐行的执行指令,而且节省了重新编译的时间。然而这也使得 shell 不适合用来完成时间紧迫型和处理器忙碌型的任务。shell 非常适合于编写一些执行相对简单的任务的小工具,它们更强调的是易于配置、易于维护和可移植性,而不是很看重执行的效率。

解释型语言与编译型语言的区别

1、解释型语言

解释型语言的源代码不是直接翻译成机器语言的,而是先翻译成中间代码,再由解释器对中间代码进行解释运行(解释器一般是用编译型语言编写的程序)。解释型语言编写的程序不需要编译,程序在运行时才翻译成机器语言,每执行一次都要翻译一次,因此效率较低,依赖于解释器。但是,也正是由于解释的特性,使得这种语言编写的程序可移植性很好,只要有相应的解释环境,就可以在不同的操作系统上运行。常见的解释型语言有 Shell、Python、Ruby等。

2、编译型语言

编译型语言在执行之前需要先进行编译,将程序直接编译成机器语言,然后直接运行即可,不需要再进行翻译。这种程序执行效率高,依赖于编译器,跨平台性要弱一点。常见的 C、C++等都是编译型语言。

使用 shell 脚本的好处

①简单性

shell 脚本可以很简单的对文件、目录层次的内容进行操作,使用 shell 脚本将使得许多事情变得十分简洁。

②可移植性

shell 脚本的可移植性非常好,因为它是遵循 POSIX 标准的,基本上无需修改就可以在不同的系统上执行。

③易于开发

shell 脚本易于开发,你可以在一个较短时间内完成一个功能强大又好用的脚本。

 

相关资料

https://www.cnblogs.com/clsn/p/8028337.html

https://www.cnblogs.com/feisky/archive/2010/03/31/1701560.html

转载请注明:风为裳 » shell基础入门

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址