最近更换工作后,第一件事情就是做一些Shell脚本编程,不过已经好久没用过了,而且当时也没有学的很扎实。现在就重新梳理一遍,整理一下知识点,供自己复习,也希望可以给别人带来帮助。

Shell简介

Shell这个东西比较抽象,我们可以理解为是操作系统留给我们和内核交互的一种方法或者途径。我们都知道Linux内核是非常重要的,我们往往是不能直接操作内核的,但是我们的计算机要工作,就要依赖于操作系统,而操作系统要工作就要依赖于内核,Shell就是Linux操作系统提供给我们和和内核交互的方法,我认为有点类似于编程语言中的API的概念。

其实我们平时使用的Terminal就是一个Shell,它可以解析我们输入的命令。而Shell脚本就是将我们输入的命令放在一个文件里面,简单理解就是这个样子的。需要说明的是,Shell脚本语言不同于Python、JS等脚本语言,可以运行在很多操作系统上面,Shell脚本语言只存在于Unix-like操作系统中。

Shell也有很多种,我们可以查看/etc/shells这个文件,里面有我们使用的操作系统支持的shell。主要有以下几个(你的shells文件里面一般只有下面中的一部分,因为下面列的比较全):

  • /bin/sh (已经被 /bin/bash 所取代)
  • /bin/bash (就是 Linux 默认的 shell)
  • /bin/ksh (Kornshell 由 AT&T Bell lab. 发展出来的,兼容于 bash)
  • /bin/tcsh (整合 C Shell ,提供更多的功能)
  • /bin/csh (已经被 /bin/tcsh 所取代)
  • /bin/zsh (基于 ksh 发展出来的,功能更强大的 shell)

虽然各种Shell的功能大同小异,但是在语法方面还是会有一些不同。我们每个用户默认使用的shell类型是在/etc/passwd中的最后一个字段规定的。目前Linux默认使用的shell是/bin/bash,我们后续shell脚本学习使用的都是这个shell。

Bash是GNU一个重要的工具包,全称“ Bourne Again SHell”。他的强大之处就不赘述了,我们的重点是shell script,有兴趣的可以看man文档(man bash)超级多多,超级详细。熟练掌握Shell对于我们使用Unix-like操作系统至关重要。

本系列文章参考自《鸟哥的Linux私房菜——基础篇》等书籍以及网上的一些知识。