Linux的Shell编程——认识BATH这个Shell
linux的shell编程——认识bath这个shell
摘要:本文主要了解了linux系统中的shell,以及什么是bath。
什么是shell
shell是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至编写一些程序。
shell处在内核与外层应用程序之间,起着协调用户与系统的一致性、在用户与系统之间进行交互的作用。shell接收用户输入的命令,并把用户的命令从类似abed的ascii码解释为类似0101的机器语言,然后把命令提交到系统内核处理,当内核处理完毕之后,把处理结果再通过shell返回给用户。
与一般命令相比,shell除了是一个命令行解释器,同时还是一门功能强大的编程语言,易编写,易调试,灵活性较强。作为一种命令级语言,shell是解释性的,组合功能很强,与操作系统有密切的关系,可以在shell脚本中直接使用系统命令。大多数linux系统的启动相关文件(一般在/etc/rc.d目录下)都是使用shell脚本编写的。
在linux中操作的命令行界面就是linux的shell,这里的shell主要指的是bash。
shell的分类
目前shell的版本有很多种,如bourne shell、c shell、bash、ksh、tcsh等,它们各有特点。
最重要的shell是bourne shell,这个命名是为了纪念此shell的发明者steven bourne。从1979年起,unix就开始使用bourne shell。bourne shell的主文件名为sh,开发人员便以sh作为bourne shell的主要识别名称。
虽然linux与unix一样,可以支持多种shell,但bourne shell的重要地位至今仍然没有改变,许多unix系统中仍然使用sh作为重要的管理工具。它的工作从开机到关机,几乎无所不包。在linux中,用户shell主要是bash,但在启动脚本、编辑等很多工作中仍然使用bourne shell。
c shell是广为流行的shell变种。c shell主要在bsd版的unix系统中使用,发明者是柏克莱大学的bill joy。c shell因为其语法和c语言类似而得名,这也使得unix的系统工程师在学习c shell时感到相当方便。
bourne shell和c shell形成了shell的两大主流派别,后来的变种大都吸取这两种shell的特点,如ksh、tcsh及bash。
bashshell是gnu计划的重要工具之一,也是gnu系统中标准的shell。bash与sh兼容,所以许多早期开发出来的bourne shell程序都可以继续在bash中运行。现在使用的linux就使用bash作为用户的基本shell。
bash于1988年发布,并在1995-1996年推出bash 2.0。在这之前,广为使用的版本是1.14,bash 2.0增加了许多新的功能,以及具备更好的兼容性。
注意,shell的两种主要语法类型有bourne和c,这两种语法彼此不兼容。boume家族主要包括sh、ksh、bash、psh、zsh,c家族主要包括csh、tcsh(bash和zsh在不同程序上支持csh的语法)。
本章讲述的脚本编程就是在bash环境中进行的。不过,在linux中除了可以支持bash,还可以支持很多其他的shell。我们可以通过/etc/shells文件来査询linux支持的shell。命令如下:
1 [root@localhost ~]# cat /etc/shells 2 /bin/sh 3 /bin/bash 4 /sbin/nologin 5 /usr/bin/sh 6 /usr/bin/bash 7 /usr/sbin/nologin 8 [root@localhost ~]#
在linux中,这些shell是可以任意切换的,命令如下:
1 [root@localhost ~]# sh 2 sh-4.2# ls 3 anaconda-ks.cfg test 4 sh-4.2# exit 5 exit 6 [root@localhost ~]#
root用户和其他可以登录系统的普通用户的登录shell都是/bin/bash,也就是linux的标准shell,所以这些用户登录之后可以执行权限允许范围内的所有命令。不过,所有的系统用户(伪用户)因为登录shell是/sbin/ndogin,所以不能登录系统。