1
、为什么学习和使用
Shell
编程
对于一个合格的系统管理员来说,学习和掌握 Shell 编程是非常重要的。通过编程,可以在很大程度 上简化日常的维护工作,使得管理员从简单的重复劳动中解脱出来。shell 程序的特点:1 、简单易学2 、解释性语言,不需要编译即可执行
2、 什么是Shell
在学习 Shell 编程之前,必须弄清楚什么是 Shell 。为了能够使读者在学习具体的 Shell 编程之前对 Shell有个基本的了解,本节将对 Shell 进行概括性的介绍,包括 Shell 的起源和功能。( 1 ) shell 的起源1964 年,美国 AT&T 公司的贝尔实验室、麻省理工学院及美国通用电气公司共同参与开始研发一套 可以安装在大型主机上的多用户、多任务的操作系统,该操作系统的名称为Multics 。1970 年,丹尼斯 • 里奇和汤普逊启动了另外一个新的多用户、多任务的操作系统的项目,他们把这 个项目称之为UNICS 。1973 年,使用 C 语言重新编写了 Unix 。通过这次编写,使得 Unix 得以移植到其他的小型机上面。1979 年,第一个重要的标准 UNIX Shell 在 Unix 的第 7 版中推出,并以作者史蒂夫 • 伯恩( Stephen Bourne)的名字命名,叫做 Bourne Shell ,简称为 sh 。 20世纪 70 年代末, C Shell 作为 2BSD UNIX 的一部分发布,简称 csh 。 之后又出现了许多其他的Shell 程序,主要包括 Tenex C Shell ( tcsh )、 Korn Shell ( ksh )以及GNU Bourne-Again shell ( bash )。( 2 ) shell 的功能Shell 又称命令解释器,它能识别用户输入的各种命令,并传递给操作系统。它的作用类似于Windows 操作系统中的命令行,但是, Shell 的功能远比命令行强大的多。在 UNIX 或者 localhost 中,Shell 既是用户交互的界面,也是控制系统的脚本语言。
3
、
shell
的分类
Bourne Shell :标识为 sh ,该 Shell 由 Steve Bourne 在贝尔实验室时编写。在许多 Unix 系统中,该 Shell是 root 用户的默认的 Shell 。 Bourne-Again Shell:标识为 bash ,该 Shell 由 Brian Fox 在 1987 年编写,是绝大多数 localhost 发行版的默认的 Shell 。Korn Shell :标识为 ksh ,该 Shell 由贝尔实验室的 David Korn 在二十世纪八十年代早期编写。它完 全向上兼容 Bourne Shell 并包含了 C Shell 的很多特性。C Shell :标识为 csh ,该 Shell 由 Bill Joy 在 BSD 系统上开发。由于其语法类似于 C 语言,因此称为 C Shell。
如何查看当前系统支持的shell?
[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
如何查看当前系统默认
shell
?
[root@localhost ~]# echo $SHELL
/bin/bash
4、 作为程序设计的语
Shell 不仅仅是充当用户与 UNIX 或者 localhost 交互的角色,还可以作为一种程序设计语言来使用。 通过Shell 编程,可以实现许多非常实用的功能,提高系统管理的自动化水平。如果有一系列经常需要使用的命令,把它存储在一个文件里, shell 可以读取这个文件并顺序执行其 中的命令,我们把这样的文件就叫shell 脚本。 shell 脚本按行解释文件里的命令
5、shell脚本的书写规范
通常情况下,我们会给
shell
脚本起名为
filename.sh
第一行写声明,声明当前的
shell
脚本使用哪个命令解释器去解释:
#!/bin/bash
除了第一行以外的以
#
开头的行都为注释
shell
脚本的作者
shell
脚本的创建时间
脚本的作用,命令的说明
编辑.sh文件时自动生成关于脚本文件说明的注释
[root@localhost ~]# cat /root/.vimrc
autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()"
func SetTitle()
if expand("%:e") == 'sh'
call setline(1,"#!/bin/bash")
call setline(2,"#########################")
call setline(3,"#File name:".expand("%"))
call setline(4,"#Version:v1.0")
call setline(5,"#Email:admin@test.com")
call setline(6,"#Created time:".strftime("%F %T"))
call setline(7,"#Description:")
call setline(8,"#########################")
call setline(9,"")
endif
endfunc