分享
 
 
 

bash入门基础

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

前言

本文译自《Slackware Linux Unleashed》(第三版)一书的 bash 一章,但做了一些必要的删节,并且有的地方根据实际情况作了较大的改动,必要的话请参考原文。

简介

本文将较为详细地介绍 Linux 下最常用的 shell,bash。bash(Bourne Again Shell) 是 Linux 的缺省 shell,并被大多数用户所使用,在本文中你将学会:

什么是shell

Linux上最常见的shell

命令补齐(Command-line completion)和通配

命令历史记录(Command history)和别名

重定向和管道

改变提示符

进程控制(Job control)

如何用户化配置你的bash shell

另外你还将看到一些最常用的bash命令和内存变量的用法,读完本文后你将能更快和更有效地使用bash。

Shells in a Nutshell

什么是shell?总之这个词好象总是出现在 Linux 里,但很多新用户并不清楚它的明确的含义。本节将给出一个确切的解释并说明为什么在Linux中它显得如此的重要。

什么是Shell?

shell是你(用户)和Linux(或者更准确的说,是你和Linux内核)之间的接口程序。你在提示符下输入的每个命令都由shell先解释然后传给Linux内核。

--------------------------------------------------------------------------------

注意: 如果你熟悉m$-dos,你将认出这很象DOS 用户和 COMMAND.COM之间的关系。唯

一的区别是command.com 的功能远不能和shell 相提并论。

--------------------------------------------------------------------------------

shell 是一个命令语言解释器(command-language interpreter)。拥有自己内建的 shell 命令集。此外,shell也能被系统中其他有效的Linux 实用程序和应用程序(utilities and application programs)所调用。

不论何时你键入一个命令,它都被Linux shell所解释。一些命令,比如打印当前工作目录命令(pwd),是包含在Linux bash内部的(就象DOS的内部命令)。其他命令,比如拷贝命令(cp)和移动命令(rm),是存在于文件系统中某个目录下的单独的程序。而对用户来说,你不知道(或者可能不关心)一个命令是建立在shell内部还是一个单独的程序。

附图展示了 shell 是如何执行命令解释的,shell 首先检查命令是否是内部命令,不是的话再检查是否是一个应用程序,这里的应用程序可以是Linux本身的实用程序,比如ls 和 rm,也可以是购买的商业程序,比如 xv,或者是公用软件(public domain software),就象 ghostview。然后shell试着在搜索路径里寻找这些应用程序。搜索路径是一个能找到可执行程序的目录列表。如果你键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。而如果命令被成功的找到的话,shell的内部命令或应用程序将被分解为系统调用并传给Linux内核。

shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell 程序设计语言支持在高级语言里所能见到的绝大多数程序控制结构,比如循环,函数,变量和数组。shell 编程语言很易学,并且一旦掌握后它将成为你的得力工具。任何在提示符下能键入的命令也能放到一个可执行的shell程序里,这意味着用shell语言能简单地重复执行某一任务。

shell 如何启动

shell在你成功地登录进入系统后启动,并始终作为你与系统内核的交互手段直至你退出系统。你系统上的每位用户都有一个缺省的shell。每个用户的缺省shell在系统里的passwd文件里被指定,该文件的路径是/etc/passwd。passwd文件里还包含有其他东西:每个人的用户ID号,一个口令加密后的拷贝和用户登录后立即执行的程序,(注:为了加强安全性,现在的系统一般都把加密的口令放在另一个文件--shadow中,而passwd中存放口令的部分以一个x字符代替)虽然没有严格规定这个程序必须是某个Linux shell,但大多数情况下都如此。

最常用的shell

在Linux 和 UNIX系统里可以使用多种不同的shell可以使用。最常用的几种是 Bourne shell (sh), C shell (csh), 和 Korn shell (ksh)。三种shell 都有它们的优点和缺点。Bourne shell 的作者是 Steven Bourne。它是 UNIX 最初使用的shell 并且在每种 UNIX 上都可以使用。Bourne shell 在 shell 编程方面相当优秀,但在处理与用户的交互方面作得不如其他几种 shell。

C shell 由 Bill Joy 所写,它更多的考虑了用户界面的友好性。它支持象命令补齐(command-line completion)等一些 Bourne shell 所不支持的特性。普遍认为C shell 的编程接口做的不如 Bourne shell, 但 C shell 被很多 C

程序员使用因为 C shell的语法和 C语言的很相似,这也是C shell名称的由来。

Korn shell (ksh) 由 Dave Korn 所写。它集合了C shell 和 Bourne shell 的优点并且和 Bourne shell 完全兼容。

