linux shell 教程,Linux怎么学

LINUX快速入门第八章:Shell基础

我们平时所说的 Shell可以理解为 Linux系统提供给用户的使用界面。Shell为用户提供了输入命令和参数并可得到命令执行结果的环境。当一个用户登录 Linux之后,系统初始化程序 init就根据/etc/passwd文件中的设定,为每个用户运行一个被称为 Shell(外壳)的程序。

确切地说,Shell是一个命令行解释器,它为用户提供了一个向 Linux内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell来启动、挂起、停止甚至编写一些程序。

Shell处在内核与外层应用程序之间,起着协调用户与系统的一致性、在用户与系统之间进行交互的作用。图 1是 Linux系统层次结构图,Shell接收用户输入的命令,并把用户的命令从类似 abed的 ASCII码解释为类似 0101的机器语言,然后把命令提交到系统内核处理;当内核处理完毕之后,把处理结果再通过 Shell返回给用户。

换句话说:

Shell是一个用 C语言编写的程序,它是用户使用 Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。

Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Ken Thompson的 sh是第一种 Unix Shell,Windows Explorer是一个典型的图形界面 Shell。

Shell与其他 Linux命令一样,都是实用程序,但它们之间还是有区别的。一旦用户注册到系统后,Shell就被系统装入内存并一直运行到用户退出系统为止;而一般命令仅当被调用时,才由系统装入内存执行。

与一般命令相比,Shell除了是一个命令行解释器,同时还是一门功能强大的编程语言,易编写,易调试,灵活性较强。作为一种命令级语言,Shell是解释性的,组合功能很强,与操作系统有密切的关系,可以在 Shell脚本中直接使用系统命令。大多数 Linux系统的启动相关文件(一般在/etc/rc.d目录下)都是使用 Shell脚本编写的。

同传统的编程语言一样,Shell提供了很多特性,这些特性可以使 Shell脚本编程更为有用,如数据变量、参数传递、判断、流程控制、数据输入和输出、子程序及中断处理等。

说了这么多,其实我们在 Linux中操作的命令行界面就是 Linux的 Shell,也就是 Bash,但是我们的图形界面是 Shell吗?其实从广义讲,图形界面当然也是 Shell,因为它同样用来接收用户的操作,并传递到内核进行处理。不过,这里的 Shell主要指的是 Bash。

Shell脚本

Shell脚本(shell script),是一种为 shell编写的脚本程序。

业界所说的 shell通常都是指 shell脚本,但读者朋友要知道,shell和 shell script是两个不同的概念。

由于习惯的原因,简洁起见,本文出现的"shell编程"都是指 shell脚本编程,不是指开发 shell自身。

Shell的分类

目前 Shell的版本有很多种,如 Bourne Shell、C Shell、Bash、ksh、tcsh等,它们各有特点,下面简要介绍一下。

最重要的 Shell是 Bourne Shell,这个命名是为了纪念此 Shell的发明者 Steven Bourne。从 1979年起,UNIX就开始使用 Boume Shell。Bourne Shell的主文件名为 sh,开发人员便以 sh作为 Bourne Shell的主要识别名称。

虽然 Linux与 UNIX一样,可以支持多种 Shell,但 Boume 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的特点,如 Korn、 tcsh及 Bash。

Bash Shell是 GNU计划的重要工具之一,也是 GNU系统中标准的 Shell。Bash与 sh兼容,所以许多早期开发出来的 Bourne Shell程序都可以继续在 Bash中运行。现在使用的 Linux就使用 Bash作为用户的基本 Shell。

Bash于 1988年发布,并在 1995-1996年推出Bash 2.0。在这之前,广为使用的版本是1.14,Bash 2.0增加了许多新的功能,以及具备更好的兼容性。表 2中详细列出了各版本的具体情况。

注意,Shell的两种主要语法类型有 Bourne和 C,这两种语法彼此不兼容。Boume家族主要包括 sh、ksh、Bash、psh、zsh;C家族主要包括 csh、tcsh(Bash和 zsh在不同程序上支持 csh的语法)。

本章讲述的脚本编程就是在 Bash环境中进行的。不过,在 Linux中除了可以支持 Bash,还可以支持很多其他的 Shell。我们可以通过/etc/shells文件来査询 Linux支持的 Shell。命令如下:

在 Linux中,这些 Shell是可以任意切换的,命令如下:

用户信息文件/etc/passwd的最后一列就是这个用户的登录 Shell。命令如下:

