欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Linux的Shell编程——认识BATH这个Shell

程序员文章站 2022-04-09 15:34:01
本文主要了解了Linux系统中的Shell,以及什么是BATH。 ......

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,所以不能登录系统。