Shell脚本编程

2021/01/10 Linux Shell

Shell脚本编程

Shell脚本语言是Linux/UNIX系统上一种重要的脚本语言,在Linux/UNIX领域应用极为广泛,熟练地掌握Shell脚本编程是一个优秀的Linux/UNIX开发者和系统管理员的必经之路。

Shell简介

Shell是一种具备特殊功能的程序,它提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令,并把它送入内核去执行。内核是Linux系统的心脏,从开机自检时就驻留在计算机的内存中,直到计算机关闭为止,而用户的应用程序存储在计算机的硬盘上,仅当需要时才被调入内存。Shell是一种应用程序,当用户登录Linux系统时,Shell就会被调入内存执行。Shell独立于内核,它是连接内核和应用程序的桥梁,并由输入设备读取命令,再将其转为计算机可以理解的机械码,Linux内核才能执行该命令。

Shell使用

用户可以通过两种方式打开Shell

  • 第一种是在Linux系统图形用户界面GNOME下单击“终端”打开Shell。GNOME与Windows操作系统风格类似,Shell窗口打开后,会在屏幕下方的任务栏上显示出来,用户可以在命令提示符后输入Linux命令。
  • 第二种打开Shell的方式就是利用一些软件工具以SSH的方式远程登录到Linux系统,目前比较流行的Shell软件工具是SSH Secure Shell和PuTTY。

SSH Secure Shell软件

该软件的风格十分简洁,单击工具栏中的“Quick Connect”按钮,即可弹出登录设置界面,输入登录主机的IP地址和用户名,单击“Connect”按钮就可远程登录Linux系统。与X Windows的终端类似,可以在命令提示符后输入系统命令。

PuTTY软件

该软件是一个非常小巧的工具,而且是绿色软件,无须安装,同样是输入登录主机的IP地址,再单击“Open”按钮连接,输入登录用户名及其密码,成功登录后会出现命令提示符。

Shell类型与区别

Linux是一套类UNIX操作系统,从UNIX衍生而来,因而,要阐释清楚Linux Shell的种类,需要从UNIX Shell的起源和发展说起。

  • 从Bourne Shell发展而来的dash,它代表了Bourne Shell的特性;
  • C Shell中的典型代表tcsh,它继承了C Shell的所有风格与特性;
  • 兼容Bourne Shell和C Shell诸多特征的Korn Shell

Linux/UNIX Shell起源与分类

Shell是用户与内核进行交互操作的一种接口,Linux的Shell有多种类型。由于Linux是源自于UNIX的,因此,要阐释清Linux Shell的种类,需要从UNIX Shell的起源和发展说起。

第一个重要的标准UNIX Shell是在1970年由美国贝尔实验室(Bell Lab)开发的Bourne Shell,它以开发者Stephen Bourne的名字命名。Bourne Shell是UNIX操作系统最初使用的Shell,而且在每种UNIX系统上都可以使用,Bourne Shell是基于Algol语言编写的,它在Shell编程方面性能优秀,但是,由于Bourne Shell不支持如历史、别名和作业控制等机制,因此,Bourne Shell在处理交互式操作方面有所欠缺。

20世纪70年代末,在加利福尼亚大学Berkeley分校研发的C Shell作为BSD UNIX的一部分发布,顾名思义,C Shell是用C语言编写的,C Shell提供了许多标准Bourne Shell里不提供的功能。C Shell使用类似C语言的语法,提供交互使用的增强功能,如命令行历史、别名和作业控制。因为这种Shell是在大型机上设计的,而且加入了大量附加的特征,所以,C Shell的运行速度较为缓慢。

由于Bourne Shell和C Shell都可使用,所以,现在的UNIX用户有了选择余地,同时也在选择Shell的问题上产生了困扰。来自AT&T的David Korn于20世纪80年代中期开发了Korn Shell,发布于1996年,并且在1998年正式成为UNIX的SVR4分支的组成部分。Korn Shell不仅能在UNIX系统上运行,而且能在OS/2、VMS和DOS上运行。它提供与Bourne Shell的向上兼容性,增加了许多C Shell的受欢迎的特征,而且快捷有效。在2000年以前,Korn Shell的版权一直被AT&T控制,目前,Korn Shell也称为开源软件。Korn Shell有两种独立的版本:ksh88和ksh93,大部分Korn Shell版本都是源自于ksh93,如IBM的AIX系统。但是,Sun公司的Solaris系统却除外,Solaris的Shell是从ksh88的基础上修改而来的。

bash是大多数Linux系统的默认Shell,它是Linux操作系统上一款优秀的Shell,bash是Bourne Again Shell的简写,正如它的名字所暗示的,bash是Bourne Shell的扩展。bash Shell与Bourne Shell完全向后兼容,并且在Bourne Shell的基础上增加了很多特性,bash Shell包含了很多C Shell和Korn Shell的优点,这使得bash Shell具有很灵活的编程接口,同时又有友好的用户界面。bash Shell在Bourne Shell上扩展的特性包含以下几方面:

  • 命令行编辑。
  • 命令历史显示无大小限制。
  • 作业控制命令。
  • 函数和别名。
  • 无大小限制的数组。

除了bash Shell,我们再介绍几种Linux系统使用的Shell。基于UNIX系统的Bourne Shell,Kenneth Almquist开发了Bourne Shell的小型版本,名为Almquist Shell,简称ash。ash非常小巧,因而速度非常快,但是,ash不支持命令行编辑和历史命令查询等功能,因而,ash不适用于交互式Shell。ash因其小巧的特征,适用于内存较小的机器,如嵌入式芯片等。

在ash的基础上,Debian Linux创建了Debian专用的Shell,称为Debian ash,简称为dash,Debian完全由社区人员设计和完善,Debian项目以创造一份自由操作系统为共同目标,Debian Linux也是最古老的Linux发行版之一,目前流行的桌面版Linux系统Ubuntu就是从Debian Linux发展而来的,Ubuntu也不例外地采用dash作为其默认Shell。dash在ash里增加了很多新功能,使得ash更接近于Bourne Shell,dash增加的新功能包括命令行编辑、emacs和vi等文本编辑命令。

tcsh是Linux使用的一种Shell,它源自C Shell,同时也是C Shell的一种流行的开源版本。随着bash Shell的流行,tcsh只能作为Linux系统的一种替代型Shell,tcsh易于安装,它能很方便地将UNIX中C Shell风格的环境迁移到Linux系统下。

shell脚本基础

Bourne shell脚本一般以如下所示的行开头,它表示我们要用/bin/sh 程序来执行脚本文件中的命令。

#!/bin/sh

其中的#! 叫作shebang,你在本书的其他脚本例子中也会看到这一行。你可以在该行之后列出任何你想让shell帮你执行的命令。例如:\

#!/bin/sh
#
# Print something, then run ls
echo About to run the ls command.
ls

注解 :若行以字符# 开头,则表示该行为注释,即shell会忽略一行中# 之后的所有东西。注释可用于解释脚本中难懂的部分。

创建好shell脚本并设置好它的权限之后,你就可以将该脚本放到你命令路径的某个目录中,然后在命令行里输入脚本文件的名字来运行它。如果它在你当前目录下,你还可以用./script 来运行它。当然也可以输入它完整的路径名来运行。

Search

    微信好友

    博士的沙漏

    Table of Contents