大家可以看到,root用户和其他可以登录系统的普通用户的登录 Shell都是/bin/bash,也就是 Linux的标准 Shell,所以这些用户登录之后可以执行权限允许范围内的所有命令。不过,所有的系统用户(伪用户)因为登录 Shell是/sbin/ndogin,所以不能登录系统。

笔记:

sh/bash/csh/Tcsh/ksh/pdksh等shell的区别

Linux Shell 教程——想玩转linux就请一直看下去

Shell是一个用 C语言编写的程序,它是用户使用 Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。

Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Ken Thompson的 sh是第一种 Unix Shell,Windows Explorer是一个典型的图形界面 Shell。

Shell在线工具

Shell脚本(shell script),是一种为 shell编写的脚本程序。

业界所说的 shell通常都是指 shell脚本,但读者朋友要知道,shell和 shell script是两个不同的概念。

由于习惯的原因,简洁起见,本文出现的"shell编程"都是指 shell脚本编程,不是指开发 shell自身。

Shell编程跟 JavaScript、php编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

Linux的 Shell种类众多,常见的有:

在一般情况下,人们并不区分 Bourne Shell和 Bourne Again Shell,所以,像#!/bin/sh,它同样也可以改为#!/bin/bash。

#!告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell程序。

打开文本编辑器(可以使用 vi/vim命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用 php写 shell脚本,扩展名就用 php好了。

输入一些代码,第一行一般是这样:

#!/bin/bash

echo"Hello World!"

运行实例»

#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

echo命令用于向窗口输出文本。

1、作为可执行程序

将上面的代码保存为 test.sh,并 cd到相应目录:

注意,一定要写成./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux系统会去 PATH里寻找有没有叫 test.sh的,而只有/bin,/sbin,/usr/bin,/usr/sbin等在 PATH里,你的当前目录通常不在 PATH里,所以写成 test.sh是会找不到命令的,要用./test.sh告诉系统说,就在当前目录找。

2、作为解释器参数

这种运行方式是,直接运行解释器,其参数就是 shell脚本的文件名,如:

这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

Linux cd命令:切换目录教程

Command是Change Directory的缩写,用于切换工作目录。Linux命令按照来源方法可以分为两种,即Shell内置命令和外部命令。所谓的Shell内置命令,就是Shell自带的命令。这些命令没有可执行文件;外部命令是程序员单独开发的,所以会有命令的执行文件。Linux中绝大多数命令都是外部命令,而cd命令是典型的Shell内置命令,所以cd命令没有文件执行的路径。

cd命令的基本格式如下:

[root@localhost~]# cd [相对路径或绝对路径]

除此之外,cd命令后面可以跟一些特殊符号,表达固定的含义,如所示:cd命令的特殊符号特殊符号作用~代表当前登录用户的主目录~用户名表示切换至指定用户的主目录代表上次所在目录代表当前目录..代表上级目录它们的用法分别是:

[root@localhost vbird]# cd~#表示回到自己的主目录,对于 root用户,其主目录为/root[root@localhost~]# cd#没有加上任何路径,也代表回到当前登录用户的主目录[root@localhost~]# cd~vbird#代表切换到 vbird这个用户的主目录,亦即/home/vbird

[root@localhost~]# cd..#表示切换到目前的上一级目录,亦即是/root的上一级目录的意思;

需要注意的是,在 Linux系统中,根目录确实存在.(当前目录)以及..(当前目录的父目录)两个目录,但由于根目录是最顶级目录,因此根目录的..和.的属性和权限完全一致,也就是说,根目录的父目录是自身。

[root@localhost/]# cd-#表示回到刚刚的那个目录

如果你仔细观察的话,不难发现,其实在 [root@localhost~]中,就已经指明了当前所在的目录,通常刚登陆时会位于自己的主目录中,而~就表示主目录,因此也就有了通过使用cd~可以回到自己的主目录。【例 1】学习 cd的用法。

[root@localhost~]# cd/usr/local/src#进入/usr/local/src目录[root@localhost src]# cd-/root[root@localhost~]##cd-命令回到进入 src

目录之前的主目录[root@localhost~]# cd-/usr/local/src[root@localhost src]##

再执行一遍cd-命令,又回到了/usr/local/src目录

【例 2】学习 cd.和 cd..的用法。

[root@localhost~]# cd/usr/local/src#进入测试目录

[root@localhost src]# cd..#进入上级目录[root@localhost local]# pwd/usr/local#pwd是査看当前所在目录的命令,可以看到我们进入了上级目录/usr/local[root@localhost local]# cd.#进入当前目录[root@localhost local]# pwd/usr/local#这个命令不会有目录的改变,只是告诉大家.代表当前目录

阅读剩余
THE END