除了这些 shell 以外,许多其他的 shell 程序吸收了这些原来的 shell 程序的优点而成为新的 shell 。在 Linux 上常见的有 tcsh (csh 的扩展),Bourne Again shell(bash, sh 的扩展), 和Public Domain Korn shell (pdksh, ksh 的扩展)。bash 是大多数Linux 系统的缺省 shell。

The Bourne Again Shell

Bourne Again shell (bash), 正如它的名字所暗示的,是 Bourne shell 的扩展。bash 与 Bourne shell 完全向后兼容,并且在 Bourne shell 的基础上增加和增强了很多特性。bash 也包含了很多 C 和 Korn shell 里的优点。bash 有很灵活和强大的编程接口,同时又有很友好的用户界面。

为什么要用 bash 来代替 sh 呢?Bourne shell 最大的缺点在于它处理用户的输入方面。在 Bourne shell 里键入命令会很麻烦,尤其当你键入很多相似的命令时。而 bash 准备了几种特性使命令的输入变得更容易。

命令补齐(Command-Line Completion)

通常你在 bash (或任何其他的 shell)下输入命令时你不必把命令输全 shell 就能判断出你所要输入的命令。例如,假定当前的工作目录包含以下的文件和子目录:

News/ bin/ games/ mail/ samplefile test/

如果你要进入 test 子目录,你将会输入以下的命令:

cd test

这个命令能够满足你的需要,但 bash还提供了稍微不同的方法来完成同样的事。因为 test 是当前目录里唯一以字母 t开头的子目录,bash在你只输入字母 t后就能判断出你要做什么了:

cd t

在你键入那个字母后,唯一的可能就是 test 。想让 bash 帮你结束命令的话,按下 Tab 键:

cd t

当你这样做以后,bash 将帮你补齐命令并显示在屏幕上。但在你按下回车键以前命令并没有被执行,bash 会让你检验补齐的命令是否是你真正需要的。在输入象这样短的命令时你也许看不出它的价值所在,甚至在命令很短时还会简慢输入的速度,但是当你要输入的命令有点长时,你会发现这个特性是多么的美好。

但是当目录里有不止一个以字母 t 开头的文件时会发生什么情况呢?在你使用命令补齐时会有问题,让我们看看下面的情况,当前目录里有下列内容:

News/

bin/

mail/

samplefile

test/

tools/ working/

现在这个目录里有两个以字母 t 开头的文件。假设你仍然想进入 test 子目录,如何使用命令补齐呢?如果你象先前那样键入:

cd t

bash 将不知道你到底想进入哪个子目录,因为给出的信息并不唯一。如果你这样做了的话,bash 将发出一声蜂鸣提醒你没有足够的信息来补齐你的命令。蜂鸣之后bash 并不改变输入的命令,这将使你能在原来的基础上再输入更多的信息,在这个例子中你仅需再键入一个 e 并再按一下 Tab 键,这时 bash 就有足够的信息来完成你的命令了:

cd test

当你输入命令时不论何时按下 Tab 键,bash 都将尽其所能地试图补齐命令,不行的话会发出蜂鸣来提醒你需要更多的信息。你需要键入更多的字符,并再次按下 Tab 键,重复这个过程直至你期望的命令出现。

通配符

另一个使命令输入变得更简单的方法是在命令中使用通配符。bash 支持三种通配符:

*

匹配任何字符和任何数目的字符

?

匹配任何单字符

[...]

匹配任何包含在括号里的单字符

* 通配符的使用有些象命令补齐。例如,假设当前目录包含以下文件:

News/

bin/

games/

mail/

samplefile

test/

如果你想进入 test 目录,你将键入 cd test, 或者你想用命令补齐:

cd t

现在有第三种方法来做同样的事。因为仅有一个文件以字母 t 开头,你也能用 * 通配符来进入该目录。键入下列命令:

cd t*

* 匹配任何字符和任何数目的字符,所以 shell 将把 t* 替换为 test(当前目录里唯一和通配方案匹配的文件)。当前目录里只有一个文件以字母 t 开头的话这将是可靠的。但是如果当前目录里有不止一个文件以字母 t 开头,shell 将试着进入第一个符合匹配方案的目录,这个目录是以字母表排序的第一个目录,这个目录也许是也许不是你所期望的。

通配符 * 的一个更实际的用途是通配你要执行的命令中的多个名字相似的文件。例如,假设当前目录里包含以下文件:

ch1.doc

ch2.doc

ch3.doc

chimp

config

mail/

test/

tools/

如果你需要打印所有扩展名是 .doc 的文件,你能使用象这样

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有